<?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>139909</bug_id>
          
          <creation_ts>2014-12-23 12:07:09 -0800</creation_ts>
          <short_desc>Rename WebContext to WebProcessPool</short_desc>
          <delta_ts>2014-12-23 23:48:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>139919</dependson>
          <blocked>139932</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>mkwst</cc>
    
    <cc>ossy</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1057625</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-12-23 12:07:09 -0800</bug_when>
    <thetext>Rename WebContext to WebProcessPool</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057627</commentid>
    <comment_count>1</comment_count>
      <attachid>243684</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-12-23 12:11:57 -0800</bug_when>
    <thetext>Created attachment 243684
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057629</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-12-23 12:15:40 -0800</bug_when>
    <thetext>Attachment 243684 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/APIProcessPoolConfiguration.h:26:  #ifndef header guard has wrong style, please use: APIProcessPoolConfiguration_h  [build/header_guard] [5]
ERROR: Source/WebKit2/UIProcess/WebProcessPool.h:279:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebProcessPool.cpp:199:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit2/UIProcess/WebProcessPool.cpp:343:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebKit2/UIProcess/WebProcessPool.cpp:885:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/WebProcessPool.cpp:1330:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/WebProcessPool.cpp:1358:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/Cocoa/WebProcessPoolCocoa.mm:33:  &quot;WKBrowsingContextControllerInternal.h&quot; already included at Source/WebKit2/UIProcess/Cocoa/WebProcessPoolCocoa.mm:32  [build/include] [4]
ERROR: Source/WebKit2/UIProcess/Cocoa/WebProcessPoolCocoa.mm:219:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/Cocoa/WebProcessPoolCocoa.mm:219:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/UIProcess/Cocoa/WebProcessPoolCocoa.mm:524:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/Cocoa/WebProcessPoolCocoa.mm:528:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/Cocoa/WebProcessPoolCocoa.mm:533:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/Cocoa/WebProcessPoolCocoa.mm:539:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/UIProcess/Cocoa/WebProcessPoolCocoa.mm:544:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WebKit2/ChangeLog:13:  Need whitespace between colon and description  [changelog/filechangedescriptionwhitespace] [5]
Total errors found: 16 in 103 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057698</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-23 16:42:31 -0800</bug_when>
    <thetext>May have broken iOS build:
Source/WebKit2/UIProcess/ios/WKContentView.h:64:58: error: expected a type
- (instancetype)initWithFrame:(CGRect)frame processPool:(WebProcessPool&amp;)processPool configuration:(WebKit::WebPageConfiguration)webPageConfiguration webView:(WKWebView *)webView;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057701</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-23 16:46:42 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; May have broken iOS build:
&gt; Source/WebKit2/UIProcess/ios/WKContentView.h:64:58: error: expected a type
&gt; - (instancetype)initWithFrame:(CGRect)frame
&gt; processPool:(WebProcessPool&amp;)processPool
&gt; configuration:(WebKit::WebPageConfiguration)webPageConfiguration
&gt; webView:(WKWebView *)webView;

Build fix landed in &lt;http://trac.webkit.org/changeset/177707&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057702</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-23 16:48:34 -0800</bug_when>
    <thetext>BTW, this bug is still open but it looks like it already landed in http://trac.webkit.org/changeset/177692 ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057706</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-12-23 16:56:30 -0800</bug_when>
    <thetext>There are actually more build failures on iOS :(

Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm:238:90: error: use of undeclared identifier &apos;_context&apos;
        _geolocationProvider = adoptNS([[WKGeolocationProviderIOS alloc] initWithContext:_context.get()]);

Source/WebKit2/UIProcess/API/ios/WKViewIOS.mm:228:80: error: initialization of incomplete type &apos;WebKit::WebProcessPool&apos;
    _contentView = adoptNS([[WKContentView alloc] initWithFrame:bounds context:*toImpl(contextRef) configuration:WTF::move(webPageConfiguration) webView:nil]);

For the second one, adding the right include is not sufficient as it will complain about missing copy constructor:
Source/WebKit2/UIProcess/API/ios/WKViewIOS.mm:229:80: error: call to implicitly-deleted copy constructor of &apos;WebKit::WebProcessPool&apos;
    _contentView = adoptNS([[WKContentView alloc] initWithFrame:bounds context:*toImpl(contextRef) configuration:WTF::move(webPageConfiguration) webView:nil]);
                                                                               ^~~~~~~~~~~~~~~~~~~
In file included from Source/WebKit2/UIProcess/API/ios/WKViewIOS.mm:34:
Source/WebKit2/UIProcess/WebProcessPool.h:473:23: note: copy constructor of &apos;WebProcessPool&apos; is implicitly deleted because field &apos;m_defaultPageGroup&apos; has a deleted copy constructor
    Ref&lt;WebPageGroup&gt; m_defaultPageGroup;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057719</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-12-23 17:13:06 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; There are actually more build failures on iOS :(
&gt; 
&gt; Source/WebKit2/UIProcess/API/Cocoa/WKProcessGroup.mm:238:90: error: use of
&gt; undeclared identifier &apos;_context&apos;
&gt;         _geolocationProvider = adoptNS([[WKGeolocationProviderIOS alloc]
&gt; initWithContext:_context.get()]);
&gt; 
&gt; Source/WebKit2/UIProcess/API/ios/WKViewIOS.mm:228:80: error: initialization
&gt; of incomplete type &apos;WebKit::WebProcessPool&apos;
&gt;     _contentView = adoptNS([[WKContentView alloc] initWithFrame:bounds
&gt; context:*toImpl(contextRef) configuration:WTF::move(webPageConfiguration)
&gt; webView:nil]);
&gt; 
&gt; For the second one, adding the right include is not sufficient as it will
&gt; complain about missing copy constructor:
&gt; Source/WebKit2/UIProcess/API/ios/WKViewIOS.mm:229:80: error: call to
&gt; implicitly-deleted copy constructor of &apos;WebKit::WebProcessPool&apos;
&gt;     _contentView = adoptNS([[WKContentView alloc] initWithFrame:bounds
&gt; context:*toImpl(contextRef) configuration:WTF::move(webPageConfiguration)
&gt; webView:nil]);
&gt;                                                                             
&gt; ^~~~~~~~~~~~~~~~~~~
&gt; In file included from Source/WebKit2/UIProcess/API/ios/WKViewIOS.mm:34:
&gt; Source/WebKit2/UIProcess/WebProcessPool.h:473:23: note: copy constructor of
&gt; &apos;WebProcessPool&apos; is implicitly deleted because field &apos;m_defaultPageGroup&apos;
&gt; has a deleted copy constructor
&gt;     Ref&lt;WebPageGroup&gt; m_defaultPageGroup;

Attempted fix landed in r177710.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057742</commentid>
    <comment_count>8</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2014-12-23 20:06:48 -0800</bug_when>
    <thetext>EFL and GTK ports have been broken since this patch. I upload a patch for EFL port for now.

https://bugs.webkit.org/show_bug.cgi?id=139932</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057760</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-12-23 23:42:54 -0800</bug_when>
    <thetext>Let&apos;s close it, the original patch and all buildfixes already landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057761</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-12-23 23:48:11 -0800</bug_when>
    <thetext>GTK fix landed in http://trac.webkit.org/changeset/177721</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243684</attachid>
            <date>2014-12-23 12:11:57 -0800</date>
            <delta_ts>2014-12-23 12:13:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139909-20141223121156.patch</filename>
            <type>text/plain</type>
            <size>563047</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTEyLTIzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVuYW1lIFdlYkNvbnRleHQgdG8gV2Vi
UHJvY2Vzc1Bvb2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzOTkwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1lcmdlIFNlc3Npb25JRCBhbmQgU2Vzc2lvbklESGFzaCBpbnRvIG9uZSBmaWxlIHRvIG1h
a2UgYXV0by1nZW5lcmF0aW9uIG9mCisgICAgICAgIEhhc2hNYXBzIHdpdGggU2Vzc2lvbklEcyBl
YXNpZXIuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmg6CisgICAgICAgICogcGFnZS9TZXNz
aW9uSUQuaDoKKyAgICAgICAgKFdURjo6U2Vzc2lvbklESGFzaDo6aGFzaCk6CisgICAgICAgIChX
VEY6OlNlc3Npb25JREhhc2g6OmVxdWFsKToKKyAgICAgICAgKFdURjo6SGFzaFRyYWl0czxXZWJD
b3JlOjpTZXNzaW9uSUQ+OjplbXB0eVZhbHVlKToKKyAgICAgICAgKFdURjo6SGFzaFRyYWl0czxX
ZWJDb3JlOjpTZXNzaW9uSUQ+Ojpjb25zdHJ1Y3REZWxldGVkVmFsdWUpOgorICAgICAgICAoV1RG
OjpIYXNoVHJhaXRzPFdlYkNvcmU6OlNlc3Npb25JRD46OmlzRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKiBwYWdlL1Nlc3Npb25JREhhc2guaDogUmVtb3ZlZC4KKwogMjAxNC0xMi0yMyAgTXlsZXMg
Qy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIHBsYXRmb3JtL21h
Yy9lZGl0aW5nL2lucHV0L2RldmFuYWdhcmktbGlnYXR1cmUuaHRtbCBpcyBmbGFreSBvbiBZb3Nl
bWl0ZSwgbGlnYXR1cmUgZmFpbHMgdG8gZm9ybQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTc3NjkwKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzM1LDcgKzIzMzUsNiBAQAogCQk3NTc5M0VENDBEMENFODVCMDA3RkMwQUMg
LyogRE9NTWVzc2FnZUV2ZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzU3OTNFRDEwRDBDRTg1QjAwN0ZDMEFDIC8qIERPTU1lc3NhZ2VFdmVudC5t
bSAqLzsgfTsKIAkJNzU3OTNFRDUwRDBDRTg1QjAwN0ZDMEFDIC8qIERPTU1lc3NhZ2VFdmVudElu
dGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
NTc5M0VEMjBEMENFODVCMDA3RkMwQUMgLyogRE9NTWVzc2FnZUV2ZW50SW50ZXJuYWwuaCAqLzsg
fTsKIAkJNzU5Q0I4MzcxOTJEQTkxOTAwMTJCQzY0IC8qIENvbnRyb2xTdGF0ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMUMwOEJDMThFMzVENjgw
MEI2NTYxNSAvKiBDb250cm9sU3RhdGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJNzVEQ0M3QjgxOEI4MUM4ODAwQTU3MTI4IC8qIFNlc3Npb25J
REhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1
RENDN0I3MThCODFDODgwMEE1NzEyOCAvKiBTZXNzaW9uSURIYXNoLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzYwODQ3Q0UxOUE2QTI3ODAwNDI4
Q0NDIC8qIEF1dG9jb21wbGV0ZUVycm9yRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc2MDg0N0NEMTlBNkEyNzcwMDQyOENDQyAvKiBBdXRvY29t
cGxldGVFcnJvckV2ZW50LmggKi87IH07CiAJCTc2MzNBNzI2MTNEOEIzM0EwMDg1MDFCNiAvKiBM
b2NhbGVUb1NjcmlwdE1hcHBpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc2MzNBNzI0MTNEOEIzM0EwMDg1MDFCNiAvKiBMb2NhbGVUb1NjcmlwdE1h
cHBpbmcuaCAqLzsgfTsKIAkJNzYzM0E3MjcxM0Q4QjMzQTAwODUwMUI2IC8qIExvY2FsZVRvU2Ny
aXB0TWFwcGluZ0RlZmF1bHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzYzM0E3MjUxM0Q4QjMzQTAwODUwMUI2IC8qIExvY2FsZVRvU2NyaXB0TWFw
cGluZ0RlZmF1bHQuY3BwICovOyB9OwpAQCAtOTUyNyw3ICs5NTI2LDYgQEAKIAkJNzU3OTNFRDAw
RDBDRTg1QjAwN0ZDMEFDIC8qIERPTU1lc3NhZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRE9NTWVzc2FnZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTc1NzkzRUQxMEQwQ0U4NUIwMDdGQzBBQyAvKiBET01NZXNzYWdlRXZlbnQubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NTWVzc2FnZUV2ZW50Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NTc5M0VEMjBEMENFODVCMDA3RkMwQUMg
LyogRE9NTWVzc2FnZUV2ZW50SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERPTU1lc3NhZ2VFdmVudEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTc1RENDN0I3MThCODFDODgwMEE1NzEyOCAvKiBTZXNzaW9uSURIYXNoLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlc3Npb25JREhhc2guaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzYwODQ3Q0QxOUE2QTI3NzAwNDI4Q0NDIC8qIEF1dG9jb21wbGV0
ZUVycm9yRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXV0b2NvbXBs
ZXRlRXJyb3JFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NjA4NDdDRjE5
QTZBMjg2MDA0MjhDQ0MgLyogQXV0b2NvbXBsZXRlRXJyb3JFdmVudC5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQXV0b2Nv
bXBsZXRlRXJyb3JFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc2MzNB
NzI0MTNEOEIzM0EwMDg1MDFCNiAvKiBMb2NhbGVUb1NjcmlwdE1hcHBpbmcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9jYWxlVG9TY3JpcHRNYXBwaW5nLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjc2Myw3ICsxNjc2MSw2IEBACiAJCQkJOTc0RDJEQTIx
NDZBNTM1RDAwRDUxRjhCIC8qIFNlY3VyaXR5UG9saWN5LmNwcCAqLywKIAkJCQk5NzREMkRBMzE0
NkE1MzVEMDBENTFGOEIgLyogU2VjdXJpdHlQb2xpY3kuaCAqLywKIAkJCQk3NTZCMkNFMDE4Qjcx
MDE2MDBGRUNGQUEgLyogU2Vzc2lvbklELmggKi8sCi0JCQkJNzVEQ0M3QjcxOEI4MUM4ODAwQTU3
MTI4IC8qIFNlc3Npb25JREhhc2guaCAqLywKIAkJCQkxNEM5QTVFOTBCM0QxMDVGMDA1QTAyMzIg
LyogU2V0dGluZ3MuY3BwICovLAogCQkJCUY1ODc4NjNBMDJERTNBMTQwMUVBNDEyMiAvKiBTZXR0
aW5ncy5oICovLAogCQkJCUJDNTlERUY4MTY5REVEQzMwMDE2QUMzNCAvKiBTZXR0aW5ncy5pbiAq
LywKQEAgLTI2MTE1LDcgKzI2MTEyLDYgQEAKIAkJCQlBNzVFNDk3NjEwNzUyQUNCMDBDOUI4OTYg
LyogU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDkzQUVFMzE5
REY1NjQxMDAyQTg2QzMgLyogU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzU2QjJDRTExOEI3MTAxNjAwRkVDRkFBIC8qIFNlc3Npb25JRC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNzVEQ0M3QjgxOEI4MUM4ODAwQTU3MTI4IC8qIFNlc3Npb25JREhhc2guaCBp
biBIZWFkZXJzICovLAogCQkJCTkzMzA5RTEwMDk5RTY0OTIwMDU2RTU4MSAvKiBTZXROb2RlQXR0
cmlidXRlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjhEQkRCNEMxMzBCMEY4QTAwRjVD
REIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTRG
MDgyNDVFNTkwMDFFOUFCQyAvKiBTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaAkocmV2aXNpb24gMTc3NjkwKQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCiAjaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW5IYXNoLmgiCi0jaW5jbHVkZSAiU2Vzc2lvbklESGFzaC5oIgor
I2luY2x1ZGUgIlNlc3Npb25JRC5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9TZXNzaW9uSUQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL1Nlc3Npb25JRC5oCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L1Nlc3Npb25JRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw5IEBACiAjaWZuZGVmIFNl
c3Npb25JRF9oCiAjZGVmaW5lIFNlc3Npb25JRF9oCiAKKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgU2Vzc2lvbklEIHsKQEAgLTQ3LDYgKzUwLDI4IEBAIHByaXZhdGU6CiAgICAg
dWludDY0X3QgbV9zZXNzaW9uSUQ7CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9CisK
K25hbWVzcGFjZSBXVEYgeworCisvLyBUaGUgZW1wdHkgdmFsdWUgaXMgZW1wdHlTZXNzaW9uSUQo
KSwgdGhlIGRlbGV0ZWQgdmFsdWUgaXMgKC0xKQorc3RydWN0IFNlc3Npb25JREhhc2ggeworICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCYgcCkgeyByZXR1
cm4gKHVuc2lnbmVkKXAuc2Vzc2lvbklEKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBXZWJDb3JlOjpTZXNzaW9uSUQmIGEsIGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSB0cnVlOworfTsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2Vi
Q29yZTo6U2Vzc2lvbklEPiA6IEdlbmVyaWNIYXNoVHJhaXRzPFdlYkNvcmU6OlNlc3Npb25JRD4g
eworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWxldGVkVmFsdWVJZGVudGlmaWVyID0gMHhm
ZmZmZmZmZmZmZmZmZmZmOworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24g
PSBmYWxzZTsKKyAgICBzdGF0aWMgV2ViQ29yZTo6U2Vzc2lvbklEIGVtcHR5VmFsdWUoKSB7IHJl
dHVybiBXZWJDb3JlOjpTZXNzaW9uSUQ6OmVtcHR5U2Vzc2lvbklEKCk7IH0KKworICAgIHN0YXRp
YyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShXZWJDb3JlOjpTZXNzaW9uSUQmIHNsb3QpIHsg
c2xvdCA9IFdlYkNvcmU6OlNlc3Npb25JRChkZWxldGVkVmFsdWVJZGVudGlmaWVyKTsgfQorICAg
IHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVlKGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCYgc2xv
dCkgeyByZXR1cm4gc2xvdCA9PSBXZWJDb3JlOjpTZXNzaW9uSUQoZGVsZXRlZFZhbHVlSWRlbnRp
Zmllcik7IH0KK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxXZWJDb3JlOjpTZXNz
aW9uSUQ+IHsKKyAgICB0eXBlZGVmIFNlc3Npb25JREhhc2ggSGFzaDsKK307CisKK30KIAogI2Vu
ZGlmIC8vIFNlc3Npb25JRF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1Nlc3Npb25JREhh
c2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1Nlc3Npb25JREhhc2guaAko
cmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZXNzaW9uSURIYXNoLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU2Vz
c2lvbklESGFzaF9oCi0jZGVmaW5lIFNlc3Npb25JREhhc2hfaAotCi0jaW5jbHVkZSAiU2Vzc2lv
bklELmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aFRyYWl0cy5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotLy8gVGhlIGVtcHR5IHZhbHVlIGlzIGVt
cHR5U2Vzc2lvbklEKCksIHRoZSBkZWxldGVkIHZhbHVlIGlzICgtMSkKLXN0cnVjdCBTZXNzaW9u
SURIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpTZXNzaW9u
SUQmIHApIHsgcmV0dXJuICh1bnNpZ25lZClwLnNlc3Npb25JRCgpOyB9Ci0gICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgV2ViQ29yZTo6U2Vzc2lvbklEJiBhLCBjb25zdCBXZWJDb3JlOjpTZXNz
aW9uSUQmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVU
b0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBI
YXNoVHJhaXRzPFdlYkNvcmU6OlNlc3Npb25JRD4gOiBHZW5lcmljSGFzaFRyYWl0czxXZWJDb3Jl
OjpTZXNzaW9uSUQ+IHsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgZGVsZXRlZFZhbHVlSWRl
bnRpZmllciA9IDB4ZmZmZmZmZmZmZmZmZmZmZjsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVk
c0Rlc3RydWN0aW9uID0gZmFsc2U7Ci0gICAgc3RhdGljIFdlYkNvcmU6OlNlc3Npb25JRCBlbXB0
eVZhbHVlKCkgeyByZXR1cm4gV2ViQ29yZTo6U2Vzc2lvbklEOjplbXB0eVNlc3Npb25JRCgpOyB9
Ci0KLSAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoV2ViQ29yZTo6U2Vzc2lv
bklEJiBzbG90KSB7IHNsb3QgPSBXZWJDb3JlOjpTZXNzaW9uSUQoZGVsZXRlZFZhbHVlSWRlbnRp
Zmllcik7IH0KLSAgICBzdGF0aWMgYm9vbCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBXZWJDb3JlOjpT
ZXNzaW9uSUQmIHNsb3QpIHsgcmV0dXJuIHNsb3QgPT0gV2ViQ29yZTo6U2Vzc2lvbklEKGRlbGV0
ZWRWYWx1ZUlkZW50aWZpZXIpOyB9Ci19OwotdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8
V2ViQ29yZTo6U2Vzc2lvbklEPiB7Ci0gICAgdHlwZWRlZiBTZXNzaW9uSURIYXNoIEhhc2g7Ci19
OwotCi19Ci0KLSNlbmRpZiAvLyBTZXNzaW9uSURIYXNoX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE3IEBACisyMDE0LTEyLTIzICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmVuYW1lIFdlYkNvbnRleHQgdG8gV2ViUHJvY2Vzc1Bvb2wKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTkwOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gTWFqb3IgcmVuYW1lczoK
KyAgICAgICAgICAgIFdlYkNvbnRleHQgLT4gV2ViUHJvY2Vzc1Bvb2wKKyAgICAgICAgICAgIFdl
YkNvbnRleHRDb25maWd1cmF0aW9uIC0+IFdlYlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbgorICAg
ICAgICAgICAgQVBJOjpDb250ZXh0Q29uZmlndXJhdGlvbiAtPiBBUEk6OlByb2Nlc3NQb29sQ29u
ZmlndXJhdGlvbgorCisgICAgICAgICogRmlsZSBsaXN0IGVsaWRlZCAqCisKIDIwMTQtMTItMjIg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgYSBU
cmFuc2Zvcm1lciBmb3IgVXNlckRhdGEgYXMgd2VsbCwgdG8gYXZvaWQgYWx3YXlzIGNvcHlpbmcg
YXJyYXlzIGFuZCBkaWN0aW9uYXJpZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFr
ZQkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFr
ZQkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw2IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0g
XAogICAgIFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyIFwKICAgICBXZWJBcHBsaWNhdGlvbkNh
Y2hlTWFuYWdlclByb3h5IFwKICAgICBXZWJDb25uZWN0aW9uIFwKLSAgICBXZWJDb250ZXh0IFwK
ICAgICBXZWJDb29raWVNYW5hZ2VyIFwKICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkgXAogICAg
IFdlYkRhdGFiYXNlTWFuYWdlciBcCkBAIC0xMzIsNiArMTMxLDcgQEAgTUVTU0FHRV9SRUNFSVZF
UlMgPSBcCiAgICAgV2ViUGFnZVByb3h5IFwKICAgICBXZWJQcm9jZXNzIFwKICAgICBXZWJQcm9j
ZXNzQ29ubmVjdGlvbiBcCisgICAgV2ViUHJvY2Vzc1Bvb2wgXAogICAgIFdlYlByb2Nlc3NQcm94
eSBcCiAgICAgV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXIgXAogICAgIFdlYlJlc291cmNlQ2FjaGVN
YW5hZ2VyUHJveHkgXApJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcAkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4
ICs0MSw4IEBACiAjaW5jbHVkZSAiUmVtb3RlTmV0d29ya2luZ0NvbnRleHQuaCIKICNpbmNsdWRl
ICJTZXNzaW9uVHJhY2tlci5oIgogI2luY2x1ZGUgIlN0YXRpc3RpY3NEYXRhLmgiCi0jaW5jbHVk
ZSAiV2ViQ29udGV4dE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlci5oIgor
I2luY2x1ZGUgIldlYlByb2Nlc3NQb29sTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0
YVR5cGVzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Mb2dnaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuaD4KQEAgLTI5Nyw3ICsyOTcsNyBAQCB2b2lkIE5ldHdv
cmtQcm9jZXNzOjpnZXROZXR3b3JrUHJvY2Vzc1N0CiAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVy
cy5zZXQoIkRvd25sb2Fkc0FjdGl2ZUNvdW50Iiwgc2hhcmVkKCkuZG93bmxvYWRNYW5hZ2VyKCku
YWN0aXZlRG93bmxvYWRDb3VudCgpKTsKICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgi
T3V0c3RhbmRpbmdBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXNDb3VudCIsIHNoYXJlZCgpLmF1dGhl
bnRpY2F0aW9uTWFuYWdlcigpLm91dHN0YW5kaW5nQXV0aGVudGljYXRpb25DaGFsbGVuZ2VDb3Vu
dCgpKTsKIAotICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
YkNvbnRleHQ6OkRpZEdldFN0YXRpc3RpY3MoZGF0YSwgY2FsbGJhY2tJRCksIDApOworICAgIHBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpE
aWRHZXRTdGF0aXN0aWNzKGRhdGEsIGNhbGxiYWNrSUQpLCAwKTsKIH0KIAogdm9pZCBOZXR3b3Jr
UHJvY2Vzczo6dGVybWluYXRlKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNzaW9u
VHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9TZXNzaW9uVHJh
Y2tlci5oCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvU2Vzc2lv
blRyYWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBTZXNz
aW9uVHJhY2tlcl9oCiAKICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklESGFzaC5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
U2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgJ
KHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNs
dWRlICJDYWNoZU1vZGVsLmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1
ZGUgIlRleHRDaGVja2VyU3RhdGUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JREhhc2gu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgpJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSU9iamVjdC5oCShyZXZpc2lv
biAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL0FQSU9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDIsOCArMTAyLDYgQEAgcHVibGljOgogICAgICAgICBCYXR0ZXJ5U3Rh
dHVzLAogICAgICAgICBDYWNoZU1hbmFnZXIsCiAgICAgICAgIENvbG9yUGlja2VyUmVzdWx0TGlz
dGVuZXIsCi0gICAgICAgIENvbnRleHQsCi0gICAgICAgIENvbnRleHRDb25maWd1cmF0aW9uLAog
ICAgICAgICBDb29raWVNYW5hZ2VyLAogICAgICAgICBEYXRhYmFzZU1hbmFnZXIsCiAgICAgICAg
IERvd25sb2FkLApAQCAtMTI5LDYgKzEyNyw4IEBAIHB1YmxpYzoKICAgICAgICAgT3JpZ2luRGF0
YU1hbmFnZXIsCiAgICAgICAgIFBhZ2UsCiAgICAgICAgIFBhZ2VHcm91cCwKKyAgICAgICAgUHJv
Y2Vzc1Bvb2wsCisgICAgICAgIFByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiwKICAgICAgICAgUGx1
Z2luU2l0ZURhdGFNYW5hZ2VyLAogICAgICAgICBQcmVmZXJlbmNlcywKICAgICAgICAgU2Vzc2lv
biwKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvQVBJVVJMUmVxdWVzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElVUkxSZXF1ZXN0LmNwcAko
cmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9BUElVUkxSZXF1
ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkFQSVVSTFJlcXVlc3QuaCIKIAotI2luY2x1ZGUgIldlYkNvbnRleHQu
aCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJQcm9j
ZXNzUG9vbC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CkBAIC00NCwxNCArNDQsMTMgQEAgZG91YmxlIFVSTFJlcXVlc3Q6OmRlZmF1bHRUaW1l
b3V0SW50ZXJ2YQogICAgIHJldHVybiBSZXNvdXJjZVJlcXVlc3Q6OmRlZmF1bHRUaW1lb3V0SW50
ZXJ2YWwoKTsKIH0KIAotLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJlYWxseSBiZSBv
biBXZWJDb250ZXh0LgorLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJlYWxseSBiZSBv
biBXZWJQcm9jZXNzUG9vbCBvciBXZWJQYWdlUHJveHkuCiB2b2lkIFVSTFJlcXVlc3Q6OnNldERl
ZmF1bHRUaW1lb3V0SW50ZXJ2YWwoZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKIHsKICAgICBSZXNv
dXJjZVJlcXVlc3Q6OnNldERlZmF1bHRUaW1lb3V0SW50ZXJ2YWwodGltZW91dEludGVydmFsKTsK
IAotICAgIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0Kj4mIGNvbnRleHRzID0gV2ViQ29udGV4dDo6
YWxsQ29udGV4dHMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbnRleHRzLnNpemUo
KTsgKytpKQotICAgICAgICBjb250ZXh0c1tpXS0+c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50
ZXJ2YWwodGltZW91dEludGVydmFsKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogV2Vi
UHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+c2V0
RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwodGltZW91dEludGVydmFsKTsKIH0KIAogdm9p
ZCBVUkxSZXF1ZXN0OjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVuY29kZXIpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2EvQVBJT2JqZWN0Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0JKHJldmlzaW9u
IDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9BUElPYmplY3QubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkKiBPYmplY3Q6Om5ld09iamVjdChz
aXplX3Qgc2l6ZSwgVHlwCiAgICAgICAgIHdyYXBwZXIgPSBOU0FsbG9jYXRlT2JqZWN0KFtXS0Nv
bm5lY3Rpb24gc2VsZl0sIHNpemUsIG51bGxwdHIpOwogICAgICAgICBicmVhazsKIAotICAgIGNh
c2UgVHlwZTo6Q29udGV4dDoKKyAgICBjYXNlIFR5cGU6OlByb2Nlc3NQb29sOgogICAgICAgICB3
cmFwcGVyID0gW1dLUHJvY2Vzc1Bvb2wgYWxsb2NdOwogICAgICAgICBicmVhazsKIApJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9PYmpDT2JqZWN0R3JhcGhDb2RlcnMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9PYmpDT2JqZWN0R3JhcGhDb2RlcnMu
bW0JKHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvT2JqQ09i
amVjdEdyYXBoQ29kZXJzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcgQEAgcHJv
dGVjdGVkOgogfTsKIAogCi0vLyBXZWJDb250ZXh0IEFkZGl0aW9ucworLy8gUHJvY2Vzc1Bvb2wg
QWRkaXRpb25zCiAKIGNsYXNzIFdlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhFbmNvZGVySW1wbCA6
IHB1YmxpYyBPYmpDT2JqZWN0R3JhcGhFbmNvZGVyPFdlYkNvbnRleHRPYmpDT2JqZWN0R3JhcGhF
bmNvZGVySW1wbD4gewogcHVibGljOgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SUNvbnRleHRDb25maWd1cmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJQ29udGV4dENvbmZpZ3VyYXRpb24uY3BwCShyZXZpc2lvbiAxNzc2OTApCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJQ29udGV4dENvbmZpZ3VyYXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiQVBJQ29udGV4dENvbmZpZ3VyYXRpb24uaCIKLQotI2luY2x1ZGUg
IldlYkNvbnRleHQuaCIKLQotbmFtZXNwYWNlIEFQSSB7Ci0KLUNvbnRleHRDb25maWd1cmF0aW9u
OjpDb250ZXh0Q29uZmlndXJhdGlvbigpCi17Ci19Ci0KLUNvbnRleHRDb25maWd1cmF0aW9uOjp+
Q29udGV4dENvbmZpZ3VyYXRpb24oKQotewotfQotCi1XZWJLaXQ6OldlYkNvbnRleHRDb25maWd1
cmF0aW9uIENvbnRleHRDb25maWd1cmF0aW9uOjp3ZWJDb250ZXh0Q29uZmlndXJhdGlvbigpIGNv
bnN0Ci17Ci0gICAgV2ViS2l0OjpXZWJDb250ZXh0Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
OwotCi0gICAgY29uZmlndXJhdGlvbi5pbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeSA9IG1faW5k
ZXhlZERCRGF0YWJhc2VEaXJlY3Rvcnk7Ci0gICAgY29uZmlndXJhdGlvbi5pbmplY3RlZEJ1bmRs
ZVBhdGggPSBtX2luamVjdGVkQnVuZGxlUGF0aDsKLSAgICBjb25maWd1cmF0aW9uLmxvY2FsU3Rv
cmFnZURpcmVjdG9yeSA9IG1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAgIGNvbmZpZ3VyYXRp
b24ud2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkgPSBtX3dlYlNRTERhdGFiYXNlRGlyZWN0b3J5Owot
ICAgIGNvbmZpZ3VyYXRpb24ubWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSA9IG1fbWVkaWFLZXlz
U3RvcmFnZURpcmVjdG9yeTsKLQotICAgIFdlYktpdDo6V2ViQ29udGV4dDo6YXBwbHlQbGF0Zm9y
bVNwZWNpZmljQ29uZmlndXJhdGlvbkRlZmF1bHRzKGNvbmZpZ3VyYXRpb24pOwotCi0gICAgcmV0
dXJuIGNvbmZpZ3VyYXRpb247Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEFQSQpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSUNvbnRleHRDb25maWd1cmF0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSUNvbnRleHRDb25maWd1cmF0aW9uLmgJKHJl
dmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUElDb250ZXh0Q29u
ZmlndXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIEFQSUNvbnRleHRDb25maWd1cmF0aW9uX2gKLSNkZWZpbmUgQVBJQ29udGV4dENv
bmZpZ3VyYXRpb25faAotCi0jaW5jbHVkZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotc3RydWN0IFdlYkNvbnRleHRD
b25maWd1cmF0aW9uOwotfQotCi1uYW1lc3BhY2UgQVBJIHsKLQotY2xhc3MgQ29udGV4dENvbmZp
Z3VyYXRpb24gOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OkNvbnRleHRDb25maWd1
cmF0aW9uPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGV4dENvbmZpZ3Vy
YXRpb24+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRl
eHRDb25maWd1cmF0aW9uKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+Q29udGV4dENvbmZpZ3VyYXRp
b24oKTsKLQotICAgIFN0cmluZyBpbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXhlZERCRGF0YWJhc2VEaXJlY3Rvcnk7IH0KLSAgICB2b2lkIHNldEluZGV4
ZWREQkRhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgaW5kZXhlZERCRGF0YWJhc2VEaXJl
Y3RvcnkpIHsgbV9pbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeSA9IGluZGV4ZWREQkRhdGFiYXNl
RGlyZWN0b3J5OyB9Ci0KLSAgICBTdHJpbmcgaW5qZWN0ZWRCdW5kbGVQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmplY3RlZEJ1bmRsZVBhdGg7IH0KLSAgICB2b2lkIHNldEluamVjdGVkQnVuZGxl
UGF0aChjb25zdCBTdHJpbmcmIGluamVjdGVkQnVuZGxlUGF0aCkgeyBtX2luamVjdGVkQnVuZGxl
UGF0aCA9IGluamVjdGVkQnVuZGxlUGF0aDsgfQotCi0gICAgU3RyaW5nIGxvY2FsU3RvcmFnZURp
cmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5OyB9Ci0gICAg
dm9pZCBzZXRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBsb2NhbFN0b3JhZ2VE
aXJlY3RvcnkpIHsgbV9sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnk7IH0KLQotICAgIFN0cmluZyB3ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0
dXJuIG1fd2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnk7IH0KLSAgICB2b2lkIHNldFdlYlNRTERhdGFi
YXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgd2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkpIHsgbV93
ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSA9IHdlYlNRTERhdGFiYXNlRGlyZWN0b3J5OyB9Ci0KLSAg
ICBTdHJpbmcgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVk
aWFLZXlzU3RvcmFnZURpcmVjdG9yeTsgfQotICAgIHZvaWQgc2V0TWVkaWFLZXlzU3RvcmFnZURp
cmVjdG9yeShjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkpIHsgbV9tZWRp
YUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeTsgfQotCi0g
ICAgV2ViS2l0OjpXZWJDb250ZXh0Q29uZmlndXJhdGlvbiB3ZWJDb250ZXh0Q29uZmlndXJhdGlv
bigpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIENvbnRleHRDb25maWd1cmF0aW9uKCk7Ci0KLSAg
ICBTdHJpbmcgbV9pbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeTsKLSAgICBTdHJpbmcgbV9pbmpl
Y3RlZEJ1bmRsZVBhdGg7Ci0gICAgU3RyaW5nIG1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAg
IFN0cmluZyBtX3dlYlNRTERhdGFiYXNlRGlyZWN0b3J5OwotICAgIFN0cmluZyBtX21lZGlhS2V5
c1N0b3JhZ2VEaXJlY3Rvcnk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBBUEkKLQotI2VuZGlmIC8v
IEFQSUNvbnRleHRDb25maWd1cmF0aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3BwCShyZXZpc2lv
biAxNzc2MzUpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUElDb250ZXh0Q29uZmln
dXJhdGlvbi5jcHA6MTc3NjM1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSVByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBUElDb250ZXh0Q29u
ZmlndXJhdGlvbi5oIgorCisjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorCituYW1lc3BhY2UgQVBJ
IHsKKworQ29udGV4dENvbmZpZ3VyYXRpb246OkNvbnRleHRDb25maWd1cmF0aW9uKCkKK3sKK30K
KworQ29udGV4dENvbmZpZ3VyYXRpb246On5Db250ZXh0Q29uZmlndXJhdGlvbigpCit7Cit9CisK
K1dlYktpdDo6V2ViQ29udGV4dENvbmZpZ3VyYXRpb24gQ29udGV4dENvbmZpZ3VyYXRpb246Ondl
YkNvbnRleHRDb25maWd1cmF0aW9uKCkgY29uc3QKK3sKKyAgICBXZWJLaXQ6OldlYkNvbnRleHRD
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247CisKKyAgICBjb25maWd1cmF0aW9uLmluZGV4ZWRE
QkRhdGFiYXNlRGlyZWN0b3J5ID0gbV9pbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeTsKKyAgICBj
b25maWd1cmF0aW9uLmluamVjdGVkQnVuZGxlUGF0aCA9IG1faW5qZWN0ZWRCdW5kbGVQYXRoOwor
ICAgIGNvbmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gbV9sb2NhbFN0b3JhZ2VE
aXJlY3Rvcnk7CisgICAgY29uZmlndXJhdGlvbi53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSA9IG1f
d2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnk7CisgICAgY29uZmlndXJhdGlvbi5tZWRpYUtleXNTdG9y
YWdlRGlyZWN0b3J5ID0gbV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5OworCisgICAgV2ViS2l0
OjpXZWJDb250ZXh0OjphcHBseVBsYXRmb3JtU3BlY2lmaWNDb25maWd1cmF0aW9uRGVmYXVsdHMo
Y29uZmlndXJhdGlvbik7CisKKyAgICByZXR1cm4gY29uZmlndXJhdGlvbjsKK30KKworfSAvLyBu
YW1lc3BhY2UgQVBJCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJUHJvY2Vzc1Bv
b2xDb25maWd1cmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDIzICsyNCwyMyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJBUElDb250ZXh0Q29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIkFQSVBy
b2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIgogCi0jaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAKIG5hbWVzcGFjZSBBUEkgewogCi1Db250ZXh0Q29u
ZmlndXJhdGlvbjo6Q29udGV4dENvbmZpZ3VyYXRpb24oKQorUHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24oKQogewogfQogCi1Db250ZXh0Q29uZmlndXJh
dGlvbjo6fkNvbnRleHRDb25maWd1cmF0aW9uKCkKK1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbjo6
flByb2Nlc3NQb29sQ29uZmlndXJhdGlvbigpCiB7CiB9CiAKLVdlYktpdDo6V2ViQ29udGV4dENv
bmZpZ3VyYXRpb24gQ29udGV4dENvbmZpZ3VyYXRpb246OndlYkNvbnRleHRDb25maWd1cmF0aW9u
KCkgY29uc3QKK1dlYktpdDo6V2ViUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uIFByb2Nlc3NQb29s
Q29uZmlndXJhdGlvbjo6d2ViUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uKCkgY29uc3QKIHsKLSAg
ICBXZWJLaXQ6OldlYkNvbnRleHRDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247CisgICAgV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKIAogICAgIGNv
bmZpZ3VyYXRpb24uaW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkgPSBtX2luZGV4ZWREQkRhdGFi
YXNlRGlyZWN0b3J5OwogICAgIGNvbmZpZ3VyYXRpb24uaW5qZWN0ZWRCdW5kbGVQYXRoID0gbV9p
bmplY3RlZEJ1bmRsZVBhdGg7CkBAIC00OCw3ICs0OCw3IEBAIFdlYktpdDo6V2ViQ29udGV4dENv
bmZpZ3VyYXRpb24gQ29udGV4dEMKICAgICBjb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNlRGly
ZWN0b3J5ID0gbV93ZWJTUUxEYXRhYmFzZURpcmVjdG9yeTsKICAgICBjb25maWd1cmF0aW9uLm1l
ZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSBtX21lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnk7CiAK
LSAgICBXZWJLaXQ6OldlYkNvbnRleHQ6OmFwcGx5UGxhdGZvcm1TcGVjaWZpY0NvbmZpZ3VyYXRp
b25EZWZhdWx0cyhjb25maWd1cmF0aW9uKTsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjph
cHBseVBsYXRmb3JtU3BlY2lmaWNDb25maWd1cmF0aW9uRGVmYXVsdHMoY29uZmlndXJhdGlvbik7
CiAKICAgICByZXR1cm4gY29uZmlndXJhdGlvbjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgJKHJldmlz
aW9uIDE3NzYzNSkJKGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSUNvbnRleHRDb25m
aWd1cmF0aW9uLmg6MTc3NjM1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSVByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIEFQSUNvbnRleHRDb25maWd1cmF0aW9uX2gKKyNkZWZpbmUgQVBJ
Q29udGV4dENvbmZpZ3VyYXRpb25faAorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworc3RydWN0IFdl
YkNvbnRleHRDb25maWd1cmF0aW9uOworfQorCituYW1lc3BhY2UgQVBJIHsKKworY2xhc3MgQ29u
dGV4dENvbmZpZ3VyYXRpb24gOiBwdWJsaWMgT2JqZWN0SW1wbDxPYmplY3Q6OlR5cGU6OkNvbnRl
eHRDb25maWd1cmF0aW9uPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29udGV4
dENvbmZpZ3VyYXRpb24+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENvbnRleHRDb25maWd1cmF0aW9uKTsKKyAgICB9CisgICAgdmlydHVhbCB+Q29udGV4dENv
bmZpZ3VyYXRpb24oKTsKKworICAgIFN0cmluZyBpbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5kZXhlZERCRGF0YWJhc2VEaXJlY3Rvcnk7IH0KKyAgICB2b2lk
IHNldEluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgaW5kZXhlZERCRGF0
YWJhc2VEaXJlY3RvcnkpIHsgbV9pbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeSA9IGluZGV4ZWRE
QkRhdGFiYXNlRGlyZWN0b3J5OyB9CisKKyAgICBTdHJpbmcgaW5qZWN0ZWRCdW5kbGVQYXRoKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmplY3RlZEJ1bmRsZVBhdGg7IH0KKyAgICB2b2lkIHNldEluamVj
dGVkQnVuZGxlUGF0aChjb25zdCBTdHJpbmcmIGluamVjdGVkQnVuZGxlUGF0aCkgeyBtX2luamVj
dGVkQnVuZGxlUGF0aCA9IGluamVjdGVkQnVuZGxlUGF0aDsgfQorCisgICAgU3RyaW5nIGxvY2Fs
U3RvcmFnZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxTdG9yYWdlRGlyZWN0b3J5
OyB9CisgICAgdm9pZCBzZXRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBsb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkpIHsgbV9sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBsb2NhbFN0b3Jh
Z2VEaXJlY3Rvcnk7IH0KKworICAgIFN0cmluZyB3ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpIGNv
bnN0IHsgcmV0dXJuIG1fd2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnk7IH0KKyAgICB2b2lkIHNldFdl
YlNRTERhdGFiYXNlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgd2ViU1FMRGF0YWJhc2VEaXJlY3Rv
cnkpIHsgbV93ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSA9IHdlYlNRTERhdGFiYXNlRGlyZWN0b3J5
OyB9CisKKyAgICBTdHJpbmcgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeTsgfQorICAgIHZvaWQgc2V0TWVkaWFLZXlz
U3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnkp
IHsgbV9tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9y
eTsgfQorCisgICAgV2ViS2l0OjpXZWJDb250ZXh0Q29uZmlndXJhdGlvbiB3ZWJDb250ZXh0Q29u
ZmlndXJhdGlvbigpIGNvbnN0OworCitwcml2YXRlOgorICAgIENvbnRleHRDb25maWd1cmF0aW9u
KCk7CisKKyAgICBTdHJpbmcgbV9pbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeTsKKyAgICBTdHJp
bmcgbV9pbmplY3RlZEJ1bmRsZVBhdGg7CisgICAgU3RyaW5nIG1fbG9jYWxTdG9yYWdlRGlyZWN0
b3J5OworICAgIFN0cmluZyBtX3dlYlNRTERhdGFiYXNlRGlyZWN0b3J5OworICAgIFN0cmluZyBt
X21lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBBUEkKKwor
I2VuZGlmIC8vIEFQSUNvbnRleHRDb25maWd1cmF0aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmgJKHdv
cmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUElQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTggKzMwLDE4IEBACiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewotc3RydWN0IFdl
YkNvbnRleHRDb25maWd1cmF0aW9uOworc3RydWN0IFdlYlByb2Nlc3NQb29sQ29uZmlndXJhdGlv
bjsKIH0KIAogbmFtZXNwYWNlIEFQSSB7CiAKLWNsYXNzIENvbnRleHRDb25maWd1cmF0aW9uIDog
cHVibGljIE9iamVjdEltcGw8T2JqZWN0OjpUeXBlOjpDb250ZXh0Q29uZmlndXJhdGlvbj4gewor
Y2xhc3MgUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uIDogcHVibGljIE9iamVjdEltcGw8T2JqZWN0
OjpUeXBlOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDb250ZXh0Q29uZmlndXJhdGlvbj4gY3JlYXRlKCkKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24+IGNyZWF0ZSgpCiAgICAgewotICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENvbnRleHRDb25maWd1cmF0aW9uKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24pOwogICAgIH0KLSAgICB2
aXJ0dWFsIH5Db250ZXh0Q29uZmlndXJhdGlvbigpOworICAgIHZpcnR1YWwgflByb2Nlc3NQb29s
Q29uZmlndXJhdGlvbigpOwogCiAgICAgU3RyaW5nIGluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeTsgfQogICAgIHZv
aWQgc2V0SW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBpbmRleGVkREJE
YXRhYmFzZURpcmVjdG9yeSkgeyBtX2luZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5ID0gaW5kZXhl
ZERCRGF0YWJhc2VEaXJlY3Rvcnk7IH0KQEAgLTU4LDEwICs1OCwxMCBAQCBwdWJsaWM6CiAgICAg
U3RyaW5nIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX21lZGlh
S2V5c1N0b3JhZ2VEaXJlY3Rvcnk7IH0KICAgICB2b2lkIHNldE1lZGlhS2V5c1N0b3JhZ2VEaXJl
Y3RvcnkoY29uc3QgU3RyaW5nJiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KSB7IG1fbWVkaWFL
ZXlzU3RvcmFnZURpcmVjdG9yeSA9IG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnk7IH0KIAotICAg
IFdlYktpdDo6V2ViQ29udGV4dENvbmZpZ3VyYXRpb24gd2ViQ29udGV4dENvbmZpZ3VyYXRpb24o
KSBjb25zdDsKKyAgICBXZWJLaXQ6OldlYlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiB3ZWJQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24oKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBDb250ZXh0Q29u
ZmlndXJhdGlvbigpOworICAgIFByb2Nlc3NQb29sQ29uZmlndXJhdGlvbigpOwogCiAgICAgU3Ry
aW5nIG1faW5kZXhlZERCRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgU3RyaW5nIG1faW5qZWN0ZWRC
dW5kbGVQYXRoOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rUHJv
dmlkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9WaXNpdGVk
TGlua1Byb3ZpZGVyLmNwcAkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1Zpc2l0ZWRMaW5rUHJvdmlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICsz
MCw5IEBACiAjaW5jbHVkZSAiVmlzaXRlZExpbmtQcm92aWRlck1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiVmlzaXRlZExpbmtUYWJsZS5oIgogI2luY2x1ZGUgIlZpc2l0ZWRMaW5rVGFibGVDb250cm9s
bGVyTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlICJX
ZWJQcm9jZXNzUHJveHkuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTk5LDcg
KzEwMCw3IEBAIHZvaWQgVmlzaXRlZExpbmtQcm92aWRlcjo6cmVtb3ZlQWxsKCkKICAgICBtX3Rh
YmxlLmNsZWFyKCk7CiAKICAgICBmb3IgKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA6IG1fcHJv
Y2Vzc2VzKSB7Ci0gICAgICAgIEFTU0VSVChwcm9jZXNzLT5jb250ZXh0KCkucHJvY2Vzc2VzKCku
Y29udGFpbnMocHJvY2VzcykpOworICAgICAgICBBU1NFUlQocHJvY2Vzcy0+cHJvY2Vzc1Bvb2wo
KS5wcm9jZXNzZXMoKS5jb250YWlucyhwcm9jZXNzKSk7CiAgICAgICAgIHByb2Nlc3MtPmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OlJlbW92
ZUFsbFZpc2l0ZWRMaW5rcygpLCBtX2lkZW50aWZpZXIpOwogICAgIH0KIH0KQEAgLTE3OCw3ICsx
NzksNyBAQCB2b2lkIFZpc2l0ZWRMaW5rUHJvdmlkZXI6OnBlbmRpbmdWaXNpdGVkCiAgICAgICAg
IHJldHVybjsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9wcm9jZXNz
ZXMpIHsKLSAgICAgICAgQVNTRVJUKHByb2Nlc3MtPmNvbnRleHQoKS5wcm9jZXNzZXMoKS5jb250
YWlucyhwcm9jZXNzKSk7CisgICAgICAgIEFTU0VSVChwcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnBy
b2Nlc3NlcygpLmNvbnRhaW5zKHByb2Nlc3MpKTsKIAogICAgICAgICBpZiAoYWRkZWRWaXNpdGVk
TGlua3Muc2l6ZSgpID4gMjApCiAgICAgICAgICAgICBwcm9jZXNzLT5jb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpBbGxWaXNpdGVkTGlua1N0
YXRlQ2hhbmdlZCgpLCBtX2lkZW50aWZpZXIpOwpAQCAtMjM0LDcgKzIzNSw3IEBAIHZvaWQgVmlz
aXRlZExpbmtQcm92aWRlcjo6cmVzaXplVGFibGUodW4KIAogdm9pZCBWaXNpdGVkTGlua1Byb3Zp
ZGVyOjpzZW5kVGFibGUoV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNzKQogewotICAgIEFTU0VSVChw
cm9jZXNzLmNvbnRleHQoKS5wcm9jZXNzZXMoKS5jb250YWlucygmcHJvY2VzcykpOworICAgIEFT
U0VSVChwcm9jZXNzLnByb2Nlc3NQb29sKCkucHJvY2Vzc2VzKCkuY29udGFpbnMoJnByb2Nlc3Mp
KTsKIAogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKICAgICBpZiAoIW1fdGFibGUu
c2hhcmVkTWVtb3J5KCktPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9u
bHkpKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rUHJvdmlkZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlzaXRlZExpbmtQcm92
aWRlci5oCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlz
aXRlZExpbmtQcm92aWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw2IEBACiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBXZWJDb250ZXh0OwogY2xhc3MgV2ViUGFnZVByb3h5
OwogY2xhc3MgV2ViUHJvY2Vzc1Byb3h5OwogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5
LmNwcAkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkFw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw3IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5EYXRhLmgiCiAjaW5jbHVkZSAiV2ViQXBw
bGljYXRpb25DYWNoZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYkFwcGxpY2F0aW9u
Q2FjaGVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtMzks
MTUgKzM5LDE1IEBAIGNvbnN0IGNoYXIqIFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHIKICAg
ICByZXR1cm4gIldlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkiOwogfQogCi1QYXNzUmVm
UHRyPFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHk+IFdlYkFwcGxpY2F0aW9uQ2FjaGVN
YW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJDb250ZXh0KiBjb250ZXh0KQorUGFzc1JlZlB0cjxXZWJB
cHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5PiBXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclBy
b3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQogewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eShjb250ZXh0KSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5KHBy
b2Nlc3NQb29sKSk7CiB9CiAKLVdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHk6OldlYkFw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkoV2ViQ29udGV4dCogY29udGV4dCkKLSAgICA6IFdl
YkNvbnRleHRTdXBwbGVtZW50KGNvbnRleHQpCitXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclBy
b3h5OjpXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9j
ZXNzUG9vbCkKKyAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQogewotICAg
IGNvbnRleHQtPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CisgICAgcHJvY2Vz
c1Bvb2wtPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViQXBwbGljYXRpb25DYWNoZU1h
bmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiB9CiAKIFdlYkFwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHk6On5XZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5
KCkKQEAgLTU1LDcgKzU1LDcgQEAgV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eTo6fldl
YkFwcAogfQogCiAKLXZvaWQgV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eTo6Y29udGV4
dERlc3Ryb3llZCgpCit2b2lkIFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHk6OnByb2Nl
c3NQb29sRGVzdHJveWVkKCkKIHsKICAgICBpbnZhbGlkYXRlQ2FsbGJhY2tNYXAobV9hcnJheUNh
bGxiYWNrcywgQ2FsbGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CiB9CkBA
IC04NCw3ICs4NCw3IEBAIHZvaWQgV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eTo6Z2UK
IHsKICAgICBSZWZQdHI8QXJyYXlDYWxsYmFjaz4gY2FsbGJhY2sgPSBBcnJheUNhbGxiYWNrOjpj
cmVhdGUoV1RGOjptb3ZlKGNhbGxiYWNrRnVuY3Rpb24pKTsKIAotICAgIGlmICghY29udGV4dCgp
KSB7CisgICAgaWYgKCFwcm9jZXNzUG9vbCgpKSB7CiAgICAgICAgIGNhbGxiYWNrLT5pbnZhbGlk
YXRlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgV2Vi
QXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eTo6Z2UKICAgICBtX2FycmF5Q2FsbGJhY2tzLnNl
dChjYWxsYmFja0lELCBjYWxsYmFjay5yZWxlYXNlKCkpOwogCiAgICAgLy8gRklYTUUgKE11bHRp
LVdlYlByb2Nlc3MpOiA8cmRhcjovL3Byb2JsZW0vMTIyMzk3NjU+IE1ha2UgbWFuaXB1bGF0aW5n
IGNhY2hlIGluZm9ybWF0aW9uIHdvcmsgd2l0aCBwZXItdGFiIFdlYlByb2Nlc3MuCi0gICAgY29u
dGV4dCgpLT5zZW5kVG9BbGxQcm9jZXNzZXNSZWxhdW5jaGluZ1RoZW1JZk5lY2Vzc2FyeShNZXNz
YWdlczo6V2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXI6OkdldEFwcGxpY2F0aW9uQ2FjaGVPcmln
aW5zKGNhbGxiYWNrSUQpKTsKKyAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9BbGxQcm9jZXNzZXNS
ZWxhdW5jaGluZ1RoZW1JZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQXBwbGljYXRpb25DYWNoZU1h
bmFnZXI6OkdldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zKGNhbGxiYWNrSUQpKTsKIH0KICAgICAK
IHZvaWQgV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eTo6ZGlkR2V0QXBwbGljYXRpb25D
YWNoZU9yaWdpbnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbkRhdGFz
LCB1aW50NjRfdCBjYWxsYmFja0lEKQpAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgV2ViQXBwbGlj
YXRpb25DYWNoZU1hbmFnZXJQcm94eTo6ZGkKIAogdm9pZCBXZWJBcHBsaWNhdGlvbkNhY2hlTWFu
YWdlclByb3h5OjpkZWxldGVFbnRyaWVzRm9yT3JpZ2luKEFQSTo6U2VjdXJpdHlPcmlnaW4qIG9y
aWdpbikKIHsKLSAgICBpZiAoIWNvbnRleHQoKSkKKyAgICBpZiAoIXByb2Nlc3NQb29sKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFNlY3VyaXR5T3JpZ2luRGF0YSBzZWN1cml0eU9yaWdpbkRh
dGE7CkBAIC0xMTMsMTYgKzExMywxNiBAQCB2b2lkIFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2Vy
UHJveHk6OmRlCiAgICAgc2VjdXJpdHlPcmlnaW5EYXRhLnBvcnQgPSBvcmlnaW4tPnNlY3VyaXR5
T3JpZ2luKCkucG9ydCgpOwogCiAgICAgLy8gRklYTUUgKE11bHRpLVdlYlByb2Nlc3MpOiA8cmRh
cjovL3Byb2JsZW0vMTIyMzk3NjU+IE1ha2UgbWFuaXB1bGF0aW5nIGNhY2hlIGluZm9ybWF0aW9u
IHdvcmsgd2l0aCBwZXItdGFiIFdlYlByb2Nlc3MuCi0gICAgY29udGV4dCgpLT5zZW5kVG9BbGxQ
cm9jZXNzZXNSZWxhdW5jaGluZ1RoZW1JZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQXBwbGljYXRp
b25DYWNoZU1hbmFnZXI6OkRlbGV0ZUVudHJpZXNGb3JPcmlnaW4oc2VjdXJpdHlPcmlnaW5EYXRh
KSk7CisgICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvQWxsUHJvY2Vzc2VzUmVsYXVuY2hpbmdUaGVt
SWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyOjpEZWxldGVF
bnRyaWVzRm9yT3JpZ2luKHNlY3VyaXR5T3JpZ2luRGF0YSkpOwogfQogCiB2b2lkIFdlYkFwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHk6OmRlbGV0ZUFsbEVudHJpZXMoKQogewotICAgIGlmICgh
Y29udGV4dCgpKQorICAgIGlmICghcHJvY2Vzc1Bvb2woKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gRklYTUUgKE11bHRpLVdlYlByb2Nlc3MpOiA8cmRhcjovL3Byb2JsZW0vMTIyMzk3NjU+
IE1ha2UgbWFuaXB1bGF0aW5nIGNhY2hlIGluZm9ybWF0aW9uIHdvcmsgd2l0aCBwZXItdGFiIFdl
YlByb2Nlc3MuCi0gICAgY29udGV4dCgpLT5zZW5kVG9BbGxQcm9jZXNzZXNSZWxhdW5jaGluZ1Ro
ZW1JZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXI6OkRlbGV0
ZUFsbEVudHJpZXMoKSk7CisgICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvQWxsUHJvY2Vzc2VzUmVs
YXVuY2hpbmdUaGVtSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkFwcGxpY2F0aW9uQ2FjaGVNYW5h
Z2VyOjpEZWxldGVBbGxFbnRyaWVzKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclBy
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkFwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyUHJveHkuaAkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNiArNDAsNyBAQCBjbGFzcyBDb25uZWN0aW9uOwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAorY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBzdHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRh
OwogCiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyYXlDYWxsYmFjazsK
QEAgLTQ4LDcgKzQ5LDcgQEAgY2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eSA6
IAogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eT4gY3Jl
YXRlKFdlYkNvbnRleHQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJBcHBsaWNhdGlvbkNh
Y2hlTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqKTsKICAgICB2aXJ0dWFsIH5X
ZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5KCk7CiAKICAgICB2b2lkIGdldEFwcGxpY2F0
aW9uQ2FjaGVPcmlnaW5zKHN0ZDo6ZnVuY3Rpb248dm9pZCAoQVBJOjpBcnJheSosIENhbGxiYWNr
QmFzZTo6RXJyb3IpPik7CkBAIC01OSwxMiArNjAsMTIgQEAgcHVibGljOgogICAgIHVzaW5nIEFQ
STo6T2JqZWN0OjpkZXJlZjsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBXZWJBcHBsaWNhdGlv
bkNhY2hlTWFuYWdlclByb3h5KFdlYkNvbnRleHQqKTsKKyAgICBleHBsaWNpdCBXZWJBcHBsaWNh
dGlvbkNhY2hlTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKik7CiAKICAgICB2b2lkIGRpZEdl
dEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5zKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+
JiwgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAKICAgICAvLyBXZWJDb250ZXh0U3VwcGxlbWVudAot
ICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVkKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHByb2Nlc3NEaWRDbG9zZShXZWJQcm9jZXNzUHJveHkqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkVGVybWluYXRlKFdlYlByb2Nlc3NQcm94eSopIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCByZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkocmV2aXNpb24gMTc3Njkw
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE0OTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwg
MjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJDb250ZXh0LmgiCi0KLSNpbmNsdWRlICJB
UElBcnJheS5oIgotI2luY2x1ZGUgIkFQSURvd25sb2FkQ2xpZW50LmgiCi0jaW5jbHVkZSAiQVBJ
TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQuaCIKLSNpbmNsdWRlICJDdXN0b21Qcm90b2NvbE1h
bmFnZXJNZXNzYWdlcy5oIgotI2luY2x1ZGUgIkRvd25sb2FkUHJveHkuaCIKLSNpbmNsdWRlICJE
b3dubG9hZFByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAi
TXV0YWJsZURpY3Rpb25hcnkuaCIKLSNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCi0jaW5j
bHVkZSAiU3RhdGlzdGljc0RhdGEuaCIKLSNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgotI2luY2x1
ZGUgIldLQ29udGV4dFByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJBcHBsaWNhdGlvbkNhY2hlTWFu
YWdlclByb3h5LmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4dE1lc3NhZ2VLaW5kcy5oIgotI2luY2x1
ZGUgIldlYkNvbnRleHRNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkNvbnRleHRTdXBwbGVtZW50
LmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4dFVzZXJNZXNzYWdlQ29kZXJzLmgiCi0jaW5jbHVkZSAi
V2ViQ29va2llTWFuYWdlclByb3h5LmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCi0jaW5jbHVkZSAiV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJXZWJH
ZW9sb2NhdGlvbk1hbmFnZXJQcm94eS5oIgotI2luY2x1ZGUgIldlYkljb25EYXRhYmFzZS5oIgot
I2luY2x1ZGUgIldlYktleVZhbHVlU3RvcmFnZU1hbmFnZXIuaCIKLSNpbmNsdWRlICJXZWJLaXQy
SW5pdGlhbGl6ZS5oIgotI2luY2x1ZGUgIldlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkuaCIKLSNp
bmNsdWRlICJXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJXZWJQbHVn
aW5TaXRlRGF0YU1hbmFnZXIuaCIKLSNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKLSNpbmNsdWRl
ICJXZWJQcmVmZXJlbmNlcy5oIgotI2luY2x1ZGUgIldlYk1lbW9yeVNhbXBsZXIuaCIKLSNpbmNs
dWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vz
c01lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSAiV2Vi
UmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5oIgotI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9MYW5ndWFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTGlua0hhc2guaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0xvZ2dpbmcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVx
dWVzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+Ci0jaW5jbHVkZSA8cnVudGlt
ZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgotCi0jaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQotI2luY2x1
ZGUgIldlYkJhdHRlcnlNYW5hZ2VyUHJveHkuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKERBVEFC
QVNFX1BST0NFU1MpCi0jaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzTWVzc2FnZXMuaCIKLSNpbmNsdWRlICJXZWJP
cmlnaW5EYXRhTWFuYWdlclByb3h5LmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShORVRXT1JLX1BS
T0NFU1MpCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKLSNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Byb2Nl
c3NQcm94eS5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSNpbmNs
dWRlICJTZXJ2aWNlc0NvbnRyb2xsZXIuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFJFTU9URV9J
TlNQRUNUT1IpCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVjdG9yLmg+Ci0j
ZW5kaWYKLQotI2lmIFVTRShTT1VQKQotI2luY2x1ZGUgIldlYlNvdXBDdXN0b21Qcm90b2NvbFJl
cXVlc3RNYW5hZ2VyLmgiCi0jZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZExlYWtDb3VudGVyLmg+Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgY29uc3QgZG91YmxlIHNoYXJlZFNl
Y29uZGFyeVByb2Nlc3NTaHV0ZG93blRpbWVvdXQgPSA2MDsKLQotREVGSU5FX0RFQlVHX09OTFlf
R0xPQkFMKFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyLCB3ZWJDb250ZXh0Q291bnRlciwgKCJX
ZWJDb250ZXh0IikpOwotCi12b2lkIFdlYkNvbnRleHQ6OmFwcGx5UGxhdGZvcm1TcGVjaWZpY0Nv
bmZpZ3VyYXRpb25EZWZhdWx0cyhXZWJDb250ZXh0Q29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlv
bikKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG5lZWRlZDsg
YWxsIHBvcnRzIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBoYXMgdGhl
IHJpZ2h0Ci0gICAgLy8gdmFsdWVzLCBhbmQgdGhlbiB3ZSBzaG91bGQgZ2V0IHJpZCBvZiB0aGUg
cGxhdGZvcm0gc3BlY2lmaWMgZGVmYXVsdHMgaW5zaWRlIFdlYkNvbnRleHQuCi0KLSAgICBpZiAo
IWNvbmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlRGlyZWN0b3J5KQotICAgICAgICBjb25maWd1cmF0
aW9uLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IHBsYXRmb3JtRGVmYXVsdExvY2FsU3RvcmFnZURp
cmVjdG9yeSgpOwotCi0gICAgaWYgKCFjb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNlRGlyZWN0
b3J5KQotICAgICAgICBjb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNlRGlyZWN0b3J5ID0gcGxh
dGZvcm1EZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoKTsKLQotICAgIC8vICoqKioqKioq
KgotICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNoYW5nZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVy
ZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlzayB3aXRob3V0IGZpcnN0IGNvbnN1bHRpbmcg
YSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjovL3Byb2JsZW0vMTc0NTQ3MTI+KQotICAgIC8v
ICoqKioqKioqKgotICAgIGlmICghY29uZmlndXJhdGlvbi5pbmRleGVkREJEYXRhYmFzZURpcmVj
dG9yeSkKLSAgICAgICAgY29uZmlndXJhdGlvbi5pbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeSA9
IHBsYXRmb3JtRGVmYXVsdEluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5KCk7Ci0KLSAgICBpZiAo
IWNvbmZpZ3VyYXRpb24ubWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSkKLSAgICAgICAgY29uZmln
dXJhdGlvbi5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gcGxhdGZvcm1EZWZhdWx0TWVkaWFL
ZXlzU3RvcmFnZURpcmVjdG9yeSgpOwotfQotCi1QYXNzUmVmUHRyPFdlYkNvbnRleHQ+IFdlYkNv
bnRleHQ6OmNyZWF0ZShXZWJDb250ZXh0Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewot
ICAgIEluaXRpYWxpemVXZWJLaXQyKCk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJDb250
ZXh0KFdURjo6bW92ZShjb25maWd1cmF0aW9uKSkpOwotfQotCi1zdGF0aWMgVmVjdG9yPFdlYkNv
bnRleHQqPiYgY29udGV4dHMoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8
V2ViQ29udGV4dCo+PiBjb250ZXh0czsKLSAgICByZXR1cm4gY29udGV4dHM7Ci19Ci0KLWNvbnN0
IFZlY3RvcjxXZWJDb250ZXh0Kj4mIFdlYkNvbnRleHQ6OmFsbENvbnRleHRzKCkKLXsKLSAgICBy
ZXR1cm4gY29udGV4dHMoKTsKLX0KLQotc3RhdGljIFdlYnNpdGVEYXRhU3RvcmU6OkNvbmZpZ3Vy
YXRpb24gd2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24oKQotewotICAgIFdlYnNpdGVEYXRh
U3RvcmU6OkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKLQotICAgIC8vIEZJWE1FOiBGaWxs
IGluIHRoZSBjb25maWd1cmF0aW9uLgotICAgIHJldHVybiBjb25maWd1cmF0aW9uOwotfQotCi1X
ZWJDb250ZXh0OjpXZWJDb250ZXh0KFdlYkNvbnRleHRDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCi0gICAgOiBtX3Byb2Nlc3NNb2RlbChQcm9jZXNzTW9kZWxTaGFyZWRTZWNvbmRhcnlQcm9j
ZXNzKQotICAgICwgbV93ZWJQcm9jZXNzQ291bnRMaW1pdChVSU5UX01BWCkKLSAgICAsIG1faGF2
ZUluaXRpYWxFbXB0eVByb2Nlc3MoZmFsc2UpCi0gICAgLCBtX3Byb2Nlc3NXaXRoUGFnZUNhY2hl
KDApCi0gICAgLCBtX2RlZmF1bHRQYWdlR3JvdXAoV2ViUGFnZUdyb3VwOjpjcmVhdGVOb25OdWxs
KCkpCi0gICAgLCBtX2luamVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmluamVjdGVkQnVu
ZGxlUGF0aCkKLSAgICAsIG1fZG93bmxvYWRDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxBUEk6OkRv
d25sb2FkQ2xpZW50PigpKQotICAgICwgbV9oaXN0b3J5Q2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8
QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKLSAgICAsIG1fdmlzaXRlZExpbmtQ
cm92aWRlcihWaXNpdGVkTGlua1Byb3ZpZGVyOjpjcmVhdGUoKSkKLSAgICAsIG1fdmlzaXRlZExp
bmtzUG9wdWxhdGVkKGZhbHNlKQotICAgICwgbV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlcih0aGlz
KQotICAgICwgbV9hbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aChmYWxzZSkKLSAgICAsIG1f
c2hvdWxkVXNlRm9udFNtb290aGluZyh0cnVlKQotICAgICwgbV9jYWNoZU1vZGVsKENhY2hlTW9k
ZWxEb2N1bWVudFZpZXdlcikKLSAgICAsIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQoZmFsc2UpCi0g
ICAgLCBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCgxNDAwLjApCi0gICAgLCBtX3dlYnNpdGVEYXRh
U3RvcmUoV2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlKHdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uKCkpKQotICAgICwgbV9zdG9yYWdlTWFuYWdlcihTdG9yYWdlTWFuYWdlcjo6Y3JlYXRlKGNv
bmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlRGlyZWN0b3J5KSkKLSNpZiBVU0UoU09VUCkKLSAgICAs
IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeU9u
bHlGcm9tTWFpbkRvY3VtZW50RG9tYWluKQotI2VuZGlmCi0gICAgLCBtX3dlYlNRTERhdGFiYXNl
RGlyZWN0b3J5KFdURjo6bW92ZShjb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNlRGlyZWN0b3J5
KSkKLSAgICAsIG1faW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoV1RGOjptb3ZlKGNvbmZpZ3Vy
YXRpb24uaW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkpKQotICAgICwgbV9tZWRpYUtleXNTdG9y
YWdlRGlyZWN0b3J5KFdURjo6bW92ZShjb25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJl
Y3RvcnkpKQotICAgICwgbV9zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24oZmFsc2UpCi0g
ICAgLCBtX3Byb2Nlc3NUZXJtaW5hdGlvbkVuYWJsZWQodHJ1ZSkKLSNpZiBFTkFCTEUoTkVUV09S
S19QUk9DRVNTKQotICAgICwgbV9jYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhbHVhdGlvbih0
cnVlKQotICAgICwgbV91c2VzTmV0d29ya1Byb2Nlc3MoZmFsc2UpCi0jZW5kaWYKLSNpZiBVU0Uo
U09VUCkKLSAgICAsIG1faWdub3JlVExTRXJyb3JzKHRydWUpCi0jZW5kaWYKLSAgICAsIG1fbWVt
b3J5Q2FjaGVEaXNhYmxlZChmYWxzZSkKLSAgICAsIG1fdXNlck9ic2VydmFibGVQYWdlQ291bnRl
cihbdGhpc10oYm9vbCkgeyB1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpOyB9KQotICAg
ICwgbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyKFt0aGlzXShib29s
KSB7IHVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCk7IH0pCi17Ci0gICAgcGxhdGZvcm1J
bml0aWFsaXplKCk7Ci0KLSAgICBhZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkNvbnRl
eHQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwotICAgIGFkZE1lc3NhZ2VSZWNlaXZl
cihXZWJDb250ZXh0TGVnYWN5TWVzc2FnZXM6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMp
OwotCi0gICAgLy8gTk9URTogVGhlc2Ugc3ViLW9iamVjdHMgbXVzdCBiZSBpbml0aWFsaXplZCBh
ZnRlciBtX21lc3NhZ2VSZWNlaXZlck1hcC4uCi0gICAgbV9pY29uRGF0YWJhc2UgPSBXZWJJY29u
RGF0YWJhc2U6OmNyZWF0ZSh0aGlzKTsKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LSAgICBtX3BsdWdpblNpdGVEYXRhTWFuYWdlciA9IFdlYlBsdWdpblNpdGVEYXRhTWFuYWdlcjo6
Y3JlYXRlKHRoaXMpOwotI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi0g
ICAgYWRkU3VwcGxlbWVudDxXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5PigpOwotICAg
IGFkZFN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwotICAgIGFkZFN1cHBsZW1l
bnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+KCk7Ci0gICAgYWRkU3VwcGxlbWVudDxXZWJL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyPigpOwotICAgIGFkZFN1cHBsZW1lbnQ8V2ViTWVkaWFDYWNo
ZU1hbmFnZXJQcm94eT4oKTsKLSAgICBhZGRTdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFn
ZXJQcm94eT4oKTsKLSAgICBhZGRTdXBwbGVtZW50PFdlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJv
eHk+KCk7Ci0jaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKLSAgICBhZGRTdXBwbGVtZW50PFdlYkRh
dGFiYXNlTWFuYWdlclByb3h5PigpOwotI2VuZGlmCi0jaWYgVVNFKFNPVVApCi0gICAgYWRkU3Vw
cGxlbWVudDxXZWJTb3VwQ3VzdG9tUHJvdG9jb2xSZXF1ZXN0TWFuYWdlcj4oKTsKLSNlbmRpZgot
I2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKLSAgICBhZGRTdXBwbGVtZW50PFdlYkJhdHRlcnlN
YW5hZ2VyUHJveHk+KCk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKLSAg
ICBhZGRTdXBwbGVtZW50PFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk+KCk7Ci0jZW5kaWYKLQot
ICAgIGNvbnRleHRzKCkuYXBwZW5kKHRoaXMpOwotCi0gICAgYWRkTGFuZ3VhZ2VDaGFuZ2VPYnNl
cnZlcih0aGlzLCBsYW5ndWFnZUNoYW5nZWQpOwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIFdl
YkNvcmU6OmluaXRpYWxpemVMb2dnaW5nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpOwotICAgIFdlYktp
dDo6aW5pdGlhbGl6ZUxvZ0NoYW5uZWxzSWZOZWNlc3NhcnkoKTsKLSNlbmRpZiAvLyAhTE9HX0RJ
U0FCTEVECi0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBtX3BsdWdpbklu
Zm9TdG9yZS5zZXRDbGllbnQodGhpcyk7Ci0jZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLSAgICB3
ZWJDb250ZXh0Q291bnRlci5pbmNyZW1lbnQoKTsKLSNlbmRpZgotfQotCi0jaWYgIVBMQVRGT1JN
KENPQ09BKQotdm9pZCBXZWJDb250ZXh0OjpwbGF0Zm9ybUluaXRpYWxpemUoKQotewotfQotI2Vu
ZGlmCi0KLVdlYkNvbnRleHQ6On5XZWJDb250ZXh0KCkKLXsKLSAgICBBU1NFUlQoY29udGV4dHMo
KS5maW5kKHRoaXMpICE9IG5vdEZvdW5kKTsKLSAgICBjb250ZXh0cygpLnJlbW92ZShjb250ZXh0
cygpLmZpbmQodGhpcykpOwotCi0gICAgcmVtb3ZlTGFuZ3VhZ2VDaGFuZ2VPYnNlcnZlcih0aGlz
KTsKLQotICAgIG1fbWVzc2FnZVJlY2VpdmVyTWFwLmludmFsaWRhdGUoKTsKLQotICAgIFdlYkNv
bnRleHRTdXBwbGVtZW50TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3VwcGxlbWVudHMuYmVn
aW4oKTsKLSAgICBXZWJDb250ZXh0U3VwcGxlbWVudE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9zdXBwbGVtZW50cy5lbmQoKTsKLSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIGl0LT52YWx1ZS0+Y29udGV4dERlc3Ryb3llZCgpOwotICAgICAgICBpdC0+dmFsdWUtPmNs
ZWFyQ29udGV4dCgpOwotICAgIH0KLQotICAgIG1faWNvbkRhdGFiYXNlLT5pbnZhbGlkYXRlKCk7
Ci0gICAgbV9pY29uRGF0YWJhc2UtPmNsZWFyQ29udGV4dCgpOwotICAgIFdlYkljb25EYXRhYmFz
ZSogcmF3SWNvbkRhdGFiYXNlID0gbV9pY29uRGF0YWJhc2UucmVsZWFzZSgpLmxlYWtSZWYoKTsK
LSAgICByYXdJY29uRGF0YWJhc2UtPmRlcmVmV2hlbkFwcHJvcHJpYXRlKCk7Ci0KLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBtX3BsdWdpblNpdGVEYXRhTWFuYWdlci0+aW52
YWxpZGF0ZSgpOwotICAgIG1fcGx1Z2luU2l0ZURhdGFNYW5hZ2VyLT5jbGVhckNvbnRleHQoKTsK
LSNlbmRpZgotCi0gICAgaW52YWxpZGF0ZUNhbGxiYWNrTWFwKG1fZGljdGlvbmFyeUNhbGxiYWNr
cywgQ2FsbGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7Ci0KLSAgICBwbGF0
Zm9ybUludmFsaWRhdGVDb250ZXh0KCk7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQ
SSkKLSAgICBtX3BsdWdpbkluZm9TdG9yZS5zZXRDbGllbnQoMCk7Ci0jZW5kaWYKLQotI2lmbmRl
ZiBOREVCVUcKLSAgICB3ZWJDb250ZXh0Q291bnRlci5kZWNyZW1lbnQoKTsKLSNlbmRpZgotfQot
Ci12b2lkIFdlYkNvbnRleHQ6OmluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb250ZXh0Q2xpZW50
QmFzZSogY2xpZW50KQotewotICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKLX0KLQot
dm9pZCBXZWJDb250ZXh0Ojppbml0aWFsaXplSW5qZWN0ZWRCdW5kbGVDbGllbnQoY29uc3QgV0tD
b250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnRCYXNlKiBjbGllbnQpCi17Ci0gICAgbV9pbmplY3Rl
ZEJ1bmRsZUNsaWVudC5pbml0aWFsaXplKGNsaWVudCk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6
aW5pdGlhbGl6ZUNvbm5lY3Rpb25DbGllbnQoY29uc3QgV0tDb250ZXh0Q29ubmVjdGlvbkNsaWVu
dEJhc2UqIGNsaWVudCkKLXsKLSAgICBtX2Nvbm5lY3Rpb25DbGllbnQuaW5pdGlhbGl6ZShjbGll
bnQpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OnNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlxdWVf
cHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+IGhpc3RvcnlDbGllbnQpCi17Ci0g
ICAgaWYgKCFoaXN0b3J5Q2xpZW50KQotICAgICAgICBtX2hpc3RvcnlDbGllbnQgPSBzdGQ6Om1h
a2VfdW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2hpc3RvcnlDbGllbnQgPSBXVEY6Om1vdmUoaGlzdG9yeUNsaWVudCk7Ci19Ci0K
LXZvaWQgV2ViQ29udGV4dDo6c2V0RG93bmxvYWRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6
RG93bmxvYWRDbGllbnQ+IGRvd25sb2FkQ2xpZW50KQotewotICAgIGlmICghZG93bmxvYWRDbGll
bnQpCi0gICAgICAgIG1fZG93bmxvYWRDbGllbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6RG93
bmxvYWRDbGllbnQ+KCk7Ci0gICAgZWxzZQotICAgICAgICBtX2Rvd25sb2FkQ2xpZW50ID0gV1RG
Ojptb3ZlKGRvd25sb2FkQ2xpZW50KTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpzZXRQcm9jZXNz
TW9kZWwoUHJvY2Vzc01vZGVsIHByb2Nlc3NNb2RlbCkKLXsKLSAgICAvLyBHdWFyZCBhZ2FpbnN0
IEFQSSBtaXN1c2UuCi0gICAgaWYgKCFtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkpCi0gICAgICAgIENS
QVNIKCk7Ci0gICAgaWYgKHByb2Nlc3NNb2RlbCAhPSBQcm9jZXNzTW9kZWxTaGFyZWRTZWNvbmRh
cnlQcm9jZXNzICYmICFtX21lc3NhZ2VzVG9JbmplY3RlZEJ1bmRsZVBvc3RlZFRvRW1wdHlDb250
ZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgQ1JBU0goKTsKLQotICAgIG1fcHJvY2Vzc01vZGVsID0g
cHJvY2Vzc01vZGVsOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OnNldE1heGltdW1OdW1iZXJPZlBy
b2Nlc3Nlcyh1bnNpZ25lZCBtYXhpbXVtTnVtYmVyT2ZQcm9jZXNzZXMpCi17Ci0gICAgLy8gR3Vh
cmQgYWdhaW5zdCBBUEkgbWlzdXNlLgotICAgIGlmICghbV9wcm9jZXNzZXMuaXNFbXB0eSgpKQot
ICAgICAgICBDUkFTSCgpOwotCi0gICAgaWYgKG1heGltdW1OdW1iZXJPZlByb2Nlc3NlcyA9PSAw
KQotICAgICAgICBtX3dlYlByb2Nlc3NDb3VudExpbWl0ID0gVUlOVF9NQVg7Ci0gICAgZWxzZQot
ICAgICAgICBtX3dlYlByb2Nlc3NDb3VudExpbWl0ID0gbWF4aW11bU51bWJlck9mUHJvY2Vzc2Vz
OwotfQotCi1JUEM6OkNvbm5lY3Rpb24qIFdlYkNvbnRleHQ6Om5ldHdvcmtpbmdQcm9jZXNzQ29u
bmVjdGlvbigpCi17Ci0gICAgc3dpdGNoIChtX3Byb2Nlc3NNb2RlbCkgewotICAgIGNhc2UgUHJv
Y2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2VzczoKLSNpZiBFTkFCTEUoTkVUV09SS19QUk9D
RVNTKQotICAgICAgICBpZiAobV91c2VzTmV0d29ya1Byb2Nlc3MpCi0gICAgICAgICAgICByZXR1
cm4gbV9uZXR3b3JrUHJvY2Vzcy0+Y29ubmVjdGlvbigpOwotI2VuZGlmCi0gICAgICAgIHJldHVy
biBtX3Byb2Nlc3Nlc1swXS0+Y29ubmVjdGlvbigpOwotICAgIGNhc2UgUHJvY2Vzc01vZGVsTXVs
dGlwbGVTZWNvbmRhcnlQcm9jZXNzZXM6Ci0jaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLSAg
ICAgICAgQVNTRVJUKG1fdXNlc05ldHdvcmtQcm9jZXNzKTsKLSAgICAgICAgcmV0dXJuIG1fbmV0
d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKLSNlbHNlCi0gICAgICAgIGJyZWFrOwotI2VuZGlm
Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi12
b2lkIFdlYkNvbnRleHQ6Omxhbmd1YWdlQ2hhbmdlZCh2b2lkKiBjb250ZXh0KQotewotICAgIHN0
YXRpY19jYXN0PFdlYkNvbnRleHQqPihjb250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7Ci19Ci0K
LXZvaWQgV2ViQ29udGV4dDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKLXsKLSAgICBzZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2Vk
KHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSkpOwotI2lmIFVTRShTT1VQKSAmJiBFTkFCTEUoTkVU
V09SS19QUk9DRVNTKQotICAgIGlmIChtX3VzZXNOZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQ
cm9jZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1
YWdlcygpKSwgMCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpmdWxsS2V5Ym9hcmRB
Y2Nlc3NNb2RlQ2hhbmdlZChib29sIGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQpCi17Ci0gICAg
c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpGdWxsS2V5Ym9hcmRBY2Nl
c3NNb2RlQ2hhbmdlZChmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkKSk7Ci19Ci0KLXZvaWQgV2Vi
Q29udGV4dDo6dGV4dENoZWNrZXJTdGF0ZUNoYW5nZWQoKQotewotICAgIHNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0VGV4dENoZWNrZXJTdGF0ZShUZXh0Q2hlY2tl
cjo6c3RhdGUoKSkpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OnNldFVzZXNOZXR3b3JrUHJvY2Vz
cyhib29sIHVzZXNOZXR3b3JrUHJvY2VzcykKLXsKLSNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNT
KQotICAgIG1fdXNlc05ldHdvcmtQcm9jZXNzID0gdXNlc05ldHdvcmtQcm9jZXNzOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0odXNlc05ldHdvcmtQcm9jZXNzKTsKLSNlbmRpZgotfQotCi1ib29s
IFdlYkNvbnRleHQ6OnVzZXNOZXR3b3JrUHJvY2VzcygpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKE5F
VFdPUktfUFJPQ0VTUykKLSAgICByZXR1cm4gbV91c2VzTmV0d29ya1Byb2Nlc3M7Ci0jZWxzZQot
ICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VT
UykKLXZvaWQgV2ViQ29udGV4dDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKQotewotICAgIGlmICht
X25ldHdvcmtQcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNz
ID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlKCp0aGlzKTsKLQotICAgIE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0KLSAgICBwYXJhbWV0ZXJzLnByaXZh
dGVCcm93c2luZ0VuYWJsZWQgPSBXZWJQcmVmZXJlbmNlczo6YW55UGFnZXNBcmVVc2luZ1ByaXZh
dGVCcm93c2luZygpOwotCi0gICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gbV9jYWNoZU1vZGVs
OwotICAgIHBhcmFtZXRlcnMuY2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24gPSBt
X2NhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uOwotCi0gICAgcGFyYW1ldGVycy5k
aXNrQ2FjaGVEaXJlY3RvcnkgPSBzdHJpbmdCeVJlc29sdmluZ1N5bWxpbmtzSW5QYXRoKGRpc2tD
YWNoZURpcmVjdG9yeSgpKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5
LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVh
ZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5LCBwYXJhbWV0ZXJz
LmRpc2tDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBwYXJhbWV0ZXJzLmNv
b2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0KLSNpZiBQ
TEFURk9STShJT1MpCi0gICAgaWYgKCFwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnku
aXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFk
V3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0
ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgU3RyaW5n
IGhzdHNEYXRhYmFzZVBhdGggPSBuZXR3b3JraW5nSFNUU0RhdGFiYXNlUGF0aCgpOwotICAgIGlm
ICghaHN0c0RhdGFiYXNlUGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShoc3RzRGF0YWJhc2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpSZWFkV3Jp
dGUsIHBhcmFtZXRlcnMuaHN0c0RhdGFiYXNlUGF0aEV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBT
dHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gdGhpcy0+cGFyZW50QnVuZGxlRGlyZWN0b3J5
KCk7Ci0gICAgaWYgKCFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5LCBTYW5k
Ym94RXh0ZW5zaW9uOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwotI2VuZGlmCi0KLSAgICBwYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3Rp
bmdOZXR3b3JrU2Vzc2lvbiA9IG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uOwotCi0g
ICAgLy8gQWRkIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJhbWV0ZXJzCi0gICAgcGxhdGZvcm1J
bml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7Ci0KLSAgICAvLyBJbml0aWFsaXpl
IHRoZSBuZXR3b3JrIHByb2Nlc3MuCi0gICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0ZXJzKSwg
MCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdvcmtQcm9jZXNzTGF0ZW5jeVFPUygp
LCBuZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDApOwotI2VuZGlmCi19Ci0KLXZvaWQg
V2ViQ29udGV4dDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJveHkqIG5l
dHdvcmtQcm9jZXNzUHJveHkpCi17Ci0gICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOwotICAg
IEFTU0VSVChuZXR3b3JrUHJvY2Vzc1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCkpOwot
Ci0gICAgV2ViQ29udGV4dFN1cHBsZW1lbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdXBw
bGVtZW50cy5iZWdpbigpOwotICAgIFdlYkNvbnRleHRTdXBwbGVtZW50TWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3N1cHBsZW1lbnRzLmVuZCgpOwotICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIGl0LT52YWx1ZS0+cHJvY2Vzc0RpZENsb3NlKG5ldHdvcmtQcm9jZXNzUHJv
eHkpOwotCi0gICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7Ci0KLSAgICBtX2NsaWVudC5u
ZXR3b3JrUHJvY2Vzc0RpZENyYXNoKHRoaXMpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OmdldE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbihQYXNzUmVmUHRyPE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJv
eHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5PiByZXBseSkKLXsK
LSAgICBBU1NFUlQocmVwbHkpOwotCi0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBB
U1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7Ci0KLSAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24ocmVwbHkpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoREFU
QUJBU0VfUFJPQ0VTUykKLXZvaWQgV2ViQ29udGV4dDo6ZW5zdXJlRGF0YWJhc2VQcm9jZXNzKCkK
LXsKLSAgICBpZiAobV9kYXRhYmFzZVByb2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
ZGF0YWJhc2VQcm9jZXNzID0gRGF0YWJhc2VQcm9jZXNzUHJveHk6OmNyZWF0ZSh0aGlzKTsKLQot
ICAgIEFTU0VSVCghbV9pbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpOwotCi0g
ICAgLy8gKioqKioqKioqCi0gICAgLy8gSU1QT1JUQU5UOiBEbyBub3QgY2hhbmdlIHRoZSBkaXJl
Y3Rvcnkgc3RydWN0dXJlIGZvciBpbmRleGVkIGRhdGFiYXNlcyBvbiBkaXNrIHdpdGhvdXQgZmly
c3QgY29uc3VsdGluZyBhIHJldmlld2VyIGZyb20gQXBwbGUgKDxyZGFyOi8vcHJvYmxlbS8xNzQ1
NDcxMj4pCi0gICAgLy8gKioqKioqKioqCi0gICAgRGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzIHBhcmFtZXRlcnM7Ci0gICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnkgPSBtX2luZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5OwotCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7Ci0KLSAgICBtX2RhdGFiYXNlUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6RGF0
YWJhc2VQcm9jZXNzOjpJbml0aWFsaXplRGF0YWJhc2VQcm9jZXNzKHBhcmFtZXRlcnMpLCAwKTsK
LX0KLQotdm9pZCBXZWJDb250ZXh0OjpnZXREYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uKFBhc3NS
ZWZQdHI8TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0RGF0YWJhc2VQcm9jZXNzQ29ubmVj
dGlvbjo6RGVsYXllZFJlcGx5PiByZXBseSkKLXsKLSAgICBBU1NFUlQocmVwbHkpOwotCi0gICAg
ZW5zdXJlRGF0YWJhc2VQcm9jZXNzKCk7Ci0KLSAgICBtX2RhdGFiYXNlUHJvY2Vzcy0+Z2V0RGF0
YWJhc2VQcm9jZXNzQ29ubmVjdGlvbihyZXBseSk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6ZGF0
YWJhc2VQcm9jZXNzQ3Jhc2hlZChEYXRhYmFzZVByb2Nlc3NQcm94eSogZGF0YWJhc2VQcm9jZXNz
UHJveHkpCi17Ci0gICAgQVNTRVJUKG1fZGF0YWJhc2VQcm9jZXNzKTsKLSAgICBBU1NFUlQoZGF0
YWJhc2VQcm9jZXNzUHJveHkgPT0gbV9kYXRhYmFzZVByb2Nlc3MuZ2V0KCkpOwotCi0gICAgZm9y
IChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cykKLSAgICAgICAgc3VwcGxlbWVudC52
YWx1ZS0+cHJvY2Vzc0RpZENsb3NlKGRhdGFiYXNlUHJvY2Vzc1Byb3h5KTsKLQotICAgIG1fZGF0
YWJhc2VQcm9jZXNzID0gbnVsbHB0cjsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkNvbnRleHQ6Ondp
bGxTdGFydFVzaW5nUHJpdmF0ZUJyb3dzaW5nKCkKLXsKLSAgICBjb25zdCBWZWN0b3I8V2ViQ29u
dGV4dCo+JiBjb250ZXh0cyA9IGFsbENvbnRleHRzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDAs
IGNvdW50ID0gY29udGV4dHMuc2l6ZSgpOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgY29udGV4
dHNbaV0tPnNldEFueVBhZ2VHcm91cE1pZ2h0SGF2ZVByaXZhdGVCcm93c2luZ0VuYWJsZWQodHJ1
ZSk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6d2lsbFN0b3BVc2luZ1ByaXZhdGVCcm93c2luZygp
Ci17Ci0gICAgY29uc3QgVmVjdG9yPFdlYkNvbnRleHQqPiYgY29udGV4dHMgPSBhbGxDb250ZXh0
cygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IGNvbnRleHRzLnNpemUoKTsgaSA8
IGNvdW50OyArK2kpCi0gICAgICAgIGNvbnRleHRzW2ldLT5zZXRBbnlQYWdlR3JvdXBNaWdodEhh
dmVQcml2YXRlQnJvd3NpbmdFbmFibGVkKGZhbHNlKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0Ojp3
aW5kb3dTZXJ2ZXJDb25uZWN0aW9uU3RhdGVDaGFuZ2VkKCkKLXsKLSAgICBzaXplX3QgcHJvY2Vz
c0NvdW50ID0gbV9wcm9jZXNzZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cHJvY2Vzc0NvdW50OyArK2kpCi0gICAgICAgIG1fcHJvY2Vzc2VzW2ldLT53aW5kb3dTZXJ2ZXJD
b25uZWN0aW9uU3RhdGVDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6c2V0QW55UGFn
ZUdyb3VwTWlnaHRIYXZlUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIHByaXZhdGVCcm93c2lu
Z0VuYWJsZWQpCi17Ci0gICAgbV9pY29uRGF0YWJhc2UtPnNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWQocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7Ci0KLSNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNT
KQotICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAmJiBuZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgIGlmIChwcml2YXRlQnJvd3NpbmdFbmFibGVkKQotICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkVuc3VyZVByaXZhdGVCcm93
c2luZ1Nlc3Npb24oU2Vzc2lvbklEOjpsZWdhY3lQcml2YXRlU2Vzc2lvbklEKCkpLCAwKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRDo6
bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpKSwgMCk7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRUQo
TkVUV09SS19QUk9DRVNTKQotCi0gICAgaWYgKHByaXZhdGVCcm93c2luZ0VuYWJsZWQpCi0gICAg
ICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6RW5zdXJlUHJpdmF0
ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uSUQ6OmxlZ2FjeVByaXZhdGVTZXNzaW9uSUQoKSkpOwot
ICAgIGVsc2UKLSAgICAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpEZXN0cm95UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uSUQ6OmxlZ2FjeVByaXZhdGVT
ZXNzaW9uSUQoKSkpOwotfQotCi12b2lkICgqc19pbnZhbGlkTWVzc2FnZUNhbGxiYWNrKShXS1N0
cmluZ1JlZiBtZXNzYWdlTmFtZSk7Ci0KLXZvaWQgV2ViQ29udGV4dDo6c2V0SW52YWxpZE1lc3Nh
Z2VDYWxsYmFjayh2b2lkICgqaW52YWxpZE1lc3NhZ2VDYWxsYmFjaykoV0tTdHJpbmdSZWYgbWVz
c2FnZU5hbWUpKQotewotICAgIHNfaW52YWxpZE1lc3NhZ2VDYWxsYmFjayA9IGludmFsaWRNZXNz
YWdlQ2FsbGJhY2s7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6ZGlkUmVjZWl2ZUludmFsaWRNZXNz
YWdlKGNvbnN0IElQQzo6U3RyaW5nUmVmZXJlbmNlJiBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBjb25z
dCBJUEM6OlN0cmluZ1JlZmVyZW5jZSYgbWVzc2FnZU5hbWUpCi17Ci0gICAgaWYgKCFzX2ludmFs
aWRNZXNzYWdlQ2FsbGJhY2spCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZ0J1aWxkZXIg
bWVzc2FnZU5hbWVTdHJpbmdCdWlsZGVyOwotICAgIG1lc3NhZ2VOYW1lU3RyaW5nQnVpbGRlci5h
cHBlbmQobWVzc2FnZVJlY2VpdmVyTmFtZS5kYXRhKCksIG1lc3NhZ2VSZWNlaXZlck5hbWUuc2l6
ZSgpKTsKLSAgICBtZXNzYWdlTmFtZVN0cmluZ0J1aWxkZXIuYXBwZW5kKCIuIik7Ci0gICAgbWVz
c2FnZU5hbWVTdHJpbmdCdWlsZGVyLmFwcGVuZChtZXNzYWdlTmFtZS5kYXRhKCksIG1lc3NhZ2VO
YW1lLnNpemUoKSk7Ci0KLSAgICBzX2ludmFsaWRNZXNzYWdlQ2FsbGJhY2sodG9BUEkoQVBJOjpT
dHJpbmc6OmNyZWF0ZShtZXNzYWdlTmFtZVN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSkuZ2V0KCkp
KTsKLX0KLQotdm9pZCBXZWJDb250ZXh0Ojpwcm9jZXNzRGlkQ2FjaGVQYWdlKFdlYlByb2Nlc3NQ
cm94eSogcHJvY2VzcykKLXsKLSAgICBpZiAobV9wcm9jZXNzV2l0aFBhZ2VDYWNoZSAmJiBtX3By
b2Nlc3NXaXRoUGFnZUNhY2hlICE9IHByb2Nlc3MpCi0gICAgICAgIG1fcHJvY2Vzc1dpdGhQYWdl
Q2FjaGUtPnJlbGVhc2VQYWdlQ2FjaGUoKTsKLSAgICBtX3Byb2Nlc3NXaXRoUGFnZUNhY2hlID0g
cHJvY2VzczsKLX0KLQotV2ViUHJvY2Vzc1Byb3h5JiBXZWJDb250ZXh0OjplbnN1cmVTaGFyZWRX
ZWJQcm9jZXNzKCkKLXsKLSAgICBBU1NFUlQobV9wcm9jZXNzTW9kZWwgPT0gUHJvY2Vzc01vZGVs
U2hhcmVkU2Vjb25kYXJ5UHJvY2Vzcyk7Ci0gICAgaWYgKG1fcHJvY2Vzc2VzLmlzRW1wdHkoKSkK
LSAgICAgICAgY3JlYXRlTmV3V2ViUHJvY2VzcygpOwotICAgIHJldHVybiAqbV9wcm9jZXNzZXNb
MF07Ci19Ci0KLVdlYlByb2Nlc3NQcm94eSYgV2ViQ29udGV4dDo6Y3JlYXRlTmV3V2ViUHJvY2Vz
cygpCi17Ci0jaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLSAgICBpZiAobV91c2VzTmV0d29y
a1Byb2Nlc3MpCi0gICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0jZW5kaWYKLQotICAg
IFJlZjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3MgPSBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZSgq
dGhpcyk7Ci0KLSAgICBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0K
LSAgICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aCA9IGluamVjdGVkQnVuZGxlUGF0aCgp
OwotICAgIGlmICghcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGguaXNFbXB0eSgpKQotICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyYW1ldGVycy5pbmplY3RlZEJ1
bmRsZVBhdGgsIFNhbmRib3hFeHRlbnNpb246OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLmluamVjdGVk
QnVuZGxlUGF0aEV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBwYXJhbWV0ZXJzLmFwcGxpY2F0aW9u
Q2FjaGVEaXJlY3RvcnkgPSBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCk7Ci0gICAgaWYgKCFw
YXJhbWV0ZXJzLmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1l
dGVycy5hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmFwcGxpY2F0aW9uQ2Fj
aGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgcGFyYW1ldGVycy53ZWJTUUxEYXRh
YmFzZURpcmVjdG9yeSA9IG1fd2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnk7Ci0gICAgaWYgKCFwYXJh
bWV0ZXJzLndlYlNRTERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMu
d2ViU1FMRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMud2ViU1FMRGF0YWJhc2VEaXJlY3Rv
cnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAgcGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3Rvcnkg
PSBkaXNrQ2FjaGVEaXJlY3RvcnkoKTsKLSAgICBpZiAoIXBhcmFtZXRlcnMuZGlza0NhY2hlRGly
ZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7Ci0KLSAgICBwYXJhbWV0
ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7Ci0K
LSNpZiBQTEFURk9STShJT1MpCi0gICAgaWYgKCFwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnkuaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5LCBw
YXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwotCi0gICAg
U3RyaW5nIG9wZW5HTENhY2hlRGlyZWN0b3J5ID0gdGhpcy0+b3BlbkdMQ2FjaGVEaXJlY3Rvcnko
KTsKLSAgICBpZiAoIW9wZW5HTENhY2hlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KG9wZW5HTENh
Y2hlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLm9wZW5HTENhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFu
ZGxlKTsKLQotICAgIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkgPSB0aGlzLT5j
b250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKLSAgICBpZiAoIWNvbnRhaW5lclRlbXBvcmFy
eURpcmVjdG9yeS5pc0VtcHR5KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhh
bmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnksIHBh
cmFtZXRlcnMuY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKLQot
ICAgIFN0cmluZyBoc3RzRGF0YWJhc2VQYXRoID0gd2ViQ29udGVudEhTVFNEYXRhYmFzZVBhdGgo
KTsKLSAgICBpZiAoIWhzdHNEYXRhYmFzZVBhdGguaXNFbXB0eSgpKQotICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0c0RhdGFiYXNlUGF0aCwgU2FuZGJveEV4dGVuc2lv
bjo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmhzdHNEYXRhYmFzZVBhdGhFeHRlbnNpb25IYW5kbGUp
OwotI2VuZGlmCi0KLSAgICBwYXJhbWV0ZXJzLm1lZGlhS2V5U3RvcmFnZURpcmVjdG9yeSA9IG1f
bWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeTsKLSAgICBpZiAoIXBhcmFtZXRlcnMubWVkaWFLZXlT
dG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKLSAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMubWVkaWFLZXlTdG9yYWdl
RGlyZWN0b3J5LCBwYXJhbWV0ZXJzLm1lZGlhS2V5U3RvcmFnZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7Ci0KLSAgICBwYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiA9
IG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uOwotCi0gICAgcGFyYW1ldGVycy5jYWNo
ZU1vZGVsID0gbV9jYWNoZU1vZGVsOwotICAgIHBhcmFtZXRlcnMubGFuZ3VhZ2VzID0gdXNlclBy
ZWZlcnJlZExhbmd1YWdlcygpOwotCi0gICAgY29weVRvVmVjdG9yKG1fc2NoZW1lc1RvUmVnaXN0
ZXJBc0VtcHR5RG9jdW1lbnQsIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZXJkQXNFbXB0
eURvY3VtZW50KTsKLSAgICBjb3B5VG9WZWN0b3IobV9zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJl
LCBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUpOwotICAgIGNvcHlUb1Zl
Y3RvcihtX3NjaGVtZXNUb1NldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3IsIHBhcmFtZXRl
cnMudXJsU2NoZW1lc0ZvcldoaWNoRG9tYWluUmVsYXhhdGlvbklzRm9yYmlkZGVuKTsKLSAgICBj
b3B5VG9WZWN0b3IobV9zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWwsIHBhcmFtZXRlcnMudXJsU2No
ZW1lc1JlZ2lzdGVyZWRBc0xvY2FsKTsKLSAgICBjb3B5VG9WZWN0b3IobV9zY2hlbWVzVG9SZWdp
c3RlckFzTm9BY2Nlc3MsIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNz
KTsKLSAgICBjb3B5VG9WZWN0b3IobV9zY2hlbWVzVG9SZWdpc3RlckFzRGlzcGxheUlzb2xhdGVk
LCBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNEaXNwbGF5SXNvbGF0ZWQpOwotICAg
IGNvcHlUb1ZlY3RvcihtX3NjaGVtZXNUb1JlZ2lzdGVyQXNDT1JTRW5hYmxlZCwgcGFyYW1ldGVy
cy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQ09SU0VuYWJsZWQpOwotI2lmIEVOQUJMRShDQUNIRV9Q
QVJUSVRJT05JTkcpCi0gICAgY29weVRvVmVjdG9yKG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0NhY2hl
UGFydGl0aW9uZWQsIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0NhY2hlUGFydGl0
aW9uZWQpOwotI2VuZGlmCi0KLSAgICBwYXJhbWV0ZXJzLnNob3VsZEFsd2F5c1VzZUNvbXBsZXhU
ZXh0Q29kZVBhdGggPSBtX2Fsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoOwotICAgIHBhcmFt
ZXRlcnMuc2hvdWxkVXNlRm9udFNtb290aGluZyA9IG1fc2hvdWxkVXNlRm9udFNtb290aGluZzsK
LQotICAgIC8vIEZJWE1FOiBUaGlzIGxlYXZlcyBVSSBwcm9jZXNzIGFuZCBXZWJQcm9jZXNzIGRp
c2FncmVlaW5nIGFib3V0IHRoZSBzdGF0ZSBpZiB0aGUgY2xpZW50IGhhc24ndCBzZXQgdGhlIHBh
dGguCi0gICAgLy8gaWNvbkRhdGFiYXNlUGF0aCBpcyBub24tZW1wdHkgYnkgZGVmYXVsdCwgYnV0
IG1faWNvbkRhdGFiYXNlIGlzbid0IGVuYWJsZWQgaW4gVUkgcHJvY2VzcyB1bmxlc3Mgc2V0RGF0
YWJhc2VQYXRoIGlzIGNhbGxlZCBleHBsaWNpdGx5LgotICAgIHBhcmFtZXRlcnMuaWNvbkRhdGFi
YXNlRW5hYmxlZCA9ICFpY29uRGF0YWJhc2VQYXRoKCkuaXNFbXB0eSgpOwotCi0gICAgcGFyYW1l
dGVycy50ZXJtaW5hdGlvblRpbWVvdXQgPSAobV9wcm9jZXNzTW9kZWwgPT0gUHJvY2Vzc01vZGVs
U2hhcmVkU2Vjb25kYXJ5UHJvY2VzcykgPyBzaGFyZWRTZWNvbmRhcnlQcm9jZXNzU2h1dGRvd25U
aW1lb3V0IDogMDsKLQotICAgIHBhcmFtZXRlcnMudGV4dENoZWNrZXJTdGF0ZSA9IFRleHRDaGVj
a2VyOjpzdGF0ZSgpOwotCi0gICAgcGFyYW1ldGVycy5mdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVk
ID0gV2ViUHJvY2Vzc1Byb3h5OjpmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkKCk7Ci0KLSAgICBw
YXJhbWV0ZXJzLmRlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsID0gQVBJOjpVUkxSZXF1ZXN0
OjpkZWZhdWx0VGltZW91dEludGVydmFsKCk7Ci0KLSNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykg
fHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQotICAgIC8vIEZJWE1FOiBUaGVyZSBzaG91
bGQgYmUgYSBnZW5lcmljIHdheSBmb3Igc3VwcGxlbWVudHMgdG8gYWRkIHRvIHRoZSBpbnRpYWxp
emF0aW9uIHBhcmFtZXRlcnMuCi0gICAgc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2Vy
UHJveHk+KCktPnBvcHVsYXRlQ29weU9mTm90aWZpY2F0aW9uUGVybWlzc2lvbnMocGFyYW1ldGVy
cy5ub3RpZmljYXRpb25QZXJtaXNzaW9ucyk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShORVRXT1JL
X1BST0NFU1MpCi0gICAgcGFyYW1ldGVycy51c2VzTmV0d29ya1Byb2Nlc3MgPSBtX3VzZXNOZXR3
b3JrUHJvY2VzczsKLSNlbmRpZgotCi0gICAgcGFyYW1ldGVycy5wbHVnSW5BdXRvU3RhcnRPcmln
aW5IYXNoZXMgPSBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmF1dG9TdGFydE9yaWdpbkhhc2hl
c0NvcHkoKTsKLSAgICBjb3B5VG9WZWN0b3IobV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlci5hdXRv
U3RhcnRPcmlnaW5zKCksIHBhcmFtZXRlcnMucGx1Z0luQXV0b1N0YXJ0T3JpZ2lucyk7Ci0KLSAg
ICBwYXJhbWV0ZXJzLm1lbW9yeUNhY2hlRGlzYWJsZWQgPSBtX21lbW9yeUNhY2hlRGlzYWJsZWQ7
Ci0KLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICBwYXJhbWV0ZXJzLmhhc0ltYWdl
U2VydmljZXMgPSBTZXJ2aWNlc0NvbnRyb2xsZXI6OnNoYXJlZCgpLmhhc0ltYWdlU2VydmljZXMo
KTsKLSAgICBwYXJhbWV0ZXJzLmhhc1NlbGVjdGlvblNlcnZpY2VzID0gU2VydmljZXNDb250cm9s
bGVyOjpzaGFyZWQoKS5oYXNTZWxlY3Rpb25TZXJ2aWNlcygpOwotICAgIHBhcmFtZXRlcnMuaGFz
UmljaENvbnRlbnRTZXJ2aWNlcyA9IFNlcnZpY2VzQ29udHJvbGxlcjo6c2hhcmVkKCkuaGFzUmlj
aENvbnRlbnRTZXJ2aWNlcygpOwotICAgIFNlcnZpY2VzQ29udHJvbGxlcjo6c2hhcmVkKCkucmVm
cmVzaEV4aXN0aW5nU2VydmljZXMoKTsKLSNlbmRpZgotCi0gICAgLy8gQWRkIGFueSBwbGF0Zm9y
bSBzcGVjaWZpYyBwYXJhbWV0ZXJzCi0gICAgcGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2Vzcyhw
YXJhbWV0ZXJzKTsKLQotICAgIFJlZlB0cjxBUEk6Ok9iamVjdD4gaW5qZWN0ZWRCdW5kbGVJbml0
aWFsaXphdGlvblVzZXJEYXRhID0gbV9pbmplY3RlZEJ1bmRsZUNsaWVudC5nZXRJbmplY3RlZEJ1
bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGEodGhpcyk7Ci0gICAgaWYgKCFpbmplY3RlZEJ1bmRs
ZUluaXRpYWxpemF0aW9uVXNlckRhdGEpCi0gICAgICAgIGluamVjdGVkQnVuZGxlSW5pdGlhbGl6
YXRpb25Vc2VyRGF0YSA9IG1faW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhOwot
ICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkluaXRpYWxpemVXZWJQcm9j
ZXNzKHBhcmFtZXRlcnMsIFdlYkNvbnRleHRVc2VyTWVzc2FnZUVuY29kZXIoaW5qZWN0ZWRCdW5k
bGVJbml0aWFsaXphdGlvblVzZXJEYXRhLmdldCgpLCBwcm9jZXNzKSksIDApOwotCi0jaWYgUExB
VEZPUk0oQ09DT0EpCi0gICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0
UU9TKHdlYlByb2Nlc3NMYXRlbmN5UU9TKCksIHdlYlByb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAw
KTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKElPUykKLSAgICBjYWNoZVN0b3JhZ2UoKS5zZXREZWZh
dWx0T3JpZ2luUXVvdGEoMjVVTEwgKiAxMDI0ICogMTAyNCk7Ci0jZW5kaWYKLQotICAgIGlmIChX
ZWJQcmVmZXJlbmNlczo6YW55UGFnZXNBcmVVc2luZ1ByaXZhdGVCcm93c2luZygpKQotICAgICAg
ICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpFbnN1cmVQcml2YXRlQnJvd3Np
bmdTZXNzaW9uKFNlc3Npb25JRDo6bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpKSwgMCk7Ci0KLSAg
ICBtX3Byb2Nlc3Nlcy5hcHBlbmQocHJvY2Vzcy5wdHIoKSk7Ci0KLSAgICBpZiAobV9wcm9jZXNz
TW9kZWwgPT0gUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2VzcykgewotICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSAhPSBtX21lc3NhZ2VzVG9JbmplY3RlZEJ1bmRsZVBvc3RlZFRv
RW1wdHlDb250ZXh0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBzdGQ6OnBhaXI8U3RyaW5n
LCBSZWZQdHI8QVBJOjpPYmplY3Q+PiYgbWVzc2FnZSA9IG1fbWVzc2FnZXNUb0luamVjdGVkQnVu
ZGxlUG9zdGVkVG9FbXB0eUNvbnRleHRbaV07Ci0KLSAgICAgICAgICAgIElQQzo6QXJndW1lbnRF
bmNvZGVyIG1lc3NhZ2VEYXRhOwotCi0gICAgICAgICAgICBtZXNzYWdlRGF0YS5lbmNvZGUobWVz
c2FnZS5maXJzdCk7Ci0gICAgICAgICAgICBtZXNzYWdlRGF0YS5lbmNvZGUoV2ViQ29udGV4dFVz
ZXJNZXNzYWdlRW5jb2RlcihtZXNzYWdlLnNlY29uZC5nZXQoKSwgcHJvY2VzcykpOwotICAgICAg
ICAgICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6UG9zdEluamVjdGVkQnVu
ZGxlTWVzc2FnZShJUEM6OkRhdGFSZWZlcmVuY2UobWVzc2FnZURhdGEuYnVmZmVyKCksIG1lc3Nh
Z2VEYXRhLmJ1ZmZlclNpemUoKSkpLCAwKTsKLSAgICAgICAgfQotICAgICAgICBtX21lc3NhZ2Vz
VG9JbmplY3RlZEJ1bmRsZVBvc3RlZFRvRW1wdHlDb250ZXh0LmNsZWFyKCk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIEFTU0VSVChtX21lc3NhZ2VzVG9JbmplY3RlZEJ1bmRsZVBvc3RlZFRvRW1wdHlD
b250ZXh0LmlzRW1wdHkoKSk7Ci0KLSNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKLSAgICAv
LyBJbml0aWFsaXplIHJlbW90ZSBpbnNwZWN0b3IgY29ubmVjdGlvbiBub3cgdGhhdCB3ZSBoYXZl
IGEgc3ViLXByb2Nlc3MgdGhhdCBpcyBob3N0aW5nIG9uZSBvZiBvdXIgd2ViIHZpZXdzLgotICAg
IEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpzaGFyZWQoKTsgCi0jZW5kaWYKLQotICAgIHJl
dHVybiBwcm9jZXNzOwotfQotCi12b2lkIFdlYkNvbnRleHQ6Ondhcm1Jbml0aWFsUHJvY2Vzcygp
ICAKLXsKLSAgICBpZiAobV9oYXZlSW5pdGlhbEVtcHR5UHJvY2VzcykgewotICAgICAgICBBU1NF
UlQoIW1fcHJvY2Vzc2VzLmlzRW1wdHkoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAobV9wcm9jZXNzZXMuc2l6ZSgpID49IG1fd2ViUHJvY2Vzc0NvdW50TGltaXQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGNyZWF0ZU5ld1dlYlByb2Nlc3MoKTsKLSAgICBtX2hhdmVJbml0
aWFsRW1wdHlQcm9jZXNzID0gdHJ1ZTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjplbmFibGVQcm9j
ZXNzVGVybWluYXRpb24oKQotewotICAgIG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCA9IHRy
dWU7Ci0gICAgVmVjdG9yPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXMgPSBtX3By
b2Nlc3NlczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2Nlc3Nlcy5zaXplKCk7ICsr
aSkgewotICAgICAgICBpZiAoc2hvdWxkVGVybWluYXRlKHByb2Nlc3Nlc1tpXS5nZXQoKSkpCi0g
ICAgICAgICAgICBwcm9jZXNzZXNbaV0tPnRlcm1pbmF0ZSgpOwotICAgIH0KLX0KLQotYm9vbCBX
ZWJDb250ZXh0OjpzaG91bGRUZXJtaW5hdGUoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQotewot
ICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5jb250YWlucyhwcm9jZXNzKSk7Ci0KLSAgICBpZiAoIW1f
cHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Zm9yIChjb25zdCBhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkgewot
ICAgICAgICBpZiAoIXN1cHBsZW1lbnQtPnNob3VsZFRlcm1pbmF0ZShwcm9jZXNzKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBXZWJDb250ZXh0Ojpwcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSog
cHJvY2VzcykKLXsKLSAgICBtX3N0b3JhZ2VNYW5hZ2VyLT5wcm9jZXNzV2lsbE9wZW5Db25uZWN0
aW9uKHByb2Nlc3MpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OnByb2Nlc3NXaWxsQ2xvc2VDb25u
ZWN0aW9uKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKLXsKLSAgICBtX3N0b3JhZ2VNYW5hZ2Vy
LT5wcm9jZXNzV2lsbENsb3NlQ29ubmVjdGlvbihwcm9jZXNzKTsKLX0KLQotdm9pZCBXZWJDb250
ZXh0OjphcHBsaWNhdGlvbldpbGxUZXJtaW5hdGUoKQotewotICAgIG1fc3RvcmFnZU1hbmFnZXIt
PmFwcGxpY2F0aW9uV2lsbFRlcm1pbmF0ZSgpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OnByb2Nl
c3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQotewotICAgIEFT
U0VSVChtX3Byb2Nlc3Nlcy5jb250YWlucyhwcm9jZXNzKSk7Ci0KLSAgICBpZiAoIW1fdmlzaXRl
ZExpbmtzUG9wdWxhdGVkKSB7Ci0gICAgICAgIHBvcHVsYXRlVmlzaXRlZExpbmtzKCk7Ci0gICAg
ICAgIG1fdmlzaXRlZExpbmtzUG9wdWxhdGVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBTb21l
dGltZXMgdGhlIG1lbW9yeVNhbXBsZXIgZ2V0cyBpbml0aWFsaXplZCBhZnRlciBwcm9jZXNzIGlu
aXRpYWxpemF0aW9uIGhhcyBoYXBwZW5lZCBidXQgYmVmb3JlIHRoZSBwcm9jZXNzIGhhcyBmaW5p
c2hlZCBsYXVuY2hpbmcKLSAgICAvLyBzbyBjaGVjayBpZiBpdCBuZWVkcyB0byBiZSBzdGFydGVk
IGhlcmUKLSAgICBpZiAobV9tZW1vcnlTYW1wbGVyRW5hYmxlZCkgewotICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGUgc2FtcGxlTG9nU2FuZGJveEhhbmRsZTsgICAgICAgIAotICAgICAg
ICBkb3VibGUgbm93ID0gV1RGOjpjdXJyZW50VGltZSgpOwotICAgICAgICBTdHJpbmcgc2FtcGxl
TG9nRmlsZVBhdGggPSBTdHJpbmc6OmZvcm1hdCgiV2ViUHJvY2VzcyVsbHVwaWQlZCIsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obm93KSwgcHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZp
ZXIoKSk7Ci0gICAgICAgIHNhbXBsZUxvZ0ZpbGVQYXRoID0gU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShzYW1wbGVMb2dGaWxlUGF0aCwgU2FuZGJveEV4dGVu
c2lvbjo6UmVhZFdyaXRlLCBzYW1wbGVMb2dTYW5kYm94SGFuZGxlKTsKLSAgICAgICAgCi0gICAg
ICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0YXJ0TWVtb3J5U2FtcGxl
cihzYW1wbGVMb2dTYW5kYm94SGFuZGxlLCBzYW1wbGVMb2dGaWxlUGF0aCwgbV9tZW1vcnlTYW1w
bGVySW50ZXJ2YWwpLCAwKTsKLSAgICB9Ci0KLSAgICBtX2Nvbm5lY3Rpb25DbGllbnQuZGlkQ3Jl
YXRlQ29ubmVjdGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0aW9uKCkpOwotfQotCi12b2lk
IFdlYkNvbnRleHQ6OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykK
LXsKLSAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFpbnMocHJvY2VzcykpOwotCi0gICAgaWYg
KG1faGF2ZUluaXRpYWxFbXB0eVByb2Nlc3MgJiYgcHJvY2VzcyA9PSBtX3Byb2Nlc3Nlcy5sYXN0
KCkpCi0gICAgICAgIG1faGF2ZUluaXRpYWxFbXB0eVByb2Nlc3MgPSBmYWxzZTsKLQotICAgIC8v
IEZJWE1FIChNdWx0aS1XZWJQcm9jZXNzKTogPHJkYXI6Ly9wcm9ibGVtLzEyMjM5NzY1PiBTb21l
IG9mIHRoZSBpbnZhbGlkYXRpb24gY2FsbHMgYmVsb3cgYXJlIHN0aWxsIG5lY2Vzc2FyeSBpbiBt
dWx0aS1wcm9jZXNzIG1vZGUsIGJ1dCB0aGV5IHNob3VsZCBvbmx5IGFmZmVjdCBkYXRhIHN0cnVj
dHVyZXMgcGVydGFpbmluZyB0byB0aGUgcHJvY2VzcyBiZWluZyBkaXNjb25uZWN0ZWQuCi0gICAg
Ly8gQ2xlYXJpbmcgZXZlcnl0aGluZyBjYXVzZXMgYXNzZXJ0aW9uIGZhaWx1cmVzLCBzbyBpdCdz
IGxlc3MgdHJvdWJsZSB0byBza2lwIHRoYXQgZm9yIG5vdy4KLSAgICBpZiAobV9wcm9jZXNzTW9k
ZWwgIT0gUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2VzcykgewotICAgICAgICBSZWZQ
dHI8V2ViUHJvY2Vzc1Byb3h5PiBwcm90ZWN0KHByb2Nlc3MpOwotICAgICAgICBpZiAobV9wcm9j
ZXNzV2l0aFBhZ2VDYWNoZSA9PSBwcm9jZXNzKQotICAgICAgICAgICAgbV9wcm9jZXNzV2l0aFBh
Z2VDYWNoZSA9IDA7Ci0KLSAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ29udGV4dFN1cHBsZW1lbnQq
PihzdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5PigpKS0+cHJvY2Vzc0RpZENs
b3NlKHByb2Nlc3MpOwotCi0gICAgICAgIG1fcHJvY2Vzc2VzLnJlbW92ZShtX3Byb2Nlc3Nlcy5m
aW5kKHByb2Nlc3MpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFdlYkNvbnRleHRT
dXBwbGVtZW50TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3VwcGxlbWVudHMuYmVnaW4oKTsK
LSAgICBXZWJDb250ZXh0U3VwcGxlbWVudE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9zdXBw
bGVtZW50cy5lbmQoKTsKLSAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpdC0+
dmFsdWUtPnByb2Nlc3NEaWRDbG9zZShwcm9jZXNzKTsKLQotICAgIC8vIFRoZSB2ZWN0b3IgbWF5
IGhhdmUgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHByb2Nlc3MgcHJveHksIHdoaWNoIGluIHR1cm4g
bWF5IGhhdmUgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBjb250ZXh0LgotICAgIC8vIFNpbmNl
IHZlY3RvciBlbGVtZW50cyBhcmUgZGVzdHJveWVkIGluIHBsYWNlLCB3ZSB3b3VsZCByZWN1cnNl
IGludG8gV2ViUHJvY2Vzc1Byb3h5IGRlc3RydWN0b3IKLSAgICAvLyBpZiBpdCB3ZXJlIGludm9r
ZWQgZnJvbSBWZWN0b3I6OnJlbW92ZSgpLiBSZWZQdHIgZGVsYXlzIGRlc3RydWN0aW9uIHVudGls
IGl0J3Mgc2FmZS4KLSAgICBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBwcm90ZWN0KHByb2Nlc3Mp
OwotICAgIGlmIChtX3Byb2Nlc3NXaXRoUGFnZUNhY2hlID09IHByb2Nlc3MpCi0gICAgICAgIG1f
cHJvY2Vzc1dpdGhQYWdlQ2FjaGUgPSAwOwotICAgIG1fcHJvY2Vzc2VzLnJlbW92ZShtX3Byb2Nl
c3Nlcy5maW5kKHByb2Nlc3MpKTsKLX0KLQotV2ViUHJvY2Vzc1Byb3h5JiBXZWJDb250ZXh0Ojpj
cmVhdGVOZXdXZWJQcm9jZXNzUmVzcGVjdGluZ1Byb2Nlc3NDb3VudExpbWl0KCkKLXsKLSAgICBp
ZiAobV9wcm9jZXNzZXMuc2l6ZSgpIDwgbV93ZWJQcm9jZXNzQ291bnRMaW1pdCkKLSAgICAgICAg
cmV0dXJuIGNyZWF0ZU5ld1dlYlByb2Nlc3MoKTsKLQotICAgIC8vIENob29zZSB0aGUgcHJvY2Vz
cyB3aXRoIGZld2VzdCBwYWdlcy4KLSAgICBhdXRvJiBwcm9jZXNzID0gKnN0ZDo6bWluX2VsZW1l
bnQobV9wcm9jZXNzZXMuYmVnaW4oKSwgbV9wcm9jZXNzZXMuZW5kKCksIFtdKGNvbnN0IFJlZlB0
cjxXZWJQcm9jZXNzUHJveHk+JiBhLCBjb25zdCBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiYgYikg
ewotICAgICAgICByZXR1cm4gYS0+cGFnZUNvdW50KCkgPCBiLT5wYWdlQ291bnQoKTsKLSAgICB9
KTsKLQotICAgIHJldHVybiAqcHJvY2VzczsKLX0KLQotUGFzc1JlZlB0cjxXZWJQYWdlUHJveHk+
IFdlYkNvbnRleHQ6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgV2ViUGFn
ZUNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICBpZiAoIWNvbmZpZ3VyYXRpb24u
cGFnZUdyb3VwKQotICAgICAgICBjb25maWd1cmF0aW9uLnBhZ2VHcm91cCA9IG1fZGVmYXVsdFBh
Z2VHcm91cC5wdHIoKTsKLSAgICBpZiAoIWNvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXMpCi0gICAg
ICAgIGNvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXMgPSAmY29uZmlndXJhdGlvbi5wYWdlR3JvdXAt
PnByZWZlcmVuY2VzKCk7Ci0gICAgaWYgKCFjb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rUHJvdmlk
ZXIpCi0gICAgICAgIGNvbmZpZ3VyYXRpb24udmlzaXRlZExpbmtQcm92aWRlciA9IG1fdmlzaXRl
ZExpbmtQcm92aWRlci5nZXQoKTsKLSAgICBpZiAoIWNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFT
dG9yZSkgewotICAgICAgICBBU1NFUlQoIWNvbmZpZ3VyYXRpb24uc2Vzc2lvbklELmlzVmFsaWQo
KSk7Ci0gICAgICAgIGNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSA9IG1fd2Vic2l0ZURh
dGFTdG9yZS5nZXQoKTsKLSAgICAgICAgY29uZmlndXJhdGlvbi5zZXNzaW9uSUQgPSBjb25maWd1
cmF0aW9uLnByZWZlcmVuY2VzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkgPyBTZXNzaW9uSUQ6
OmxlZ2FjeVByaXZhdGVTZXNzaW9uSUQoKSA6IFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
OwotICAgIH0KLQotICAgIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3M7Ci0gICAgaWYg
KG1fcHJvY2Vzc01vZGVsID09IFByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3MpIHsK
LSAgICAgICAgcHJvY2VzcyA9ICZlbnN1cmVTaGFyZWRXZWJQcm9jZXNzKCk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKG1faGF2ZUluaXRpYWxFbXB0eVByb2Nlc3MpIHsKLSAgICAgICAgICAg
IHByb2Nlc3MgPSBtX3Byb2Nlc3Nlcy5sYXN0KCk7Ci0gICAgICAgICAgICBtX2hhdmVJbml0aWFs
RW1wdHlQcm9jZXNzID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29uZmlndXJhdGlvbi5y
ZWxhdGVkUGFnZSkgewotICAgICAgICAgICAgLy8gU2hhcmluZyBwcm9jZXNzZXMsIGUuZy4gd2hl
biBjcmVhdGluZyB0aGUgcGFnZSB2aWEgd2luZG93Lm9wZW4oKS4KLSAgICAgICAgICAgIHByb2Nl
c3MgPSAmY29uZmlndXJhdGlvbi5yZWxhdGVkUGFnZS0+cHJvY2VzcygpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIHByb2Nlc3MgPSAmY3JlYXRlTmV3V2ViUHJvY2Vzc1Jlc3BlY3RpbmdQ
cm9jZXNzQ291bnRMaW1pdCgpOwotICAgIH0KLQotICAgIHJldHVybiBwcm9jZXNzLT5jcmVhdGVX
ZWJQYWdlKHBhZ2VDbGllbnQsIFdURjo6bW92ZShjb25maWd1cmF0aW9uKSk7Ci19Ci0KLURvd25s
b2FkUHJveHkqIFdlYkNvbnRleHQ6OmRvd25sb2FkKFdlYlBhZ2VQcm94eSogaW5pdGlhdGluZ1Bh
Z2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBEb3dubG9hZFByb3h5
KiBkb3dubG9hZFByb3h5ID0gY3JlYXRlRG93bmxvYWRQcm94eShyZXF1ZXN0KTsKLSAgICB1aW50
NjRfdCBpbml0aWF0aW5nUGFnZUlEID0gaW5pdGlhdGluZ1BhZ2UgPyBpbml0aWF0aW5nUGFnZS0+
cGFnZUlEKCkgOiAwOwotCi0jaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLSAgICBpZiAodXNl
c05ldHdvcmtQcm9jZXNzKCkgJiYgbmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICAvLyBGSVhN
RSAoTmV0d29ya1Byb2Nlc3MpOiBSZXBsaWNhdGUgd2hhdGV2ZXIgRnJhbWVMb2FkZXI6OnNldE9y
aWdpbmFsVVJMRm9yRG93bmxvYWRSZXF1ZXN0IGRvZXMgd2l0aCB0aGUgcmVxdWVzdCBoZXJlLgot
ICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
RG93bmxvYWRSZXF1ZXN0KGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKSwgcmVxdWVzdCksIDAp
OwotICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIG1f
cHJvY2Vzc2VzWzBdLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qo
ZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpLCBpbml0aWF0aW5nUGFnZUlELCByZXF1ZXN0KSwg
MCk7Ci0gICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci19Ci0KLURvd25sb2FkUHJveHkqIFdlYkNv
bnRleHQ6OnJlc3VtZURvd25sb2FkKGNvbnN0IEFQSTo6RGF0YSogcmVzdW1lRGF0YSwgY29uc3Qg
U3RyaW5nJiBwYXRoKQotewotICAgIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHkgPSBjcmVh
dGVEb3dubG9hZFByb3h5KFJlc291cmNlUmVxdWVzdCgpKTsKLQotICAgIFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwotICAgIGlmICghcGF0aC5pc0VtcHR5
KCkpCi0gICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBTYW5kYm94
RXh0ZW5zaW9uOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOwotCi0jaWYgRU5B
QkxFKE5FVFdPUktfUFJPQ0VTUykKLSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkgJiYgbmV0
d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJ
RCgpLCByZXN1bWVEYXRhLT5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25I
YW5kbGUpLCAwKTsKLSAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICBtX3Byb2Nlc3Nlc1swXS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVzdW1l
RG93bmxvYWQoZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLT5kYXRhUmVm
ZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKLSAgICByZXR1cm4g
ZG93bmxvYWRQcm94eTsKLX0KLQotdm9pZCBXZWJDb250ZXh0Ojpwb3N0TWVzc2FnZVRvSW5qZWN0
ZWRCdW5kbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgQVBJOjpPYmplY3QqIG1lc3NhZ2VC
b2R5KQotewotICAgIGlmIChtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKG1f
cHJvY2Vzc01vZGVsID09IFByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3MpCi0gICAg
ICAgICAgICBtX21lc3NhZ2VzVG9JbmplY3RlZEJ1bmRsZVBvc3RlZFRvRW1wdHlDb250ZXh0LmFw
cGVuZChzdGQ6Om1ha2VfcGFpcihtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBSZXR1cm4gZWFybHkgaWYgdGhlIG1lc3NhZ2UgYm9keSBjb250
YWlucyBhbnkgcmVmZXJlbmNlcyB0byBXS1BhZ2VSZWZzL1dLRnJhbWVSZWZzIGV0Yy4gc2luY2Ug
dGhleSdyZSBsb2NhbCB0byBhIHByb2Nlc3MuCi0gICAgICAgIElQQzo6QXJndW1lbnRFbmNvZGVy
IG1lc3NhZ2VEYXRhOwotICAgICAgICBtZXNzYWdlRGF0YS5lbmNvZGUobWVzc2FnZU5hbWUpOwot
ICAgICAgICBtZXNzYWdlRGF0YS5lbmNvZGUoV2ViQ29udGV4dFVzZXJNZXNzYWdlRW5jb2Rlciht
ZXNzYWdlQm9keSwgKnByb2Nlc3MuZ2V0KCkpKTsKLQotICAgICAgICBwcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpQb3N0SW5qZWN0ZWRCdW5kbGVNZXNzYWdlKElQQzo6RGF0YVJl
ZmVyZW5jZShtZXNzYWdlRGF0YS5idWZmZXIoKSwgbWVzc2FnZURhdGEuYnVmZmVyU2l6ZSgpKSks
IDApOwotICAgIH0KLX0KLQotLy8gSW5qZWN0ZWRCdW5kbGUgY2xpZW50Ci0KLXZvaWQgV2ViQ29u
dGV4dDo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlTmFtZSwgQVBJOjpPYmplY3QqIG1lc3NhZ2VCb2R5KQotewotICAgIG1faW5qZWN0ZWRC
dW5kbGVDbGllbnQuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUodGhpcywgbWVz
c2FnZU5hbWUsIG1lc3NhZ2VCb2R5KTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpkaWRSZWNlaXZl
U3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZU5hbWUsIEFQSTo6T2JqZWN0KiBtZXNzYWdlQm9keSwgUmVmUHRyPEFQSTo6T2JqZWN0PiYgcmV0
dXJuRGF0YSkKLXsKLSAgICBtX2luamVjdGVkQnVuZGxlQ2xpZW50LmRpZFJlY2VpdmVTeW5jaHJv
bm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUodGhpcywgbWVzc2FnZU5hbWUsIG1lc3NhZ2VC
b2R5LCByZXR1cm5EYXRhKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0Ojpwb3B1bGF0ZVZpc2l0ZWRM
aW5rcygpCi17Ci0gICAgbV9oaXN0b3J5Q2xpZW50LT5wb3B1bGF0ZVZpc2l0ZWRMaW5rcygqdGhp
cyk7Ci19Ci0KLVdlYkNvbnRleHQ6OlN0YXRpc3RpY3MmIFdlYkNvbnRleHQ6OnN0YXRpc3RpY3Mo
KQotewotICAgIHN0YXRpYyBTdGF0aXN0aWNzIHN0YXRpc3RpY3MgPSBTdGF0aXN0aWNzKCk7Ci0K
LSAgICByZXR1cm4gc3RhdGlzdGljczsKLX0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQotdm9pZCBXZWJDb250ZXh0OjpzZXRBZGRpdGlvbmFsUGx1Z2luc0RpcmVjdG9yeShjb25z
dCBTdHJpbmcmIGRpcmVjdG9yeSkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBkaXJlY3RvcmllczsK
LSAgICBkaXJlY3Rvcmllcy5hcHBlbmQoZGlyZWN0b3J5KTsKLQotICAgIG1fcGx1Z2luSW5mb1N0
b3JlLnNldEFkZGl0aW9uYWxQbHVnaW5zRGlyZWN0b3JpZXMoZGlyZWN0b3JpZXMpOwotfQotI2Vu
ZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotCi12b2lkIFdlYkNvbnRleHQ6OnNl
dEFsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoKGJvb2wgYWx3YXlzVXNlQ29tcGxleFRleHQp
Ci17Ci0gICAgbV9hbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aCA9IGFsd2F5c1VzZUNvbXBs
ZXhUZXh0OwotICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0
QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGgoYWx3YXlzVXNlQ29tcGxleFRleHQpKTsKLX0K
LQotdm9pZCBXZWJDb250ZXh0OjpzZXRTaG91bGRVc2VGb250U21vb3RoaW5nKGJvb2wgdXNlRm9u
dFNtb290aGluZykKLXsKLSAgICBtX3Nob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSB1c2VGb250U21v
b3RoaW5nOwotICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0
U2hvdWxkVXNlRm9udFNtb290aGluZyh1c2VGb250U21vb3RoaW5nKSk7Ci19Ci0KLXZvaWQgV2Vi
Q29udGV4dDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0VtcHR5RG9jdW1lbnQoY29uc3QgU3RyaW5nJiB1
cmxTY2hlbWUpCi17Ci0gICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzRW1wdHlEb2N1bWVudC5hZGQo
dXJsU2NoZW1lKTsKLSAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlJlZ2lzdGVyVVJMU2NoZW1lQXNFbXB0eURvY3VtZW50KHVybFNjaGVtZSkpOwotfQotCi12b2lk
IFdlYkNvbnRleHQ6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUoY29uc3QgU3RyaW5nJiB1cmxT
Y2hlbWUpCi17Ci0gICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlLmFkZCh1cmxTY2hlbWUp
OwotICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJV
UkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpzZXRE
b21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgdXJsU2No
ZW1lKQotewotICAgIG1fc2NoZW1lc1RvU2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvci5h
ZGQodXJsU2NoZW1lKTsKLSAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nl
c3M6OlNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUodXJsU2NoZW1lKSk7
Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6c2V0Q2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1
YXRpb24oYm9vbCB2YWx1ZSkKLXsKLSNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotICAgIG1f
Y2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24gPSB2YWx1ZTsKLSAgICBpZiAobV91
c2VzTmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2VzcykgewotICAgICAgICBtX25ldHdv
cmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FuSGFuZGxlSFRU
UFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24odmFsdWUpLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZgotfQotCi12b2lkIFdl
YkNvbnRleHQ6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHVybFNjaGVt
ZSkKLXsKLSAgICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbC5hZGQodXJsU2NoZW1lKTsKLSAg
ICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2No
ZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpyZWdpc3RlclVS
TFNjaGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCi17Ci0gICAgbV9zY2hl
bWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MuYWRkKHVybFNjaGVtZSk7Ci0gICAgc2VuZFRvQWxsUHJv
Y2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9BY2Nlc3Mo
dXJsU2NoZW1lKSk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rp
c3BsYXlJc29sYXRlZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKLXsKLSAgICBtX3NjaGVtZXNU
b1JlZ2lzdGVyQXNEaXNwbGF5SXNvbGF0ZWQuYWRkKHVybFNjaGVtZSk7Ci0gICAgc2VuZFRvQWxs
UHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxh
eUlzb2xhdGVkKHVybFNjaGVtZSkpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OnJlZ2lzdGVyVVJM
U2NoZW1lQXNDT1JTRW5hYmxlZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKLXsKLSAgICBtX3Nj
aGVtZXNUb1JlZ2lzdGVyQXNDT1JTRW5hYmxlZC5hZGQodXJsU2NoZW1lKTsKLSAgICBzZW5kVG9B
bGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNDT1JT
RW5hYmxlZCh1cmxTY2hlbWUpKTsKLX0KLQotSGFzaFNldDxTdHJpbmc+JiBXZWJDb250ZXh0Ojpn
bG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQotewotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IHNldDsKLSAgICByZXR1cm4gc2V0Owot
fQotCi12b2lkIFdlYkNvbnRleHQ6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0
b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQotewotICAgIGlmICgh
dXJsU2NoZW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgc2NoZW1lTG93ZXIgPSB1
cmxTY2hlbWUubG93ZXIoKTsKLSAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29s
SGFuZGxlcnMoKS5hZGQoc2NoZW1lTG93ZXIpOwotICAgIGZvciAoYXV0byogY29udGV4dCA6IGFs
bENvbnRleHRzKCkpCi0gICAgICAgIGNvbnRleHQtPnJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9tUHJv
dG9jb2woc2NoZW1lTG93ZXIpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OnVucmVnaXN0ZXJHbG9i
YWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5nJiB1
cmxTY2hlbWUpCi17Ci0gICAgaWYgKCF1cmxTY2hlbWUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFN0cmluZyBzY2hlbWVMb3dlciA9IHVybFNjaGVtZS5sb3dlcigpOwotICAgIGdsb2JhbFVSTFNj
aGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJlbW92ZShzY2hlbWVMb3dlcik7Ci0g
ICAgZm9yIChhdXRvKiBjb250ZXh0IDogYWxsQ29udGV4dHMoKSkKLSAgICAgICAgY29udGV4dC0+
dW5yZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKHNjaGVtZUxvd2VyKTsKLX0KLQotI2lm
IEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi12b2lkIFdlYkNvbnRleHQ6OnJlZ2lzdGVyVVJM
U2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQotewotICAg
IG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0NhY2hlUGFydGl0aW9uZWQuYWRkKHVybFNjaGVtZSk7Ci0g
ICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNj
aGVtZUFzQ2FjaGVQYXJ0aXRpb25lZCh1cmxTY2hlbWUpKTsKLX0KLSNlbmRpZgotCi12b2lkIFdl
YkNvbnRleHQ6OnNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQotewotICAgIG1f
Y2FjaGVNb2RlbCA9IGNhY2hlTW9kZWw7Ci0gICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2NhY2hl
TW9kZWwpKSk7Ci0KLSAgICAvLyBGSVhNRTogSW5mb3JtIHRoZSBOZXR3b3JrIFByb2Nlc3MgaWYg
aW4gdXNlLgotfQotCi12b2lkIFdlYkNvbnRleHQ6OnNldERlZmF1bHRSZXF1ZXN0VGltZW91dElu
dGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCi17Ci0gICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbCh0
aW1lb3V0SW50ZXJ2YWwpKTsKLX0KLQotRG93bmxvYWRQcm94eSogV2ViQ29udGV4dDo6Y3JlYXRl
RG93bmxvYWRQcm94eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0jaWYgRU5B
QkxFKE5FVFdPUktfUFJPQ0VTUykKLSAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAg
ICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICAgICAgQVNTRVJUKG1fbmV0d29ya1By
b2Nlc3MpOwotICAgICAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlRG93bmxvYWRQ
cm94eShyZXF1ZXN0KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiBlbnN1cmVTaGFyZWRX
ZWJQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShyZXF1ZXN0KTsKLX0KLQotdm9pZCBXZWJD
b250ZXh0OjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJl
Y2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNlaXZlcikKLXsKLSAg
ICBtX21lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIobWVzc2FnZVJlY2VpdmVy
TmFtZSwgbWVzc2FnZVJlY2VpdmVyKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjphZGRNZXNzYWdl
UmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgdWludDY0
X3QgZGVzdGluYXRpb25JRCwgSVBDOjpNZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNlaXZlcikK
LXsKLSAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIobWVzc2FnZVJl
Y2VpdmVyTmFtZSwgZGVzdGluYXRpb25JRCwgbWVzc2FnZVJlY2VpdmVyKTsKLX0KLQotdm9pZCBX
ZWJDb250ZXh0OjpyZW1vdmVNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVz
c2FnZVJlY2VpdmVyTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCkKLXsKLSAgICBtX21lc3Nh
Z2VSZWNlaXZlck1hcC5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIobWVzc2FnZVJlY2VpdmVyTmFtZSwg
ZGVzdGluYXRpb25JRCk7Ci19Ci0KLWJvb2wgV2ViQ29udGV4dDo6ZGlzcGF0Y2hNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2RlcikK
LXsKLSAgICByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXAuZGlzcGF0Y2hNZXNzYWdlKGNvbm5l
Y3Rpb24sIGRlY29kZXIpOwotfQotCi1ib29sIFdlYkNvbnRleHQ6OmRpc3BhdGNoU3luY01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJiBkZWNv
ZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNzYWdlRW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikK
LXsKLSAgICByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXAuZGlzcGF0Y2hTeW5jTWVzc2FnZShj
b25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6
OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgSVBDOjpNZXNz
YWdlRGVjb2RlciYgZGVjb2RlcikKLXsKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJO
YW1lKCkgPT0gTWVzc2FnZXM6OldlYkNvbnRleHQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewot
ICAgICAgICBkaWRSZWNlaXZlV2ViQ29udGV4dE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2
ZXJOYW1lKCkgPT0gV2ViQ29udGV4dExlZ2FjeU1lc3NhZ2VzOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCkKLSAgICAgICAgJiYgZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IFdlYkNvbnRleHRMZWdhY3lN
ZXNzYWdlczo6cG9zdE1lc3NhZ2VNZXNzYWdlTmFtZSgpKSB7Ci0gICAgICAgIFN0cmluZyBtZXNz
YWdlTmFtZTsKLSAgICAgICAgUmVmUHRyPEFQSTo6T2JqZWN0PiBtZXNzYWdlQm9keTsKLSAgICAg
ICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlQm9keURlY29kZXIobWVzc2Fn
ZUJvZHksICpXZWJQcm9jZXNzUHJveHk6OmZyb21Db25uZWN0aW9uKGNvbm5lY3Rpb24pKTsKLSAg
ICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXNzYWdlTmFtZSkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWVzc2FnZUJvZHlEZWNvZGVyKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3Rl
ZEJ1bmRsZShtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4
dDo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgSVBD
OjpNZXNzYWdlRGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVu
Y29kZXI+JiByZXBseUVuY29kZXIpCi17Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVy
TmFtZSgpID09IE1lc3NhZ2VzOjpXZWJDb250ZXh0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsK
LSAgICAgICAgZGlkUmVjZWl2ZVN5bmNXZWJDb250ZXh0TWVzc2FnZShjb25uZWN0aW9uLCBkZWNv
ZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGRl
Y29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IFdlYkNvbnRleHRMZWdhY3lNZXNzYWdlczo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpCi0gICAgICAgICYmIGRlY29kZXIubWVzc2FnZU5hbWUoKSA9
PSBXZWJDb250ZXh0TGVnYWN5TWVzc2FnZXM6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VNZXNzYWdl
TmFtZSgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgZW5jb2RlIHNv
bWV0aGluZyBpbiB0aGUgY2FzZSB0aGF0IHRoZSBhcmd1bWVudHMgZG8gbm90IGRlY29kZSBjb3Jy
ZWN0bHkuCi0KLSAgICAgICAgV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzID0gV2ViUHJvY2Vzc1By
b3h5Ojpmcm9tQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKLQotICAgICAgICBTdHJpbmcgbWVzc2Fn
ZU5hbWU7Ci0gICAgICAgIFJlZlB0cjxBUEk6Ok9iamVjdD4gbWVzc2FnZUJvZHk7Ci0gICAgICAg
IFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZUJvZHlEZWNvZGVyKG1lc3NhZ2VC
b2R5LCAqcHJvY2Vzcyk7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWVzc2FnZU5hbWUp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1lc3Nh
Z2VCb2R5RGVjb2RlcikpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUmVmUHRyPEFQ
STo6T2JqZWN0PiByZXR1cm5EYXRhOwotICAgICAgICBkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNz
YWdlRnJvbUluamVjdGVkQnVuZGxlKG1lc3NhZ2VOYW1lLCBtZXNzYWdlQm9keS5nZXQoKSwgcmV0
dXJuRGF0YSk7Ci0gICAgICAgIHJlcGx5RW5jb2Rlci0+ZW5jb2RlKFdlYkNvbnRleHRVc2VyTWVz
c2FnZUVuY29kZXIocmV0dXJuRGF0YS5nZXQoKSwgKnByb2Nlc3MpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIFdlYkNvbnRl
eHQ6OnNldEVuaGFuY2VkQWNjZXNzaWJpbGl0eShib29sIGZsYWcpCi17Ci0gICAgc2VuZFRvQWxs
UHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRFbmhhbmNlZEFjY2Vzc2liaWxpdHko
ZmxhZykpOwotfQotICAgIAotdm9pZCBXZWJDb250ZXh0OjpzdGFydE1lbW9yeVNhbXBsZXIoY29u
c3QgZG91YmxlIGludGVydmFsKQoteyAgICAKLSAgICAvLyBGb3IgbmV3IFdlYlByb2Nlc3NlcyB3
ZSB3aWxsIGFsc28gd2FudCB0byBzdGFydCB0aGUgTWVtb3J5IFNhbXBsZXIKLSAgICBtX21lbW9y
eVNhbXBsZXJFbmFibGVkID0gdHJ1ZTsKLSAgICBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCA9IGlu
dGVydmFsOwotICAgIAotICAgIC8vIEZvciBVSVByb2Nlc3MKLSNpZiBFTkFCTEUoTUVNT1JZX1NB
TVBMRVIpCi0gICAgV2ViTWVtb3J5U2FtcGxlcjo6c2hhcmVkKCktPnN0YXJ0KGludGVydmFsKTsK
LSNlbmRpZgotICAgIAotICAgIC8vIEZvciBXZWJQcm9jZXNzCi0gICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlIHNhbXBsZUxvZ1NhbmRib3hIYW5kbGU7ICAgIAotICAgIGRvdWJsZSBub3cgPSBX
VEY6OmN1cnJlbnRUaW1lKCk7Ci0gICAgU3RyaW5nIHNhbXBsZUxvZ0ZpbGVQYXRoID0gU3RyaW5n
Ojpmb3JtYXQoIldlYlByb2Nlc3MlbGx1Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25n
Pihub3cpKTsKLSAgICBzYW1wbGVMb2dGaWxlUGF0aCA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoc2FtcGxlTG9nRmlsZVBhdGgsIFNhbmRib3hFeHRlbnNp
b246OlJlYWRXcml0ZSwgc2FtcGxlTG9nU2FuZGJveEhhbmRsZSk7Ci0gICAgCi0gICAgc2VuZFRv
QWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdGFydE1lbW9yeVNhbXBsZXIoc2Ft
cGxlTG9nU2FuZGJveEhhbmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIGludGVydmFsKSk7Ci19Ci0K
LXZvaWQgV2ViQ29udGV4dDo6c3RvcE1lbW9yeVNhbXBsZXIoKQoteyAgICAKLSAgICAvLyBGb3Ig
V2ViUHJvY2VzcwotICAgIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQgPSBmYWxzZTsKLSAgICAKLSAg
ICAvLyBGb3IgVUlQcm9jZXNzCi0jaWYgRU5BQkxFKE1FTU9SWV9TQU1QTEVSKQotICAgIFdlYk1l
bW9yeVNhbXBsZXI6OnNoYXJlZCgpLT5zdG9wKCk7Ci0jZW5kaWYKLQotICAgIHNlbmRUb0FsbFBy
b2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3RvcE1lbW9yeVNhbXBsZXIoKSk7Ci19Ci0K
LVN0cmluZyBXZWJDb250ZXh0OjphcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkgY29uc3QKLXsK
LSAgICBpZiAoIW1fb3ZlcnJpZGVBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5LmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIG1fb3ZlcnJpZGVBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5OwotCi0g
ICAgcmV0dXJuIHBsYXRmb3JtRGVmYXVsdEFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoKTsKLX0K
LQotdm9pZCBXZWJDb250ZXh0OjpzZXRJY29uRGF0YWJhc2VQYXRoKGNvbnN0IFN0cmluZyYgcGF0
aCkKLXsKLSAgICBtX292ZXJyaWRlSWNvbkRhdGFiYXNlUGF0aCA9IHBhdGg7Ci0gICAgaWYgKCFt
X292ZXJyaWRlSWNvbkRhdGFiYXNlUGF0aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gVGhpcyBp
bXBsaWNpdGx5IGVuYWJsZXMgdGhlIGRhdGFiYXNlIG9uIFVJIHByb2Nlc3Mgc2lkZS4KLSAgICAg
ICAgbV9pY29uRGF0YWJhc2UtPnNldERhdGFiYXNlUGF0aChwYXRoKTsKLSAgICB9Ci19Ci0KLVN0
cmluZyBXZWJDb250ZXh0OjppY29uRGF0YWJhc2VQYXRoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
b3ZlcnJpZGVJY29uRGF0YWJhc2VQYXRoLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbV9vdmVy
cmlkZUljb25EYXRhYmFzZVBhdGg7Ci0KLSAgICByZXR1cm4gcGxhdGZvcm1EZWZhdWx0SWNvbkRh
dGFiYXNlUGF0aCgpOwotfQotCi1TdHJpbmcgV2ViQ29udGV4dDo6ZGlza0NhY2hlRGlyZWN0b3J5
KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fb3ZlcnJpZGVEaXNrQ2FjaGVEaXJlY3RvcnkuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gbV9vdmVycmlkZURpc2tDYWNoZURpcmVjdG9yeTsKLQotICAg
IHJldHVybiBwbGF0Zm9ybURlZmF1bHREaXNrQ2FjaGVEaXJlY3RvcnkoKTsKLX0KLQotU3RyaW5n
IFdlYkNvbnRleHQ6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdAotewotICAgIGlmICgh
bV9vdmVycmlkZUNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gbV9vdmVycmlkZUNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7Ci0KLSAgICByZXR1cm4gcGxhdGZv
cm1EZWZhdWx0Q29va2llU3RvcmFnZURpcmVjdG9yeSgpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6
OnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpCi17Ci0gICAgQVNTRVJUKG1fcHJvY2Vzc2VzLmlz
RW1wdHkoKSk7Ci0jaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLSAgICBBU1NFUlQoIW1fbmV0
d29ya1Byb2Nlc3MpOwotCi0gICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCi0gICAgICAgIHJldHVy
bjsKLSNlbmRpZgotCi0gICAgaWYgKCFtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uID0gdHJ1ZTsKLX0K
LQotdm9pZCBXZWJDb250ZXh0OjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3Qo
Y29uc3QgV2ViQ2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBob3N0
KQotewotI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCi0gICAgaWYgKG1fdXNlc05ldHdvcmtQ
cm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MpIHsKLSAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmlj
YXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAwKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0jaWYgVVNFKFNPVVApCi0gICAgbV9wcm9j
ZXNzZXNbMF0tPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAw
KTsKLSAgICByZXR1cm47Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjZXJ0aWZpY2F0ZSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGhvc3QpOwotI2VuZGlmCi0KLSNpZiAhUExBVEZPUk0oSU9TKQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViQ29udGV4dDo6c2V0
SFRUUFBpcGVsaW5pbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSNpZiBQTEFURk9STShDT0NP
QSkKLSAgICBSZXNvdXJjZVJlcXVlc3Q6OnNldEhUVFBQaXBlbGluaW5nRW5hYmxlZChlbmFibGVk
KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOwotI2VuZGlmCi19Ci0KLWJvb2wg
V2ViQ29udGV4dDo6aHR0cFBpcGVsaW5pbmdFbmFibGVkKCkgY29uc3QKLXsKLSNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0OjpodHRwUGlwZWxpbmluZ0VuYWJs
ZWQoKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLXZvaWQgV2ViQ29u
dGV4dDo6Z2V0U3RhdGlzdGljcyh1aW50MzJfdCBzdGF0aXN0aWNzTWFzaywgc3RkOjpmdW5jdGlv
bjx2b2lkIChJbW11dGFibGVEaWN0aW9uYXJ5KiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxi
YWNrRnVuY3Rpb24pCi17Ci0gICAgaWYgKCFzdGF0aXN0aWNzTWFzaykgewotICAgICAgICBjYWxs
YmFja0Z1bmN0aW9uKG51bGxwdHIsIENhbGxiYWNrQmFzZTo6RXJyb3I6OlVua25vd24pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPFN0YXRpc3RpY3NSZXF1ZXN0PiByZXF1
ZXN0ID0gU3RhdGlzdGljc1JlcXVlc3Q6OmNyZWF0ZShEaWN0aW9uYXJ5Q2FsbGJhY2s6OmNyZWF0
ZShXVEY6Om1vdmUoY2FsbGJhY2tGdW5jdGlvbikpKTsKLQotICAgIGlmIChzdGF0aXN0aWNzTWFz
ayAmIFN0YXRpc3RpY3NSZXF1ZXN0VHlwZVdlYkNvbnRlbnQpCi0gICAgICAgIHJlcXVlc3RXZWJD
b250ZW50U3RhdGlzdGljcyhyZXF1ZXN0LmdldCgpKTsKLSAgICAKLSAgICBpZiAoc3RhdGlzdGlj
c01hc2sgJiBTdGF0aXN0aWNzUmVxdWVzdFR5cGVOZXR3b3JraW5nKQotICAgICAgICByZXF1ZXN0
TmV0d29ya2luZ1N0YXRpc3RpY3MocmVxdWVzdC5nZXQoKSk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4
dDo6cmVxdWVzdFdlYkNvbnRlbnRTdGF0aXN0aWNzKFN0YXRpc3RpY3NSZXF1ZXN0KiByZXF1ZXN0
KQotewotICAgIGlmIChtX3Byb2Nlc3NNb2RlbCA9PSBQcm9jZXNzTW9kZWxTaGFyZWRTZWNvbmRh
cnlQcm9jZXNzKSB7Ci0gICAgICAgIGlmIChtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSByZXF1
ZXN0LT5hZGRPdXRzdGFuZGluZ1JlcXVlc3QoKTsKLSAgICAgICAgbV9zdGF0aXN0aWNzUmVxdWVz
dHMuc2V0KHJlcXVlc3RJRCwgcmVxdWVzdCk7Ci0gICAgICAgIG1fcHJvY2Vzc2VzWzBdLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpHZXRXZWJDb3JlU3RhdGlzdGljcyhyZXF1ZXN0SUQpLCAw
KTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEZJWE1FIChNdWx0aS1XZWJQcm9jZXNzKSA8
cmRhcjovL3Byb2JsZW0vMTMyMDAwNTk+OiBNYWtlIGdldHRpbmcgc3RhdGlzdGljcyBmcm9tIG11
bHRpcGxlIFdlYlByb2Nlc3NlcyB3b3JrLgotICAgIH0KLX0KLQotdm9pZCBXZWJDb250ZXh0Ojpy
ZXF1ZXN0TmV0d29ya2luZ1N0YXRpc3RpY3MoU3RhdGlzdGljc1JlcXVlc3QqIHJlcXVlc3QpCi17
Ci0gICAgYm9vbCBuZXR3b3JrUHJvY2Vzc1VuYXZhaWxhYmxlOwotI2lmIEVOQUJMRShORVRXT1JL
X1BST0NFU1MpCi0gICAgbmV0d29ya1Byb2Nlc3NVbmF2YWlsYWJsZSA9ICFtX3VzZXNOZXR3b3Jr
UHJvY2VzcyB8fCAhbV9uZXR3b3JrUHJvY2VzczsKLSNlbHNlCi0gICAgbmV0d29ya1Byb2Nlc3NV
bmF2YWlsYWJsZSA9IHRydWU7Ci0jZW5kaWYKLQotICAgIGlmIChuZXR3b3JrUHJvY2Vzc1VuYXZh
aWxhYmxlKSB7Ci0gICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBnZXQgTmV0d29ya1Byb2Nl
c3Mgc3RhdGlzdGljcyBidXQgdGhlIE5ldHdvcmtQcm9jZXNzIGlzIHVuYXZhaWxhYmxlIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotICAg
IHVpbnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVlc3QtPmFkZE91dHN0YW5kaW5nUmVxdWVzdCgpOwot
ICAgIG1fc3RhdGlzdGljc1JlcXVlc3RzLnNldChyZXF1ZXN0SUQsIHJlcXVlc3QpOwotICAgIG1f
bmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpHZXROZXR3b3Jr
UHJvY2Vzc1N0YXRpc3RpY3MocmVxdWVzdElEKSwgMCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShyZXF1ZXN0KTsKLSNlbmRpZgotfQotCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotdm9pZCBXZWJD
b250ZXh0OjpkdW1teShib29sJikKLXsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkNvbnRleHQ6OmRp
ZEdldFN0YXRpc3RpY3MoY29uc3QgU3RhdGlzdGljc0RhdGEmIHN0YXRpc3RpY3NEYXRhLCB1aW50
NjRfdCByZXF1ZXN0SUQpCi17Ci0gICAgUmVmUHRyPFN0YXRpc3RpY3NSZXF1ZXN0PiByZXF1ZXN0
ID0gbV9zdGF0aXN0aWNzUmVxdWVzdHMudGFrZShyZXF1ZXN0SUQpOwotICAgIGlmICghcmVxdWVz
dCkgewotICAgICAgICBMT0dfRVJST1IoIkNhbm5vdCByZXBvcnQgbmV0d29ya2luZyBzdGF0aXN0
aWNzLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVxdWVzdC0+Y29tcGxldGVk
UmVxdWVzdChyZXF1ZXN0SUQsIHN0YXRpc3RpY3NEYXRhKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0
OjpnYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzKCkKLXsKLSAgICBzZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVj
dHMoKSk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0
b3JUaW1lckVuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNz
YWdlczo6V2ViUHJvY2Vzczo6U2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJs
ZWQoZmxhZykpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OmFkZFBsdWdJbkF1dG9TdGFydE9yaWdp
bkhhc2goY29uc3QgU3RyaW5nJiBwYWdlT3JpZ2luLCB1bnNpZ25lZCBwbHVnSW5PcmlnaW5IYXNo
LCBTZXNzaW9uSUQgc2Vzc2lvbklEKQotewotICAgIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIu
YWRkQXV0b1N0YXJ0T3JpZ2luSGFzaChwYWdlT3JpZ2luLCBwbHVnSW5PcmlnaW5IYXNoLCBzZXNz
aW9uSUQpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OnBsdWdJbkRpZFJlY2VpdmVVc2VySW50ZXJh
Y3Rpb24odW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCwgU2Vzc2lvbklEIHNlc3Npb25JRCkKLXsK
LSAgICBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24o
cGx1Z0luT3JpZ2luSGFzaCwgc2Vzc2lvbklEKTsKLX0KLQotUGFzc1JlZlB0cjxJbW11dGFibGVE
aWN0aW9uYXJ5PiBXZWJDb250ZXh0OjpwbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKSBjb25z
dAotewotICAgIHJldHVybiBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmF1dG9TdGFydE9yaWdp
bnNUYWJsZUNvcHkoKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpzZXRQbHVnSW5BdXRvU3RhcnRP
cmlnaW5IYXNoZXMoSW1tdXRhYmxlRGljdGlvbmFyeSYgZGljdGlvbmFyeSkKLXsKLSAgICBtX3Bs
dWdJbkF1dG9TdGFydFByb3ZpZGVyLnNldEF1dG9TdGFydE9yaWdpbnNUYWJsZShkaWN0aW9uYXJ5
KTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpzZXRQbHVnSW5BdXRvU3RhcnRPcmlnaW5zKEFQSTo6
QXJyYXkmIGFycmF5KQotewotICAgIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuc2V0QXV0b1N0
YXJ0T3JpZ2luc0FycmF5KGFycmF5KTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpzZXRQbHVnSW5B
dXRvU3RhcnRPcmlnaW5zRmlsdGVyaW5nT3V0RW50cmllc0FkZGVkQWZ0ZXJUaW1lKEltbXV0YWJs
ZURpY3Rpb25hcnkmIGRpY3Rpb25hcnksIGRvdWJsZSB0aW1lKQotewotICAgIG1fcGx1Z0luQXV0
b1N0YXJ0UHJvdmlkZXIuc2V0QXV0b1N0YXJ0T3JpZ2luc0ZpbHRlcmluZ091dEVudHJpZXNBZGRl
ZEFmdGVyVGltZShkaWN0aW9uYXJ5LCB0aW1lKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpyZWdp
c3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYgc2NoZW1lKQotewotICAg
IHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpDdXN0b21Qcm90b2NvbE1hbmFnZXI6
OlJlZ2lzdGVyU2NoZW1lKHNjaGVtZSkpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OnVucmVnaXN0
ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmIHNjaGVtZSkKLXsKLSAgICBz
ZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyOjpV
bnJlZ2lzdGVyU2NoZW1lKHNjaGVtZSkpOwotfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCi12b2lkIFdlYkNvbnRleHQ6OnBsdWdpbkluZm9TdG9yZURpZExvYWRQbHVnaW5zKFBs
dWdpbkluZm9TdG9yZSogc3RvcmUpCi17Ci0jaWZkZWYgTkRFQlVHCi0gICAgVU5VU0VEX1BBUkFN
KHN0b3JlKTsKLSNlbmRpZgotICAgIEFTU0VSVChzdG9yZSA9PSAmbV9wbHVnaW5JbmZvU3RvcmUp
OwotCi0gICAgVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+IHBsdWdpbk1vZHVsZXMgPSBtX3BsdWdp
bkluZm9TdG9yZS5wbHVnaW5zKCk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4g
cGx1Z2luczsKLSAgICBwbHVnaW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGx1Z2luTW9kdWxl
cy5zaXplKCkpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW5Nb2R1bGUgOiBwbHVnaW5N
b2R1bGVzKSB7Ci0gICAgICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGUgbWFwOwotICAg
ICAgICBtYXAuc2V0KEFTQ0lJTGl0ZXJhbCgicGF0aCIpLCBBUEk6OlN0cmluZzo6Y3JlYXRlKHBs
dWdpbk1vZHVsZS5wYXRoKSk7Ci0gICAgICAgIG1hcC5zZXQoQVNDSUlMaXRlcmFsKCJuYW1lIiks
IEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luTW9kdWxlLmluZm8ubmFtZSkpOwotICAgICAgICBt
YXAuc2V0KEFTQ0lJTGl0ZXJhbCgiZmlsZSIpLCBBUEk6OlN0cmluZzo6Y3JlYXRlKHBsdWdpbk1v
ZHVsZS5pbmZvLmZpbGUpKTsKLSAgICAgICAgbWFwLnNldChBU0NJSUxpdGVyYWwoImRlc2MiKSwg
QVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVnaW5Nb2R1bGUuaW5mby5kZXNjKSk7Ci0KLSAgICAgICAg
VmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IG1pbWVUeXBlczsKLSAgICAgICAgbWltZVR5cGVz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGx1Z2luTW9kdWxlLmluZm8ubWltZXMuc2l6ZSgpKTsK
LSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBtaW1lQ2xhc3NJbmZvIDogcGx1Z2luTW9kdWxlLmlu
Zm8ubWltZXMpCi0gICAgICAgICAgICBtaW1lVHlwZXMudW5jaGVja2VkQXBwZW5kKEFQSTo6U3Ry
aW5nOjpjcmVhdGUobWltZUNsYXNzSW5mby50eXBlKSk7Ci0gICAgICAgIG1hcC5zZXQoQVNDSUlM
aXRlcmFsKCJtaW1lcyIpLCBBUEk6OkFycmF5OjpjcmVhdGUoV1RGOjptb3ZlKG1pbWVUeXBlcykp
KTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgICAgICBtYXAuc2V0KEFTQ0lJTGl0ZXJhbCgi
YnVuZGxlSWQiKSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVnaW5Nb2R1bGUuYnVuZGxlSWRlbnRp
ZmllcikpOwotICAgICAgICBtYXAuc2V0KEFTQ0lJTGl0ZXJhbCgidmVyc2lvbiIpLCBBUEk6OlN0
cmluZzo6Y3JlYXRlKHBsdWdpbk1vZHVsZS52ZXJzaW9uU3RyaW5nKSk7Ci0jZW5kaWYKLQotICAg
ICAgICBwbHVnaW5zLnVuY2hlY2tlZEFwcGVuZChJbW11dGFibGVEaWN0aW9uYXJ5OjpjcmVhdGUo
V1RGOjptb3ZlKG1hcCkpKTsKLSAgICB9Ci0KLSAgICBtX2NsaWVudC5wbHVnSW5JbmZvcm1hdGlv
bkJlY2FtZUF2YWlsYWJsZSh0aGlzLCBBUEk6OkFycmF5OjpjcmVhdGUoV1RGOjptb3ZlKHBsdWdp
bnMpKS5nZXQoKSk7Ci19Ci0jZW5kaWYKLSAgICAKLXZvaWQgV2ViQ29udGV4dDo6c2V0TWVtb3J5
Q2FjaGVEaXNhYmxlZChib29sIGRpc2FibGVkKQotewotICAgIG1fbWVtb3J5Q2FjaGVEaXNhYmxl
ZCA9IGRpc2FibGVkOwotICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vz
czo6U2V0TWVtb3J5Q2FjaGVEaXNhYmxlZChkaXNhYmxlZCkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAkocmV2aXNp
b24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2OTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwg
MjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgV2ViQ29udGV4dF9oCi0jZGVmaW5lIFdlYkNvbnRleHRfaAotCi0jaW5jbHVk
ZSAiQVBJT2JqZWN0LmgiCi0jaW5jbHVkZSAiRG93bmxvYWRQcm94eU1hcC5oIgotI2luY2x1ZGUg
IkdlbmVyaWNDYWxsYmFjay5oIgotI2luY2x1ZGUgIkltbXV0YWJsZURpY3Rpb25hcnkuaCIKLSNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKLSNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAu
aCIKLSNpbmNsdWRlICJQbHVnSW5BdXRvU3RhcnRQcm92aWRlci5oIgotI2luY2x1ZGUgIlBsdWdp
bkluZm9TdG9yZS5oIgotI2luY2x1ZGUgIlByb2Nlc3NNb2RlbC5oIgotI2luY2x1ZGUgIlByb2Nl
c3NUaHJvdHRsZXIuaCIKLSNpbmNsdWRlICJTdGF0aXN0aWNzUmVxdWVzdC5oIgotI2luY2x1ZGUg
IlN0b3JhZ2VNYW5hZ2VyLmgiCi0jaW5jbHVkZSAiVmlzaXRlZExpbmtQcm92aWRlci5oIgotI2lu
Y2x1ZGUgIldlYkNvbnRleHRDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJDb250ZXh0Q29ubmVjdGlv
bkNsaWVudC5oIgotI2luY2x1ZGUgIldlYkNvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudC5oIgot
I2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTGlua0hhc2gu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JRC5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKERBVEFCQVNF
X1BST0NFU1MpCi0jaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzUHJveHkuaCIKLSNlbmRpZgotCi0j
aWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLSNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc1Byb3h5
LmgiCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotT0JKQ19DTEFTUyBOU011dGFibGVE
aWN0aW9uYXJ5OwotT0JKQ19DTEFTUyBOU09iamVjdDsKLU9CSkNfQ0xBU1MgTlNTdHJpbmc7Ci0j
ZW5kaWYKLQotbmFtZXNwYWNlIEFQSSB7Ci1jbGFzcyBEb3dubG9hZENsaWVudDsKLWNsYXNzIExl
Z2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgRG93bmxvYWRQcm94eTsKLWNsYXNzIFdlYkNvbnRleHRTdXBwbGVtZW50OwotY2xhc3MgV2Vi
SWNvbkRhdGFiYXNlOwotY2xhc3MgV2ViUGFnZUdyb3VwOwotY2xhc3MgV2ViUGFnZVByb3h5Owot
c3RydWN0IFN0YXRpc3RpY3NEYXRhOwotc3RydWN0IFdlYlBhZ2VDb25maWd1cmF0aW9uOwotc3Ry
dWN0IFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7Ci0gICAgCi10eXBlZGVmIEdlbmVyaWND
YWxsYmFjazxJbW11dGFibGVEaWN0aW9uYXJ5Kj4gRGljdGlvbmFyeUNhbGxiYWNrOwotCi0jaWYg
RU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLXN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVyczsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi1pbnQgbmV0d29ya1Byb2Nl
c3NMYXRlbmN5UU9TKCk7Ci1pbnQgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCk7Ci1pbnQg
d2ViUHJvY2Vzc0xhdGVuY3lRT1MoKTsKLWludCB3ZWJQcm9jZXNzVGhyb3VnaHB1dFFPUygpOwot
I2VuZGlmCi0KLXN0cnVjdCBXZWJDb250ZXh0Q29uZmlndXJhdGlvbiB7Ci0gICAgU3RyaW5nIGlu
amVjdGVkQnVuZGxlUGF0aDsKLSAgICBTdHJpbmcgbG9jYWxTdG9yYWdlRGlyZWN0b3J5OwotICAg
IFN0cmluZyB3ZWJTUUxEYXRhYmFzZURpcmVjdG9yeTsKLSAgICBTdHJpbmcgaW5kZXhlZERCRGF0
YWJhc2VEaXJlY3Rvcnk7Ci0gICAgU3RyaW5nIG1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnk7Ci19
OwotCi1jbGFzcyBXZWJDb250ZXh0IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVj
dDo6VHlwZTo6Q29udGV4dD4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIKLSNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICAsIHByaXZhdGUgUGx1Z2luSW5mb1N0b3JlQ2xp
ZW50Ci0jZW5kaWYKLSAgICB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9y
bVNwZWNpZmljQ29uZmlndXJhdGlvbkRlZmF1bHRzKFdlYkNvbnRleHRDb25maWd1cmF0aW9uJik7
Ci0KLSAgICBXZWJDb250ZXh0KFdlYkNvbnRleHRDb25maWd1cmF0aW9uKTsKLSAgICAgICAgCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ29udGV4dD4gY3JlYXRlKFdlYkNvbnRleHRDb25maWd1
cmF0aW9uKTsKLSAgICB2aXJ0dWFsIH5XZWJDb250ZXh0KCk7Ci0KLSAgICBzdGF0aWMgY29uc3Qg
VmVjdG9yPFdlYkNvbnRleHQqPiYgYWxsQ29udGV4dHMoKTsKLQotICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotICAgIFQqIHN1cHBsZW1lbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFQqPihtX3N1cHBsZW1lbnRzLmdldChUOjpzdXBwbGVtZW50TmFtZSgpKSk7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBhZGRTdXBwbGVtZW50KCkK
LSAgICB7Ci0gICAgICAgIG1fc3VwcGxlbWVudHMuYWRkKFQ6OnN1cHBsZW1lbnROYW1lKCksIFQ6
OmNyZWF0ZSh0aGlzKSk7Ci0gICAgfQotCi0gICAgdm9pZCBhZGRNZXNzYWdlUmVjZWl2ZXIoSVBD
OjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2
ZXImKTsKLSAgICB2b2lkIGFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBt
ZXNzYWdlUmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciYpOwotICAgIHZvaWQgcmVtb3ZlTWVzc2FnZVJlY2VpdmVyKElQQzo6U3RyaW5nUmVm
ZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQpOwotCi0g
ICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiwgSVBDOjpNZXNzYWdlRGVj
b2RlciYpOwotICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qLCBJ
UEM6Ok1lc3NhZ2VEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+
Jik7Ci0KLSAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb250ZXh0Q2xpZW50QmFz
ZSopOwotICAgIHZvaWQgaW5pdGlhbGl6ZUluamVjdGVkQnVuZGxlQ2xpZW50KGNvbnN0IFdLQ29u
dGV4dEluamVjdGVkQnVuZGxlQ2xpZW50QmFzZSopOwotICAgIHZvaWQgaW5pdGlhbGl6ZUNvbm5l
Y3Rpb25DbGllbnQoY29uc3QgV0tDb250ZXh0Q29ubmVjdGlvbkNsaWVudEJhc2UqKTsKLSAgICB2
b2lkIHNldEhpc3RvcnlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhp
c3RvcnlDbGllbnQ+KTsKLSAgICB2b2lkIHNldERvd25sb2FkQ2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkRvd25sb2FkQ2xpZW50Pik7Ci0KLSAgICB2b2lkIHNldFByb2Nlc3NNb2RlbChQcm9j
ZXNzTW9kZWwpOyAvLyBDYW4gb25seSBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gcHJvY2Vz
c2VzIHJ1bm5pbmcuCi0gICAgUHJvY2Vzc01vZGVsIHByb2Nlc3NNb2RlbCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvY2Vzc01vZGVsOyB9Ci0KLSAgICB2b2lkIHNldE1heGltdW1OdW1iZXJPZlByb2Nl
c3Nlcyh1bnNpZ25lZCk7IC8vIENhbiBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyBw
cm9jZXNzZXMgcnVubmluZy4KLSAgICB1bnNpZ25lZCBtYXhpbXVtTnVtYmVyT2ZQcm9jZXNzZXMo
KSBjb25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NDb3VudExpbWl0OyB9Ci0KLSAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4+JiBwcm9jZXNzZXMoKSBjb25zdCB7IHJldHVy
biBtX3Byb2Nlc3NlczsgfQotCi0gICAgLy8gV2ViUHJvY2VzcyBvciBOZXR3b3JrUHJvY2VzcyBh
cyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4gVGhlIGNvbm5lY3Rpb24g
bXVzdCBiZSBub24tbnVsbC4KLSAgICBJUEM6OkNvbm5lY3Rpb24qIG5ldHdvcmtpbmdQcm9jZXNz
Q29ubmVjdGlvbigpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9BbGxQ
cm9jZXNzZXMoY29uc3QgVCYgbWVzc2FnZSk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9p
ZCBzZW5kVG9BbGxQcm9jZXNzZXNSZWxhdW5jaGluZ1RoZW1JZk5lY2Vzc2FyeShjb25zdCBUJiBt
ZXNzYWdlKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb09uZVByb2Nlc3Mo
VCYmIG1lc3NhZ2UpOwotCi0gICAgLy8gU2VuZHMgdGhlIG1lc3NhZ2UgdG8gV2ViUHJvY2VzcyBv
ciBOZXR3b3JrUHJvY2VzcyBhcyBhcHByb3BvcmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2Rl
bC4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNz
KFQmJiBtZXNzYWdlKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHNlbmRUb05ldHdv
cmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSk7Ci0KLSAgICAv
LyBTZW5kcyB0aGUgbWVzc2FnZSB0byBXZWJQcm9jZXNzIG9yIERhdGFiYXNlUHJvY2VzcyBhcyBh
cHByb3BvcmlhdGUgZm9yIGN1cnJlbnQgcHJvY2VzcyBtb2RlbC4KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB2b2lkIHNlbmRUb0RhdGFiYXNlUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3Nhcnko
VCYmIG1lc3NhZ2UpOwotCi0gICAgdm9pZCBwcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9uKFdlYlBy
b2Nlc3NQcm94eSopOwotICAgIHZvaWQgcHJvY2Vzc1dpbGxDbG9zZUNvbm5lY3Rpb24oV2ViUHJv
Y2Vzc1Byb3h5Kik7Ci0gICAgdm9pZCBwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdlYlByb2Nl
c3NQcm94eSopOwotCi0gICAgdm9pZCBhcHBsaWNhdGlvbldpbGxUZXJtaW5hdGUoKTsKLSAgICAv
LyBEaXNjb25uZWN0IHRoZSBwcm9jZXNzIGZyb20gdGhlIGNvbnRleHQuCi0gICAgdm9pZCBkaXNj
b25uZWN0UHJvY2VzcyhXZWJQcm9jZXNzUHJveHkqKTsKLQotICAgIFN0b3JhZ2VNYW5hZ2VyJiBz
dG9yYWdlTWFuYWdlcigpIGNvbnN0IHsgcmV0dXJuICptX3N0b3JhZ2VNYW5hZ2VyOyB9Ci0KLSAg
ICBQYXNzUmVmUHRyPFdlYlBhZ2VQcm94eT4gY3JlYXRlV2ViUGFnZShQYWdlQ2xpZW50JiwgV2Vi
UGFnZUNvbmZpZ3VyYXRpb24pOwotCi0gICAgY29uc3QgU3RyaW5nJiBpbmplY3RlZEJ1bmRsZVBh
dGgoKSBjb25zdCB7IHJldHVybiBtX2luamVjdGVkQnVuZGxlUGF0aDsgfQotCi0gICAgRG93bmxv
YWRQcm94eSogZG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgRG93bmxvYWRQcm94eSogcmVzdW1lRG93bmxv
YWQoY29uc3QgQVBJOjpEYXRhKiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpOwotCi0g
ICAgdm9pZCBzZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGEoUGFzc1JlZlB0
cjxBUEk6Ok9iamVjdD4gdXNlckRhdGEpIHsgbV9pbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9u
VXNlckRhdGEgPSB1c2VyRGF0YTsgfQotCi0gICAgdm9pZCBwb3N0TWVzc2FnZVRvSW5qZWN0ZWRC
dW5kbGUoY29uc3QgU3RyaW5nJiwgQVBJOjpPYmplY3QqKTsKLQotICAgIC8vIEluamVjdGVkQnVu
ZGxlIGNsaWVudAotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUo
Y29uc3QgU3RyaW5nJiwgQVBJOjpPYmplY3QqKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVTeW5jaHJv
bm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoY29uc3QgU3RyaW5nJiwgQVBJOjpPYmplY3Qq
LCBSZWZQdHI8QVBJOjpPYmplY3Q+JiByZXR1cm5EYXRhKTsKLQotICAgIHZvaWQgcG9wdWxhdGVW
aXNpdGVkTGlua3MoKTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHZv
aWQgc2V0QWRkaXRpb25hbFBsdWdpbnNEaXJlY3RvcnkoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBQ
bHVnaW5JbmZvU3RvcmUmIHBsdWdpbkluZm9TdG9yZSgpIHsgcmV0dXJuIG1fcGx1Z2luSW5mb1N0
b3JlOyB9Ci0jZW5kaWYKLQotICAgIHZvaWQgc2V0QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBh
dGgoYm9vbCk7Ci0gICAgdm9pZCBzZXRTaG91bGRVc2VGb250U21vb3RoaW5nKGJvb2wpOwotICAg
IAotICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0VtcHR5RG9jdW1lbnQoY29uc3QgU3RyaW5n
Jik7Ci0gICAgdm9pZCByZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKGNvbnN0IFN0cmluZyYpOwot
ICAgIHZvaWQgc2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25zdCBT
dHJpbmcmKTsKLSAgICB2b2lkIHNldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9u
KGJvb2wpOwotICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKGNvbnN0IFN0cmluZyYp
OwotICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKGNvbnN0IFN0cmluZyYpOwot
ICAgIHZvaWQgcmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRlZChjb25zdCBTdHJpbmcm
KTsKLSAgICB2b2lkIHJlZ2lzdGVyVVJMU2NoZW1lQXNDT1JTRW5hYmxlZChjb25zdCBTdHJpbmcm
KTsKLSNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQotICAgIHZvaWQgcmVnaXN0ZXJVUkxT
Y2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5nJik7Ci0jZW5kaWYKLQotICAgIFZp
c2l0ZWRMaW5rUHJvdmlkZXImIHZpc2l0ZWRMaW5rUHJvdmlkZXIoKSB7IHJldHVybiAqbV92aXNp
dGVkTGlua1Byb3ZpZGVyOyB9Ci0KLSAgICAvLyBNZXNzYWdlUmVjZWl2ZXIuCi0gICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURl
Y29kZXImKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8
SVBDOjpNZXNzYWdlRW5jb2Rlcj4mKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0Q2FjaGVNb2Rl
bChDYWNoZU1vZGVsKTsKLSAgICBDYWNoZU1vZGVsIGNhY2hlTW9kZWwoKSBjb25zdCB7IHJldHVy
biBtX2NhY2hlTW9kZWw7IH0KLQotICAgIHZvaWQgc2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50
ZXJ2YWwoZG91YmxlKTsKLQotICAgIHZvaWQgc3RhcnRNZW1vcnlTYW1wbGVyKGNvbnN0IGRvdWJs
ZSBpbnRlcnZhbCk7Ci0gICAgdm9pZCBzdG9wTWVtb3J5U2FtcGxlcigpOwotCi0jaWYgVVNFKFNP
VVApCi0gICAgdm9pZCBzZXRJbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeShIVFRQQ29va2ll
QWNjZXB0UG9saWN5IHBvbGljeSkgeyBtX2luaXRpYWxIVFRQQ29va2llQWNjZXB0UG9saWN5ID0g
cG9saWN5OyB9Ci0jZW5kaWYKLSAgICB2b2lkIHNldEVuaGFuY2VkQWNjZXNzaWJpbGl0eShib29s
KTsKLSAgICAKLSAgICAvLyBEb3dubG9hZHMuCi0gICAgRG93bmxvYWRQcm94eSogY3JlYXRlRG93
bmxvYWRQcm94eShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKLSAgICBBUEk6OkRv
d25sb2FkQ2xpZW50JiBkb3dubG9hZENsaWVudCgpIHsgcmV0dXJuICptX2Rvd25sb2FkQ2xpZW50
OyB9Ci0KLSAgICBBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50JiBoaXN0b3J5Q2xpZW50
KCkgeyByZXR1cm4gKm1faGlzdG9yeUNsaWVudDsgfQotICAgIFdlYkNvbnRleHRDbGllbnQmIGNs
aWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9Ci0KLSAgICBXZWJJY29uRGF0YWJhc2UqIGljb25E
YXRhYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1faWNvbkRhdGFiYXNlLmdldCgpOyB9Ci0jaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgV2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyKiBw
bHVnaW5TaXRlRGF0YU1hbmFnZXIoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpblNpdGVEYXRhTWFu
YWdlci5nZXQoKTsgfQotI2VuZGlmCi0KLSAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7Ci0gICAgICAg
IHVuc2lnbmVkIHdrVmlld0NvdW50OwotICAgICAgICB1bnNpZ25lZCB3a1BhZ2VDb3VudDsKLSAg
ICAgICAgdW5zaWduZWQgd2tGcmFtZUNvdW50OwotICAgIH07Ci0gICAgc3RhdGljIFN0YXRpc3Rp
Y3MmIHN0YXRpc3RpY3MoKTsgICAgCi0KLSAgICB2b2lkIHNldEFwcGxpY2F0aW9uQ2FjaGVEaXJl
Y3RvcnkoY29uc3QgU3RyaW5nJiBkaXIpIHsgbV9vdmVycmlkZUFwcGxpY2F0aW9uQ2FjaGVEaXJl
Y3RvcnkgPSBkaXI7IH0KLSAgICB2b2lkIHNldEljb25EYXRhYmFzZVBhdGgoY29uc3QgU3RyaW5n
Jik7Ci0gICAgU3RyaW5nIGljb25EYXRhYmFzZVBhdGgoKSBjb25zdDsKLSAgICB2b2lkIHNldERp
c2tDYWNoZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcikgeyBtX292ZXJyaWRlRGlza0NhY2hl
RGlyZWN0b3J5ID0gZGlyOyB9Ci0gICAgdm9pZCBzZXRDb29raWVTdG9yYWdlRGlyZWN0b3J5KGNv
bnN0IFN0cmluZyYgZGlyKSB7IG1fb3ZlcnJpZGVDb29raWVTdG9yYWdlRGlyZWN0b3J5ID0gZGly
OyB9Ci0KLSAgICB2b2lkIHVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpOwotCi0gICAgdm9pZCBh
bGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJ
bmZvKiwgY29uc3QgU3RyaW5nJiBob3N0KTsKLQotICAgIFdlYlByb2Nlc3NQcm94eSYgZW5zdXJl
U2hhcmVkV2ViUHJvY2VzcygpOwotICAgIFdlYlByb2Nlc3NQcm94eSYgY3JlYXRlTmV3V2ViUHJv
Y2Vzc1Jlc3BlY3RpbmdQcm9jZXNzQ291bnRMaW1pdCgpOyAvLyBXaWxsIHJldHVybiBhbiBleGlz
dGluZyBvbmUgaWYgbGltaXQgaXMgbWV0LgotICAgIHZvaWQgd2FybUluaXRpYWxQcm9jZXNzKCk7
Ci0KLSAgICBib29sIHNob3VsZFRlcm1pbmF0ZShXZWJQcm9jZXNzUHJveHkqKTsKLQotICAgIHZv
aWQgZGlzYWJsZVByb2Nlc3NUZXJtaW5hdGlvbigpIHsgbV9wcm9jZXNzVGVybWluYXRpb25FbmFi
bGVkID0gZmFsc2U7IH0KLSAgICB2b2lkIGVuYWJsZVByb2Nlc3NUZXJtaW5hdGlvbigpOwotCi0g
ICAgLy8gRGVmYXVsdHMgdG8gZmFsc2UuCi0gICAgdm9pZCBzZXRIVFRQUGlwZWxpbmluZ0VuYWJs
ZWQoYm9vbCk7Ci0gICAgYm9vbCBodHRwUGlwZWxpbmluZ0VuYWJsZWQoKSBjb25zdDsKLQotICAg
IHZvaWQgZ2V0U3RhdGlzdGljcyh1aW50MzJfdCBzdGF0aXN0aWNzTWFzaywgc3RkOjpmdW5jdGlv
bjx2b2lkIChJbW11dGFibGVEaWN0aW9uYXJ5KiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKLSAg
ICAKLSAgICB2b2lkIGdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHMoKTsKLSAgICB2b2lk
IHNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGJvb2wgZmxhZyk7Ci0K
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBzdGF0aWMgYm9vbCBvbWl0UERGU3VwcG9ydCgpOwot
I2VuZGlmCi0KLSAgICB2b2lkIGZ1bGxLZXlib2FyZEFjY2Vzc01vZGVDaGFuZ2VkKGJvb2wgZnVs
bEtleWJvYXJkQWNjZXNzRW5hYmxlZCk7Ci0KLSAgICB2b2lkIHRleHRDaGVja2VyU3RhdGVDaGFu
Z2VkKCk7Ci0KLSAgICBQYXNzUmVmUHRyPEltbXV0YWJsZURpY3Rpb25hcnk+IHBsdWdJbkF1dG9T
dGFydE9yaWdpbkhhc2hlcygpIGNvbnN0OwotICAgIHZvaWQgc2V0UGx1Z0luQXV0b1N0YXJ0T3Jp
Z2luSGFzaGVzKEltbXV0YWJsZURpY3Rpb25hcnkmKTsKLSAgICB2b2lkIHNldFBsdWdJbkF1dG9T
dGFydE9yaWdpbnMoQVBJOjpBcnJheSYpOwotICAgIHZvaWQgc2V0UGx1Z0luQXV0b1N0YXJ0T3Jp
Z2luc0ZpbHRlcmluZ091dEVudHJpZXNBZGRlZEFmdGVyVGltZShJbW11dGFibGVEaWN0aW9uYXJ5
JiwgZG91YmxlIHRpbWUpOwotCi0gICAgLy8gTmV0d29yayBQcm9jZXNzIE1hbmFnZW1lbnQKLQot
ICAgIHZvaWQgc2V0VXNlc05ldHdvcmtQcm9jZXNzKGJvb2wpOwotICAgIGJvb2wgdXNlc05ldHdv
cmtQcm9jZXNzKCkgY29uc3Q7Ci0KLSNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotICAgIHZv
aWQgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKLSAgICBOZXR3b3JrUHJvY2Vzc1Byb3h5KiBuZXR3
b3JrUHJvY2VzcygpIHsgcmV0dXJuIG1fbmV0d29ya1Byb2Nlc3MuZ2V0KCk7IH0KLSAgICB2b2lk
IG5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5Kik7Ci0KLSAgICB2b2lk
IGdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihQYXNzUmVmUHRyPE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5Pik7Ci0j
ZW5kaWYKLQotI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQotICAgIHZvaWQgZW5zdXJlRGF0
YWJhc2VQcm9jZXNzKCk7Ci0gICAgdm9pZCBnZXREYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uKFBh
c3NSZWZQdHI8TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0RGF0YWJhc2VQcm9jZXNzQ29u
bmVjdGlvbjo6RGVsYXllZFJlcGx5Pik7Ci0gICAgdm9pZCBkYXRhYmFzZVByb2Nlc3NDcmFzaGVk
KERhdGFiYXNlUHJvY2Vzc1Byb3h5Kik7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgIGJvb2wgcHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpIGNvbnN0OwotI2VuZGlmCi0KLSAg
ICB2b2lkIHdpbmRvd1NlcnZlckNvbm5lY3Rpb25TdGF0ZUNoYW5nZWQoKTsKLQotICAgIHN0YXRp
YyB2b2lkIHdpbGxTdGFydFVzaW5nUHJpdmF0ZUJyb3dzaW5nKCk7Ci0gICAgc3RhdGljIHZvaWQg
d2lsbFN0b3BVc2luZ1ByaXZhdGVCcm93c2luZygpOwotCi0gICAgc3RhdGljIGJvb2wgaXNFcGhl
bWVyYWxTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCk7Ci0KLSNpZiBVU0UoU09VUCkKLSAgICB2
b2lkIHNldElnbm9yZVRMU0Vycm9ycyhib29sKTsKLSAgICBib29sIGlnbm9yZVRMU0Vycm9ycygp
IGNvbnN0IHsgcmV0dXJuIG1faWdub3JlVExTRXJyb3JzOyB9Ci0jZW5kaWYKLQotICAgIHN0YXRp
YyB2b2lkIHNldEludmFsaWRNZXNzYWdlQ2FsbGJhY2sodm9pZCAoKikoV0tTdHJpbmdSZWYpKTsK
LSAgICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoY29uc3QgSVBDOjpTdHJp
bmdSZWZlcmVuY2UmIG1lc3NhZ2VSZWNlaXZlck5hbWUsIGNvbnN0IElQQzo6U3RyaW5nUmVmZXJl
bmNlJiBtZXNzYWdlTmFtZSk7Ci0KLSAgICB2b2lkIHByb2Nlc3NEaWRDYWNoZVBhZ2UoV2ViUHJv
Y2Vzc1Byb3h5Kik7Ci0KLSAgICBib29sIGlzVVJMS25vd25IU1RTSG9zdChjb25zdCBTdHJpbmcm
IHVybFN0cmluZywgYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKSBjb25zdDsKLSAgICB2b2lk
IHJlc2V0SFNUU0hvc3RzKCk7Ci0KLSAgICB2b2lkIHJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9tUHJv
dG9jb2woY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9t
UHJvdG9jb2woY29uc3QgU3RyaW5nJik7Ci0KLSAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+JiBn
bG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKTsKLSAgICBzdGF0aWMg
dm9pZCByZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVy
cyhjb25zdCBTdHJpbmcmKTsKLSAgICBzdGF0aWMgdm9pZCB1bnJlZ2lzdGVyR2xvYmFsVVJMU2No
ZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYpOwotCi0jaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCB1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgp
OwotCi0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqZW5zdXJlQnVuZGxlUGFyYW1ldGVycygpOwot
ICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmJ1bmRsZVBhcmFtZXRlcnMoKSB7IHJldHVybiBtX2J1
bmRsZVBhcmFtZXRlcnMuZ2V0KCk7IH0KLSNlbHNlCi0gICAgdm9pZCB1cGRhdGVQcm9jZXNzU3Vw
cHJlc3Npb25TdGF0ZSgpIGNvbnN0IHsgfQotI2VuZGlmCi0KLSAgICB2b2lkIHNldE1lbW9yeUNh
Y2hlRGlzYWJsZWQoYm9vbCk7Ci0KLSAgICBVc2VyT2JzZXJ2YWJsZVBhZ2VUb2tlbiB1c2VyT2Jz
ZXJ2YWJsZVBhZ2VDb3VudCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV91c2VyT2JzZXJ2YWJs
ZVBhZ2VDb3VudGVyLnRva2VuPFVzZXJPYnNlcnZhYmxlUGFnZVRva2VuVHlwZT4oKTsKLSAgICB9
Ci0KLSAgICBQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2VuIHByb2Nlc3NTdXBwcmVzc2lv
bkRpc2FibGVkRm9yUGFnZUNvdW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Byb2Nlc3NT
dXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudG9rZW48UHJvY2Vzc1N1cHByZXNzaW9u
RGlzYWJsZWRUb2tlblR5cGU+KCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZvaWQgcGxhdGZv
cm1Jbml0aWFsaXplKCk7Ci0KLSAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3Mo
V2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYpOwotICAgIHZvaWQgcGxhdGZvcm1JbnZhbGlk
YXRlQ29udGV4dCgpOwotCi0gICAgV2ViUHJvY2Vzc1Byb3h5JiBjcmVhdGVOZXdXZWJQcm9jZXNz
KCk7Ci0KLSAgICB2b2lkIHJlcXVlc3RXZWJDb250ZW50U3RhdGlzdGljcyhTdGF0aXN0aWNzUmVx
dWVzdCopOwotICAgIHZvaWQgcmVxdWVzdE5ldHdvcmtpbmdTdGF0aXN0aWNzKFN0YXRpc3RpY3NS
ZXF1ZXN0Kik7Ci0KLSNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotICAgIHZvaWQgcGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmKTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIHZvaWQgd3JpdGVXZWJDb250
ZW50VG9QYXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRXZWJDb250ZW50Jik7Ci0g
ICAgdm9pZCB3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJ
bWFnZSYpOwotICAgIHZvaWQgd3JpdGVTdHJpbmdUb1Bhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCByZWFkU3RyaW5nRnJvbVBh
c3RlYm9hcmQodWludDY0X3QgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFdU
Rjo6U3RyaW5nJik7Ci0gICAgdm9pZCByZWFkVVJMRnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5k
ZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFN0cmluZyYpOwotICAgIHZvaWQgcmVh
ZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmRUeXBlLCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYsIHVpbnQ2NF90JiBzaXplKTsKLSAgICB2
b2lkIGdldFBhc3RlYm9hcmRJdGVtc0NvdW50KHVpbnQ2NF90JiBpdGVtc0NvdW50KTsKLSNlbmRp
ZgotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHZvaWQgZ2V0UGFzdGVib2FyZFR5cGVzKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMp
OwotICAgIHZvaWQgZ2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgVmVjdG9yPFN0cmlu
Zz4mIHBhdGhuYW1lcyk7Ci0gICAgdm9pZCBnZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBT
dHJpbmcmKTsKLSAgICB2b2lkIGdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFNoYXJlZE1l
bW9yeTo6SGFuZGxlJiwgdWludDY0X3QmIHNpemUpOwotICAgIHZvaWQgcGFzdGVib2FyZENvcHko
Y29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCwgY29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQs
IHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCk7Ci0gICAgdm9pZCBnZXRQYXN0ZWJvYXJkQ2hhbmdl
Q291bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgdWludDY0X3QmIGNoYW5nZUNvdW50
KTsKLSAgICB2b2lkIGdldFBhc3RlYm9hcmRVbmlxdWVOYW1lKFN0cmluZyYgcGFzdGVib2FyZE5h
bWUpOwotICAgIHZvaWQgZ2V0UGFzdGVib2FyZENvbG9yKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIFdlYkNvcmU6OkNvbG9yJik7Ci0gICAgdm9pZCBnZXRQYXN0ZWJvYXJkVVJMKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFdURjo6U3RyaW5nJik7Ci0gICAgdm9pZCBhZGRQYXN0
ZWJvYXJkVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KTsKLSAgICB2
b2lkIHNldFBhc3RlYm9hcmRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291
bnQpOwotICAgIHZvaWQgc2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhdGhuYW1lcywgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KTsKLSAgICB2
b2lkIHNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90
JiBuZXdDaGFuZ2VDb3VudCk7Ci0gICAgdm9pZCBzZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBl
LCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYsIHVpbnQ2NF90IHNpemUsIHVpbnQ2NF90JiBu
ZXdDaGFuZ2VDb3VudCk7Ci0jZW5kaWYKLQotI2lmICFQTEFURk9STShDT0NPQSkKLSAgICAvLyBG
SVhNRTogVGhpcyBhIGR1bW15IG1lc3NhZ2UsIHRvIGF2b2lkIGJyZWFraW5nIHRoZSBidWlsZCBm
b3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgcmVxdWlyZQotICAgIC8vIGFueSBzeW5jaHJvbm91cyBt
ZXNzYWdlcywgYW5kIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzg3NzUx
MTU+IGlzIGZpeGVkLgotICAgIHZvaWQgZHVtbXkoYm9vbCYpOwotI2VuZGlmCi0KLSAgICB2b2lk
IGRpZEdldFN0YXRpc3RpY3MoY29uc3QgU3RhdGlzdGljc0RhdGEmLCB1aW50NjRfdCBjYWxsYmFj
a0lEKTsKLQotICAgIC8vIEltcGxlbWVudGVkIGluIGdlbmVyYXRlZCBXZWJDb250ZXh0TWVzc2Fn
ZVJlY2VpdmVyLmNwcAotICAgIHZvaWQgZGlkUmVjZWl2ZVdlYkNvbnRleHRNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURlY29kZXImKTsKLSAgICB2b2lkIGRpZFJlY2VpdmVT
eW5jV2ViQ29udGV4dE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiwgSVBDOjpNZXNzYWdlRGVjb2Rl
ciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYpOwotCi0gICAgc3RhdGlj
IHZvaWQgbGFuZ3VhZ2VDaGFuZ2VkKHZvaWQqIGNvbnRleHQpOwotICAgIHZvaWQgbGFuZ3VhZ2VD
aGFuZ2VkKCk7Ci0KLSAgICBTdHJpbmcgYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgpIGNvbnN0
OwotICAgIFN0cmluZyBwbGF0Zm9ybURlZmF1bHRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkg
Y29uc3Q7Ci0KLSAgICBTdHJpbmcgcGxhdGZvcm1EZWZhdWx0SWNvbkRhdGFiYXNlUGF0aCgpIGNv
bnN0OwotCi0gICAgc3RhdGljIFN0cmluZyBwbGF0Zm9ybURlZmF1bHRMb2NhbFN0b3JhZ2VEaXJl
Y3RvcnkoKTsKLSAgICBzdGF0aWMgU3RyaW5nIHBsYXRmb3JtRGVmYXVsdEluZGV4ZWREQkRhdGFi
YXNlRGlyZWN0b3J5KCk7Ci0gICAgc3RhdGljIFN0cmluZyBwbGF0Zm9ybURlZmF1bHRXZWJTUUxE
YXRhYmFzZURpcmVjdG9yeSgpOwotICAgIHN0YXRpYyBTdHJpbmcgcGxhdGZvcm1EZWZhdWx0TWVk
aWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpOwotCi0gICAgU3RyaW5nIGRpc2tDYWNoZURpcmVjdG9y
eSgpIGNvbnN0OwotICAgIFN0cmluZyBwbGF0Zm9ybURlZmF1bHREaXNrQ2FjaGVEaXJlY3Rvcnko
KSBjb25zdDsKLQotICAgIFN0cmluZyBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCkgY29uc3Q7Ci0g
ICAgU3RyaW5nIHBsYXRmb3JtRGVmYXVsdENvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdDsK
LQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBTdHJpbmcgb3BlbkdMQ2FjaGVEaXJlY3RvcnkoKSBj
b25zdDsKLSAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5KCkgY29uc3Q7Ci0gICAgU3Ry
aW5nIG5ldHdvcmtpbmdIU1RTRGF0YWJhc2VQYXRoKCkgY29uc3Q7Ci0gICAgU3RyaW5nIHdlYkNv
bnRlbnRIU1RTRGF0YWJhc2VQYXRoKCkgY29uc3Q7Ci0gICAgU3RyaW5nIGNvbnRhaW5lclRlbXBv
cmFyeURpcmVjdG9yeSgpIGNvbnN0OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICB2b2lkIHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7Ci0gICAgdm9pZCB1bnJlZ2lz
dGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7Ci0jZW5kaWYKLQotICAgIHZvaWQgYWRkUGx1Z0lu
QXV0b1N0YXJ0T3JpZ2luSGFzaChjb25zdCBTdHJpbmcmIHBhZ2VPcmlnaW4sIHVuc2lnbmVkIHBs
dWdJbk9yaWdpbkhhc2gsIFdlYkNvcmU6OlNlc3Npb25JRCk7Ci0gICAgdm9pZCBwbHVnSW5EaWRS
ZWNlaXZlVXNlckludGVyYWN0aW9uKHVuc2lnbmVkIHBsdWdJbk9yaWdpbkhhc2gsIFdlYkNvcmU6
OlNlc3Npb25JRCk7Ci0KLSAgICB2b2lkIHNldEFueVBhZ2VHcm91cE1pZ2h0SGF2ZVByaXZhdGVC
cm93c2luZ0VuYWJsZWQoYm9vbCk7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
LSAgICAvLyBQbHVnaW5JbmZvU3RvcmVDbGllbnQ6Ci0gICAgdmlydHVhbCB2b2lkIHBsdWdpbklu
Zm9TdG9yZURpZExvYWRQbHVnaW5zKFBsdWdpbkluZm9TdG9yZSopIG92ZXJyaWRlOwotI2VuZGlm
Ci0KLSAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKLQot
ICAgIFByb2Nlc3NNb2RlbCBtX3Byb2Nlc3NNb2RlbDsKLSAgICB1bnNpZ25lZCBtX3dlYlByb2Nl
c3NDb3VudExpbWl0OyAvLyBUaGUgbGltaXQgaGFzIG5vIGVmZmVjdCB3aGVuIHByb2Nlc3MgbW9k
ZWwgaXMgUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2Vzcy4KLSAgICAKLSAgICBWZWN0
b3I8UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4+IG1fcHJvY2Vzc2VzOwotICAgIGJvb2wgbV9oYXZl
SW5pdGlhbEVtcHR5UHJvY2VzczsKLQotICAgIFdlYlByb2Nlc3NQcm94eSogbV9wcm9jZXNzV2l0
aFBhZ2VDYWNoZTsKLQotICAgIFJlZjxXZWJQYWdlR3JvdXA+IG1fZGVmYXVsdFBhZ2VHcm91cDsK
LQotICAgIFJlZlB0cjxBUEk6Ok9iamVjdD4gbV9pbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9u
VXNlckRhdGE7Ci0gICAgU3RyaW5nIG1faW5qZWN0ZWRCdW5kbGVQYXRoOwotICAgIFdlYkNvbnRl
eHRJbmplY3RlZEJ1bmRsZUNsaWVudCBtX2luamVjdGVkQnVuZGxlQ2xpZW50OwotCi0gICAgV2Vi
Q29udGV4dENsaWVudCBtX2NsaWVudDsKLSAgICBXZWJDb250ZXh0Q29ubmVjdGlvbkNsaWVudCBt
X2Nvbm5lY3Rpb25DbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6RG93bmxvYWRDbGll
bnQ+IG1fZG93bmxvYWRDbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29u
dGV4dEhpc3RvcnlDbGllbnQ+IG1faGlzdG9yeUNsaWVudDsKLQotI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQotICAgIFBsdWdpbkluZm9TdG9yZSBtX3BsdWdpbkluZm9TdG9yZTsKLSNl
bmRpZgotICAgIFJlZlB0cjxWaXNpdGVkTGlua1Byb3ZpZGVyPiBtX3Zpc2l0ZWRMaW5rUHJvdmlk
ZXI7Ci0gICAgYm9vbCBtX3Zpc2l0ZWRMaW5rc1BvcHVsYXRlZDsKLQotICAgIFBsdWdJbkF1dG9T
dGFydFByb3ZpZGVyIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI7Ci0gICAgICAgIAotICAgIEhh
c2hTZXQ8U3RyaW5nPiBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNFbXB0eURvY3VtZW50OwotICAgIEhh
c2hTZXQ8U3RyaW5nPiBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmU7Ci0gICAgSGFzaFNldDxT
dHJpbmc+IG1fc2NoZW1lc1RvU2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvcjsKLSAgICBI
YXNoU2V0PFN0cmluZz4gbV9zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWw7Ci0gICAgSGFzaFNldDxT
dHJpbmc+IG1fc2NoZW1lc1RvUmVnaXN0ZXJBc05vQWNjZXNzOwotICAgIEhhc2hTZXQ8U3RyaW5n
PiBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNEaXNwbGF5SXNvbGF0ZWQ7Ci0gICAgSGFzaFNldDxTdHJp
bmc+IG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0NPUlNFbmFibGVkOwotI2lmIEVOQUJMRShDQUNIRV9Q
QVJUSVRJT05JTkcpCi0gICAgSGFzaFNldDxTdHJpbmc+IG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0Nh
Y2hlUGFydGl0aW9uZWQ7Ci0jZW5kaWYKLQotICAgIGJvb2wgbV9hbHdheXNVc2VzQ29tcGxleFRl
eHRDb2RlUGF0aDsKLSAgICBib29sIG1fc2hvdWxkVXNlRm9udFNtb290aGluZzsKLQotICAgIC8v
IE1lc3NhZ2VzIHRoYXQgd2VyZSBwb3N0ZWQgYmVmb3JlIGFueSBwYWdlcyB3ZXJlIGNyZWF0ZWQu
Ci0gICAgLy8gVGhlIGNsaWVudCBzaG91bGQgdXNlIGluaXRpYWxpemF0aW9uIG1lc3NhZ2VzIGlu
c3RlYWQsIHNvIHRoYXQgYSByZXN0YXJ0ZWQgcHJvY2VzcyB3b3VsZCBnZXQgdGhlIHNhbWUgc3Rh
dGUuCi0gICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFJlZlB0cjxBUEk6Ok9iamVjdD4+PiBt
X21lc3NhZ2VzVG9JbmplY3RlZEJ1bmRsZVBvc3RlZFRvRW1wdHlDb250ZXh0OwotCi0gICAgQ2Fj
aGVNb2RlbCBtX2NhY2hlTW9kZWw7Ci0KLSAgICBib29sIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQ7
Ci0gICAgZG91YmxlIG1fbWVtb3J5U2FtcGxlckludGVydmFsOwotCi0gICAgUmVmUHRyPFdlYklj
b25EYXRhYmFzZT4gbV9pY29uRGF0YWJhc2U7Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCi0gICAgUmVmUHRyPFdlYlBsdWdpblNpdGVEYXRhTWFuYWdlcj4gbV9wbHVnaW5TaXRlRGF0
YU1hbmFnZXI7Ci0jZW5kaWYKLQotICAgIFJlZlB0cjxXZWJzaXRlRGF0YVN0b3JlPiBtX3dlYnNp
dGVEYXRhU3RvcmU7Ci0gICAgUmVmUHRyPFN0b3JhZ2VNYW5hZ2VyPiBtX3N0b3JhZ2VNYW5hZ2Vy
OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBSZWZQdHI8V2ViQ29udGV4dFN1
cHBsZW1lbnQ+LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gV2ViQ29udGV4dFN1cHBsZW1lbnRNYXA7
Ci0gICAgV2ViQ29udGV4dFN1cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKLQotI2lmIFVTRShT
T1VQKQotICAgIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgbV9pbml0aWFsSFRUUENvb2tpZUFjY2Vw
dFBvbGljeTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIFJldGFpblB0cjxOU09i
amVjdD4gbV9lbmhhbmNlZEFjY2Vzc2liaWxpdHlPYnNlcnZlcjsKLSAgICBSZXRhaW5QdHI8TlNP
YmplY3Q+IG1fYXV0b21hdGljVGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uT2JzZXJ2ZXI7Ci0g
ICAgUmV0YWluUHRyPE5TT2JqZWN0PiBtX2F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbk5vdGlm
aWNhdGlvbk9ic2VydmVyOwotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0g
MTA5MAotICAgIFJldGFpblB0cjxOU09iamVjdD4gbV9hdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlv
bk5vdGlmaWNhdGlvbk9ic2VydmVyOwotICAgIFJldGFpblB0cjxOU09iamVjdD4gbV9hdXRvbWF0
aWNEYXNoU3Vic3RpdHV0aW9uTm90aWZpY2F0aW9uT2JzZXJ2ZXI7Ci0jZW5kaWYKLSNlbmRpZgot
Ci0gICAgU3RyaW5nIG1fb3ZlcnJpZGVBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5OwotICAgIFN0
cmluZyBtX292ZXJyaWRlSWNvbkRhdGFiYXNlUGF0aDsKLSAgICBTdHJpbmcgbV9vdmVycmlkZURp
c2tDYWNoZURpcmVjdG9yeTsKLSAgICBTdHJpbmcgbV9vdmVycmlkZUNvb2tpZVN0b3JhZ2VEaXJl
Y3Rvcnk7Ci0KLSAgICBTdHJpbmcgbV93ZWJTUUxEYXRhYmFzZURpcmVjdG9yeTsKLSAgICBTdHJp
bmcgbV9pbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeTsKLSAgICBTdHJpbmcgbV9tZWRpYUtleXNT
dG9yYWdlRGlyZWN0b3J5OwotCi0gICAgYm9vbCBtX3Nob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vz
c2lvbjsKLQotICAgIGJvb2wgbV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkOwotCi0jaWYgRU5B
QkxFKE5FVFdPUktfUFJPQ0VTUykKLSAgICBib29sIG1fY2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVz
dEV2YWx1YXRpb247Ci0gICAgYm9vbCBtX3VzZXNOZXR3b3JrUHJvY2VzczsKLSAgICBSZWZQdHI8
TmV0d29ya1Byb2Nlc3NQcm94eT4gbV9uZXR3b3JrUHJvY2VzczsKLSNlbmRpZgotCi0jaWYgRU5B
QkxFKERBVEFCQVNFX1BST0NFU1MpCi0gICAgUmVmUHRyPERhdGFiYXNlUHJvY2Vzc1Byb3h5PiBt
X2RhdGFiYXNlUHJvY2VzczsKLSNlbmRpZgotICAgIAotICAgIEhhc2hNYXA8dWludDY0X3QsIFJl
ZlB0cjxEaWN0aW9uYXJ5Q2FsbGJhY2s+PiBtX2RpY3Rpb25hcnlDYWxsYmFja3M7Ci0gICAgSGFz
aE1hcDx1aW50NjRfdCwgUmVmUHRyPFN0YXRpc3RpY3NSZXF1ZXN0Pj4gbV9zdGF0aXN0aWNzUmVx
dWVzdHM7Ci0KLSNpZiBVU0UoU09VUCkKLSAgICBib29sIG1faWdub3JlVExTRXJyb3JzOwotI2Vu
ZGlmCi0KLSAgICBib29sIG1fbWVtb3J5Q2FjaGVEaXNhYmxlZDsKLQotICAgIFJlZkNvdW50ZXIg
bV91c2VyT2JzZXJ2YWJsZVBhZ2VDb3VudGVyOwotICAgIFJlZkNvdW50ZXIgbV9wcm9jZXNzU3Vw
cHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0g
ICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IG1fYnVuZGxlUGFyYW1ldGVyczsKLSAg
ICBQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2VuIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXJQ
cm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2VuOwotI2VuZGlmCi19OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotdm9pZCBXZWJDb250ZXh0OjpzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYg
bWVzc2FnZSkKLXsKLSAgICBzd2l0Y2ggKG1fcHJvY2Vzc01vZGVsKSB7Ci0gICAgY2FzZSBQcm9j
ZXNzTW9kZWxTaGFyZWRTZWNvbmRhcnlQcm9jZXNzOgotI2lmIEVOQUJMRShORVRXT1JLX1BST0NF
U1MpCi0gICAgICAgIGlmIChtX3VzZXNOZXR3b3JrUHJvY2VzcykgewotICAgICAgICAgICAgaWYg
KG1fbmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkK
LSAgICAgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPiht
ZXNzYWdlKSwgMCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgotICAg
ICAgICBpZiAoIW1fcHJvY2Vzc2VzLmlzRW1wdHkoKSAmJiBtX3Byb2Nlc3Nlc1swXS0+Y2FuU2Vu
ZE1lc3NhZ2UoKSkKLSAgICAgICAgICAgIG1fcHJvY2Vzc2VzWzBdLT5zZW5kKHN0ZDo6Zm9yd2Fy
ZDxUPihtZXNzYWdlKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFByb2Nlc3NNb2Rl
bE11bHRpcGxlU2Vjb25kYXJ5UHJvY2Vzc2VzOgotI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1Mp
Ci0gICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MtPmNhblNl
bmRNZXNzYWdlKCkpCi0gICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9y
d2FyZDxUPihtZXNzYWdlKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAgICAgIGJy
ZWFrOwotI2VuZGlmCi0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBXZWJDb250ZXh0OjpzZW5kVG9OZXR3b3JraW5nUHJvY2Vz
c1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCi17Ci0gICAgc3dpdGNoIChtX3By
b2Nlc3NNb2RlbCkgewotICAgIGNhc2UgUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2Vz
czoKLSNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotICAgICAgICBpZiAobV91c2VzTmV0d29y
a1Byb2Nlc3MpIHsKLSAgICAgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAg
ICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBlbnN1cmVT
aGFyZWRXZWJQcm9jZXNzKCk7Ci0gICAgICAgIG1fcHJvY2Vzc2VzWzBdLT5zZW5kKHN0ZDo6Zm9y
d2FyZDxUPihtZXNzYWdlKSwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFByb2Nlc3NN
b2RlbE11bHRpcGxlU2Vjb25kYXJ5UHJvY2Vzc2VzOgotI2lmIEVOQUJMRShORVRXT1JLX1BST0NF
U1MpCi0gICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7Ci0gICAgICAgIG1fbmV0d29ya1By
b2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKLSAgICAgICAgcmV0dXJu
OwotI2Vsc2UKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYkNvbnRleHQ6OnNl
bmRUb0RhdGFiYXNlUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpCi17
Ci0jaWYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCi0gICAgZW5zdXJlRGF0YWJhc2VQcm9jZXNz
KCk7Ci0gICAgbV9kYXRhYmFzZVByb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2Up
LCAwKTsKLSNlbHNlCi0gICAgc2VuZFRvQWxsUHJvY2Vzc2VzUmVsYXVuY2hpbmdUaGVtSWZOZWNl
c3Nhcnkoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpKTsKLSNlbmRpZgotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotdm9pZCBXZWJDb250ZXh0OjpzZW5kVG9BbGxQcm9jZXNzZXMoY29uc3QgVCYg
bWVzc2FnZSkKLXsKLSAgICBzaXplX3QgcHJvY2Vzc0NvdW50ID0gbV9wcm9jZXNzZXMuc2l6ZSgp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvY2Vzc0NvdW50OyArK2kpIHsKLSAgICAg
ICAgV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzID0gbV9wcm9jZXNzZXNbaV0uZ2V0KCk7Ci0gICAg
ICAgIGlmIChwcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQotICAgICAgICAgICAgcHJvY2Vzcy0+
c2VuZChUKG1lc3NhZ2UpLCAwKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12
b2lkIFdlYkNvbnRleHQ6OnNlbmRUb0FsbFByb2Nlc3Nlc1JlbGF1bmNoaW5nVGhlbUlmTmVjZXNz
YXJ5KGNvbnN0IFQmIG1lc3NhZ2UpCi17Ci0vLyBGSVhNRSAoTXVsdGktV2ViUHJvY2Vzcyk6IFdl
YkNvbnRleHQgZG9lc24ndCB0cmFjayBwcm9jZXNzZXMgdGhhdCBoYXZlIGV4aXRlZCwgc28gaXQg
Y2Fubm90IHJlbGF1bmNoIHRoZXNlLiBQZXJoYXBzIHRoaXMgZnVuY3Rpb25hbGl0eSB3b24ndCBi
ZSBuZWVkZWQgaW4gdGhpcyBtb2RlLgotICAgIGlmIChtX3Byb2Nlc3NNb2RlbCA9PSBQcm9jZXNz
TW9kZWxTaGFyZWRTZWNvbmRhcnlQcm9jZXNzKQotICAgICAgICBlbnN1cmVTaGFyZWRXZWJQcm9j
ZXNzKCk7Ci0gICAgc2VuZFRvQWxsUHJvY2Vzc2VzKG1lc3NhZ2UpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotdm9pZCBXZWJDb250ZXh0OjpzZW5kVG9PbmVQcm9jZXNzKFQmJiBtZXNzYWdl
KQotewotICAgIGlmIChtX3Byb2Nlc3NNb2RlbCA9PSBQcm9jZXNzTW9kZWxTaGFyZWRTZWNvbmRh
cnlQcm9jZXNzKQotICAgICAgICBlbnN1cmVTaGFyZWRXZWJQcm9jZXNzKCk7Ci0KLSAgICBib29s
IG1lc3NhZ2VTZW50ID0gZmFsc2U7Ci0gICAgc2l6ZV90IHByb2Nlc3NDb3VudCA9IG1fcHJvY2Vz
c2VzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2Nlc3NDb3VudDsgKytp
KSB7Ci0gICAgICAgIFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcyA9IG1fcHJvY2Vzc2VzW2ldLmdl
dCgpOwotICAgICAgICBpZiAocHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkgewotICAgICAgICAg
ICAgcHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwotICAgICAgICAg
ICAgbWVzc2FnZVNlbnQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoIW1lc3NhZ2VTZW50ICYmIG1fcHJvY2Vzc01vZGVsID09IFByb2Nlc3NN
b2RlbE11bHRpcGxlU2Vjb25kYXJ5UHJvY2Vzc2VzKSB7Ci0gICAgICAgIHdhcm1Jbml0aWFsUHJv
Y2VzcygpOwotICAgICAgICBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBwcm9jZXNzID0gbV9wcm9j
ZXNzZXMubGFzdCgpOwotICAgICAgICBpZiAocHJvY2Vzcy0+Y2FuU2VuZE1lc3NhZ2UoKSkKLSAg
ICAgICAgICAgIHByb2Nlc3MtPnNlbmQoc3RkOjpmb3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKLSAg
ICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViQ29udGV4dF9o
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5tZXNzYWdlcy5pbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dC5tZXNzYWdl
cy5pbgkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNv
bnRleHQubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTEsNjQgKzAsMCBAQAotIyBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
IyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jCi0j
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0jIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLSMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUgotIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotIyBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1tZXNzYWdlcyAtPiBXZWJDb250ZXh0
IExlZ2FjeVJlY2VpdmVyIHsKLQotICAgIERpZEdldFN0YXRpc3RpY3Moc3RydWN0IFdlYktpdDo6
U3RhdGlzdGljc0RhdGEgc3RhdGlzdGljc0RhdGEsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCi0KLSNp
ZiBQTEFURk9STShJT1MpCi0gICAgV3JpdGVXZWJDb250ZW50VG9QYXN0ZWJvYXJkKHN0cnVjdCBX
ZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCBjb250ZW50KQotICAgIFdyaXRlSW1hZ2VUb1Bh
c3RlYm9hcmQoc3RydWN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSBwYXN0ZWJvYXJkSW1hZ2Up
Ci0gICAgV3JpdGVTdHJpbmdUb1Bhc3RlYm9hcmQoU3RyaW5nIHBhc3RlYm9hcmRUeXBlLCBTdHJp
bmcgdGV4dCkgCi0gICAgUmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBT
dHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChTdHJpbmcgc3RyaW5nKQotICAgIFJlYWRVUkxGcm9t
UGFzdGVib2FyZCh1aW50NjRfdCBpbmRleCwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlKSAtPiAoU3Ry
aW5nIHN0cmluZykKLSAgICBSZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5kZXgs
IFN0cmluZyBwYXN0ZWJvYXJkVHlwZSkgLT4gKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUg
aGFuZGxlLCB1aW50NjRfdCBzaXplKQotICAgIEdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCkgLT4g
KHVpbnQ2NF90IGl0ZW1zQ291bnQpCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAg
ICMgUGFzdGVib2FyZCBtZXNzYWdlcy4KLSAgICBHZXRQYXN0ZWJvYXJkVHlwZXMoU3RyaW5nIHBh
c3RlYm9hcmROYW1lKSAtPiAoVmVjdG9yPFN0cmluZz4gdHlwZXMpCi0gICAgR2V0UGFzdGVib2Fy
ZFBhdGhuYW1lc0ZvclR5cGUoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBTdHJpbmcgcGFzdGVib2Fy
ZFR5cGUpIC0+IChWZWN0b3I8U3RyaW5nPiBwYXRobmFtZXMpCi0gICAgR2V0UGFzdGVib2FyZFN0
cmluZ0ZvclR5cGUoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUp
IC0+IChTdHJpbmcgc3RyaW5nKQotICAgIEdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKFN0cmlu
ZyBwYXN0ZWJvYXJkTmFtZSwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlKSAtPiAoV2ViS2l0OjpTaGFy
ZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGUsIHVpbnQ2NF90IHNpemUpCi0gICAgUGFzdGVib2FyZENv
cHkoU3RyaW5nIGZyb21QYXN0ZWJvYXJkLCBTdHJpbmcgdG9QYXN0ZWJvYXJkKSAtPiAodWludDY0
X3QgY2hhbmdlQ291bnQpCi0gICAgR2V0UGFzdGVib2FyZENoYW5nZUNvdW50KFN0cmluZyBwYXN0
ZWJvYXJkTmFtZSkgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KQotICAgIEdldFBhc3RlYm9hcmRV
bmlxdWVOYW1lKCkgLT4gKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkKLSAgICBHZXRQYXN0ZWJvYXJk
Q29sb3IoU3RyaW5nIHBhc3RlYm9hcmROYW1lKSAtPiAoV2ViQ29yZTo6Q29sb3IgY29sb3IpCi0g
ICAgR2V0UGFzdGVib2FyZFVSTChTdHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+IChTdHJpbmcgdXJs
U3RyaW5nKQotICAgIEFkZFBhc3RlYm9hcmRUeXBlcyhTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFZl
Y3RvcjxTdHJpbmc+IHBhc3RlYm9hcmRUeXBlcykgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KQot
ICAgIFNldFBhc3RlYm9hcmRUeXBlcyhTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFZlY3RvcjxTdHJp
bmc+IHBhc3RlYm9hcmRUeXBlcykgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KQotICAgIFNldFBh
c3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgU3RyaW5nIHBh
c3RlYm9hcmRUeXBlLCBWZWN0b3I8U3RyaW5nPiBwYXRobmFtZXMpIC0+ICh1aW50NjRfdCBjaGFu
Z2VDb3VudCkKLSAgICBTZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShTdHJpbmcgcGFzdGVib2Fy
ZE5hbWUsIFN0cmluZyBwYXN0ZWJvYXJkVHlwZSwgU3RyaW5nIHN0cmluZykgLT4gKHVpbnQ2NF90
IGNoYW5nZUNvdW50KQotICAgIFNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKFN0cmluZyBwYXN0
ZWJvYXJkTmFtZSwgU3RyaW5nIHBhc3RlYm9hcmRUeXBlLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6
SGFuZGxlIGhhbmRsZSwgdWludDY0X3Qgc2l6ZSkgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50KQot
I2VuZGlmCi0KLSNpZiAhUExBVEZPUk0oQ09DT0EpCi0gICAgLy8gRklYTUU6IFRoaXMgYSBkdW1t
eSBtZXNzYWdlLCB0byBhdm9pZCBicmVha2luZyB0aGUgYnVpbGQgZm9yIHBsYXRmb3JtcyB0aGF0
IGRvbid0IHJlcXVpcmUKLSAgICAvLyBhbnkgc3luY2hyb25vdXMgbWVzc2FnZXMsIGFuZCBzaG91
bGQgYmUgcmVtb3ZlZCB3aGVuIDxyZGFyOi8vcHJvYmxlbS84Nzc1MTE1PiBpcyBmaXhlZC4KLSAg
ICBEdW1teSgpIC0+IChib29sIGR1bW15UmV0dXJuKQotI2VuZGlmCi0KLSAgICAjIFBsdWctaW4g
bWVzc2FnZXMuCi0gICAgdm9pZCBBZGRQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoKFN0cmluZyBw
YWdlT3JpZ2luLCB1aW50MzJfdCBoYXNoLCBXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQot
ICAgIHZvaWQgUGx1Z0luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbih1aW50MzJfdCBoYXNoLCBX
ZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQotfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkNvbnRleHRDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJDb250ZXh0Q2xpZW50LmNwcAkocmV2aXNpb24gMTc3NjkwKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHRDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNywyNyArMjcsMjcgQEAKICNpbmNsdWRlICJXZWJDb250ZXh0Q2xpZW50LmgiCiAKICNp
bmNsdWRlICJBUElBcnJheS5oIgotI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJX
ZWJQcm9jZXNzUG9vbC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdm9pZCBXZWJDb250ZXh0
Q2xpZW50OjpwbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXNDaGFuZ2VkKFdlYkNvbnRleHQqIGNv
bnRleHQpCit2b2lkIFdlYkNvbnRleHRDbGllbnQ6OnBsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2hl
c0NoYW5nZWQoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQogewogICAgIGlmICghbV9jbGll
bnQucGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzQ2hhbmdlZCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9jbGllbnQucGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzQ2hhbmdlZCh0b0FQSShj
b250ZXh0KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICBtX2NsaWVudC5wbHVnSW5B
dXRvU3RhcnRPcmlnaW5IYXNoZXNDaGFuZ2VkKHRvQVBJKHByb2Nlc3NQb29sKSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0Q2xpZW50OjpuZXR3b3JrUHJv
Y2Vzc0RpZENyYXNoKFdlYkNvbnRleHQqIGNvbnRleHQpCit2b2lkIFdlYkNvbnRleHRDbGllbnQ6
Om5ldHdvcmtQcm9jZXNzRGlkQ3Jhc2goV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQogewog
ICAgIGlmICghbV9jbGllbnQubmV0d29ya1Byb2Nlc3NEaWRDcmFzaCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9jbGllbnQubmV0d29ya1Byb2Nlc3NEaWRDcmFzaCh0b0FQSShjb250ZXh0KSwg
bV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICBtX2NsaWVudC5uZXR3b3JrUHJvY2Vzc0Rp
ZENyYXNoKHRvQVBJKHByb2Nlc3NQb29sKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIH0K
IAotdm9pZCBXZWJDb250ZXh0Q2xpZW50OjpwbHVnSW5JbmZvcm1hdGlvbkJlY2FtZUF2YWlsYWJs
ZShXZWJDb250ZXh0KiBjb250ZXh0LCBBUEk6OkFycmF5KiBwbHVnSW5JbmZvKQordm9pZCBXZWJD
b250ZXh0Q2xpZW50OjpwbHVnSW5JbmZvcm1hdGlvbkJlY2FtZUF2YWlsYWJsZShXZWJQcm9jZXNz
UG9vbCogcHJvY2Vzc1Bvb2wsIEFQSTo6QXJyYXkqIHBsdWdJbkluZm8pCiB7CiAgICAgaWYgKCFt
X2NsaWVudC5wbHVnSW5JbmZvcm1hdGlvbkJlY2FtZUF2YWlsYWJsZSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNTUsMTUgKzU1LDE1IEBAIHZvaWQgV2ViQ29udGV4dENsaWVudDo6cGx1Z0luSW5mb3Jt
YXRpb24KICAgICAvLyBGSVhNRTogVGhlIEFQSSBjb250cmFjdCBleHBlY3RzIHVzIHRvIGhhbmQg
YSByZWZlcmVuY2UgdG8gdGhlIGFycmF5IGhlcmUuIFRoaXMgaXMgd3JvbmcuCiAgICAgcGx1Z0lu
SW5mby0+cmVmKCk7CiAKLSAgICBtX2NsaWVudC5wbHVnSW5JbmZvcm1hdGlvbkJlY2FtZUF2YWls
YWJsZSh0b0FQSShjb250ZXh0KSwgdG9BUEkocGx1Z0luSW5mbyksIG1fY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyk7CisgICAgbV9jbGllbnQucGx1Z0luSW5mb3JtYXRpb25CZWNhbWVBdmFpbGFibGUo
dG9BUEkocHJvY2Vzc1Bvb2wpLCB0b0FQSShwbHVnSW5JbmZvKSwgbV9jbGllbnQuYmFzZS5jbGll
bnRJbmZvKTsKIH0KIAotUGFzc1JlZlB0cjxBUEk6OkRhdGE+IFdlYkNvbnRleHRDbGllbnQ6OmNv
cHlXZWJDcnlwdG9NYXN0ZXJLZXkoV2ViQ29udGV4dCogY29udGV4dCkKK1Bhc3NSZWZQdHI8QVBJ
OjpEYXRhPiBXZWJDb250ZXh0Q2xpZW50Ojpjb3B5V2ViQ3J5cHRvTWFzdGVyS2V5KFdlYlByb2Nl
c3NQb29sKiBwcm9jZXNzUG9vbCkKIHsKICAgICBpZiAoIW1fY2xpZW50LmNvcHlXZWJDcnlwdG9N
YXN0ZXJLZXkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGFkb3B0UmVm
KHRvSW1wbChtX2NsaWVudC5jb3B5V2ViQ3J5cHRvTWFzdGVyS2V5KHRvQVBJKGNvbnRleHQpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKHRvSW1wbCht
X2NsaWVudC5jb3B5V2ViQ3J5cHRvTWFzdGVyS2V5KHRvQVBJKHByb2Nlc3NQb29sKSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0Q2xpZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHRDbGllbnQuaAkocmV2aXNpb24g
MTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHRDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzgsMTYgKzM4LDE3IEBAIHRlbXBsYXRlPD4gc3RydWN0IENsaWVu
dFRyYWl0czxXS0NvbnRleHQKIH07CiB9CiAKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNz
IFdlYkNvbnRleHQ7CitjbGFzcyBXZWJQcm9jZXNzUG9vbDsKIAogY2xhc3MgV2ViQ29udGV4dENs
aWVudCA6IHB1YmxpYyBBUEk6OkNsaWVudDxXS0NvbnRleHRDbGllbnRCYXNlPiB7CiBwdWJsaWM6
Ci0gICAgdm9pZCBwbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXNDaGFuZ2VkKFdlYkNvbnRleHQq
KTsKLSAgICB2b2lkIG5ldHdvcmtQcm9jZXNzRGlkQ3Jhc2goV2ViQ29udGV4dCopOwotICAgIHZv
aWQgcGx1Z0luSW5mb3JtYXRpb25CZWNhbWVBdmFpbGFibGUoV2ViQ29udGV4dCosIEFQSTo6QXJy
YXkqKTsKLSAgICBQYXNzUmVmUHRyPEFQSTo6RGF0YT4gY29weVdlYkNyeXB0b01hc3RlcktleShX
ZWJDb250ZXh0Kik7CisgICAgdm9pZCBwbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXNDaGFuZ2Vk
KFdlYlByb2Nlc3NQb29sKik7CisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0RpZENyYXNoKFdlYlBy
b2Nlc3NQb29sKik7CisgICAgdm9pZCBwbHVnSW5JbmZvcm1hdGlvbkJlY2FtZUF2YWlsYWJsZShX
ZWJQcm9jZXNzUG9vbCosIEFQSTo6QXJyYXkqKTsKKyAgICBQYXNzUmVmUHRyPEFQSTo6RGF0YT4g
Y29weVdlYkNyeXB0b01hc3RlcktleShXZWJQcm9jZXNzUG9vbCopOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dENv
bm5lY3Rpb25DbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJDb250ZXh0Q29ubmVjdGlvbkNsaWVudC5jcHAJKHJldmlzaW9uIDE3NzY5MCkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0Q29ubmVjdGlvbkNsaWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDE2ICsyNywxNiBAQAogI2luY2x1ZGUgIldlYkNvbnRleHRDb25u
ZWN0aW9uQ2xpZW50LmgiCiAKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKLSNpbmNsdWRlICJXZWJD
b250ZXh0LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLXZvaWQgV2ViQ29udGV4dENvbm5lY3Rpb25DbGllbnQ6OmRpZENyZWF0ZUNvbm5lY3Rp
b24oV2ViQ29udGV4dCogY29udGV4dCwgV2ViQ29ubmVjdGlvbiogY29ubmVjdGlvbikKK3ZvaWQg
V2ViQ29udGV4dENvbm5lY3Rpb25DbGllbnQ6OmRpZENyZWF0ZUNvbm5lY3Rpb24oV2ViUHJvY2Vz
c1Bvb2wqIHByb2Nlc3NQb29sLCBXZWJDb25uZWN0aW9uKiBjb25uZWN0aW9uKQogewogICAgIGlm
ICghbV9jbGllbnQuZGlkQ3JlYXRlQ29ubmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9jbGllbnQuZGlkQ3JlYXRlQ29ubmVjdGlvbih0b0FQSShjb250ZXh0KSwgdG9BUEkoY29ubmVj
dGlvbiksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgbV9jbGllbnQuZGlkQ3JlYXRl
Q29ubmVjdGlvbih0b0FQSShwcm9jZXNzUG9vbCksIHRvQVBJKGNvbm5lY3Rpb24pLCBtX2NsaWVu
dC5iYXNlLmNsaWVudEluZm8pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0Q29ubmVjdGlvbkNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0Q29ubmVjdGlvbkNs
aWVudC5oCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
Q29udGV4dENvbm5lY3Rpb25DbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDEx
IEBAIHRlbXBsYXRlPD4gc3RydWN0IENsaWVudFRyYWl0czxXS0NvbnRleHQKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBjbGFzcyBXZWJDb25uZWN0aW9uOwotY2xhc3MgV2ViQ29udGV4dDsKK2NsYXNz
IFdlYlByb2Nlc3NQb29sOwogCiBjbGFzcyBXZWJDb250ZXh0Q29ubmVjdGlvbkNsaWVudCA6IHB1
YmxpYyBBUEk6OkNsaWVudDxXS0NvbnRleHRDb25uZWN0aW9uQ2xpZW50QmFzZT4gewogcHVibGlj
OgotICAgIHZvaWQgZGlkQ3JlYXRlQ29ubmVjdGlvbihXZWJDb250ZXh0KiwgV2ViQ29ubmVjdGlv
biopOworICAgIHZvaWQgZGlkQ3JlYXRlQ29ubmVjdGlvbihXZWJQcm9jZXNzUG9vbCosIFdlYkNv
bm5lY3Rpb24qKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHRJbmplY3RlZEJ1bmRs
ZUNsaWVudC5jcHAJKHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NywzNyArMjcsMzcgQEAKICNpbmNsdWRlICJXZWJDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQu
aCIKIAogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLXZv
aWQgV2ViQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50OjpkaWRSZWNlaXZlTWVzc2FnZUZyb21J
bmplY3RlZEJ1bmRsZShXZWJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VO
YW1lLCBBUEk6Ok9iamVjdCogbWVzc2FnZUJvZHkpCit2b2lkIFdlYkNvbnRleHRJbmplY3RlZEJ1
bmRsZUNsaWVudDo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV2ViUHJvY2Vz
c1Bvb2wqIHByb2Nlc3NQb29sLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBBUEk6Ok9iamVj
dCogbWVzc2FnZUJvZHkpCiB7CiAgICAgaWYgKCFtX2NsaWVudC5kaWRSZWNlaXZlTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9jbGllbnQuZGlkUmVj
ZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUodG9BUEkoY29udGV4dCksIHRvQVBJKG1lc3Nh
Z2VOYW1lLmltcGwoKSksIHRvQVBJKG1lc3NhZ2VCb2R5KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJ
bmZvKTsKKyAgICBtX2NsaWVudC5kaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSh0
b0FQSShwcm9jZXNzUG9vbCksIHRvQVBJKG1lc3NhZ2VOYW1lLmltcGwoKSksIHRvQVBJKG1lc3Nh
Z2VCb2R5KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0
SW5qZWN0ZWRCdW5kbGVDbGllbnQ6OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5q
ZWN0ZWRCdW5kbGUoV2ViQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFt
ZSwgQVBJOjpPYmplY3QqIG1lc3NhZ2VCb2R5LCBSZWZQdHI8QVBJOjpPYmplY3Q+JiByZXR1cm5E
YXRhKQordm9pZCBXZWJDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQ6OmRpZFJlY2VpdmVTeW5j
aHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQ
b29sLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBBUEk6Ok9iamVjdCogbWVzc2FnZUJvZHks
IFJlZlB0cjxBUEk6Ok9iamVjdD4mIHJldHVybkRhdGEpCiB7CiAgICAgaWYgKCFtX2NsaWVudC5k
aWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YVJlZiA9IDA7Ci0gICAgbV9jbGllbnQu
ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSh0b0FQSShjb250
ZXh0KSwgdG9BUEkobWVzc2FnZU5hbWUuaW1wbCgpKSwgdG9BUEkobWVzc2FnZUJvZHkpLCAmcmV0
dXJuRGF0YVJlZiwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICBtX2NsaWVudC5kaWRS
ZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKHRvQVBJKHByb2Nlc3NQ
b29sKSwgdG9BUEkobWVzc2FnZU5hbWUuaW1wbCgpKSwgdG9BUEkobWVzc2FnZUJvZHkpLCAmcmV0
dXJuRGF0YVJlZiwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICByZXR1cm5EYXRhID0g
YWRvcHRSZWYodG9JbXBsKHJldHVybkRhdGFSZWYpKTsKIH0KIAotUGFzc1JlZlB0cjxBUEk6Ok9i
amVjdD4gV2ViQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50OjpnZXRJbmplY3RlZEJ1bmRsZUlu
aXRpYWxpemF0aW9uVXNlckRhdGEoV2ViQ29udGV4dCogY29udGV4dCkKK1Bhc3NSZWZQdHI8QVBJ
OjpPYmplY3Q+IFdlYkNvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudDo6Z2V0SW5qZWN0ZWRCdW5k
bGVJbml0aWFsaXphdGlvblVzZXJEYXRhKFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKIHsK
ICAgICBpZiAoIW1fY2xpZW50LmdldEluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0
YSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gdG9JbXBsKG1fY2xpZW50LmdldElu
amVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YSh0b0FQSShjb250ZXh0KSwgbV9jbGll
bnQuYmFzZS5jbGllbnRJbmZvKSk7CisgICAgcmV0dXJuIHRvSW1wbChtX2NsaWVudC5nZXRJbmpl
Y3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGEodG9BUEkocHJvY2Vzc1Bvb2wpLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHRJbmpl
Y3RlZEJ1bmRsZUNsaWVudC5oCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDEzICs0MCwxMyBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRUcmFpdHM8V0tDb250
ZXh0CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBXZWJDb250ZXh0OworY2xhc3MgV2Vi
UHJvY2Vzc1Bvb2w7CiAKIGNsYXNzIFdlYkNvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudCA6IHB1
YmxpYyBBUEk6OkNsaWVudDxXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudEJhc2U+IHsKIHB1
YmxpYzoKLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdlYkNv
bnRleHQqLCBjb25zdCBTdHJpbmcmLCBBUEk6Ok9iamVjdCopOwotICAgIHZvaWQgZGlkUmVjZWl2
ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXZWJDb250ZXh0KiwgY29uc3Qg
U3RyaW5nJiwgQVBJOjpPYmplY3QqLCBSZWZQdHI8QVBJOjpPYmplY3Q+JiByZXR1cm5EYXRhKTsK
LSAgICBQYXNzUmVmUHRyPEFQSTo6T2JqZWN0PiBnZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0
aW9uVXNlckRhdGEoV2ViQ29udGV4dCopOworICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2VGcm9t
SW5qZWN0ZWRCdW5kbGUoV2ViUHJvY2Vzc1Bvb2wqLCBjb25zdCBTdHJpbmcmLCBBUEk6Ok9iamVj
dCopOworICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1
bmRsZShXZWJQcm9jZXNzUG9vbCosIGNvbnN0IFN0cmluZyYsIEFQSTo6T2JqZWN0KiwgUmVmUHRy
PEFQSTo6T2JqZWN0PiYgcmV0dXJuRGF0YSk7CisgICAgUGFzc1JlZlB0cjxBUEk6Ok9iamVjdD4g
Z2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhKFdlYlByb2Nlc3NQb29sKik7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJDb250ZXh0U3VwcGxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJDb250ZXh0U3VwcGxlbWVudC5oCShyZXZpc2lvbiAxNzc2OTApCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dFN1cHBsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMTMgKzMwLDEzIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBEYXRh
YmFzZVByb2Nlc3NQcm94eTsKIGNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHk7Ci1jbGFzcyBXZWJD
b250ZXh0OworY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJQcm9jZXNzUHJveHk7CiAK
IGNsYXNzIFdlYkNvbnRleHRTdXBwbGVtZW50IHsKIHB1YmxpYzoKLSAgICBXZWJDb250ZXh0U3Vw
cGxlbWVudChXZWJDb250ZXh0KiBjb250ZXh0KQotICAgICAgICA6IG1fY29udGV4dChjb250ZXh0
KQorICAgIFdlYkNvbnRleHRTdXBwbGVtZW50KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkK
KyAgICAgICAgOiBtX3Byb2Nlc3NQb29sKHByb2Nlc3NQb29sKQogICAgIHsKICAgICB9CiAKQEAg
LTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
Y29udGV4dERlc3Ryb3llZCgpCisgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NQb29sRGVzdHJveWVk
KCkKICAgICB7CiAgICAgfQogCkBAIC02NSw4ICs2NSw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgV2ViQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGV4dDsgfQotICAgIHZvaWQgY2xlYXJDb250ZXh0KCkgeyBtX2NvbnRleHQgPSAw
OyB9CisgICAgV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKCkgY29uc3QgeyByZXR1cm4gbV9w
cm9jZXNzUG9vbDsgfQorICAgIHZvaWQgY2xlYXJQcm9jZXNzUG9vbCgpIHsgbV9wcm9jZXNzUG9v
bCA9IG51bGxwdHI7IH0KIAogICAgIHZvaWQgcmVmKCkgeyByZWZXZWJDb250ZXh0U3VwcGxlbWVu
dCgpOyB9CiAgICAgdm9pZCBkZXJlZigpIHsgZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpOyB9
CkBAIC03NSw3ICs3NSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlZldlYkNvbnRl
eHRTdXBwbGVtZW50KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZXJlZldlYkNvbnRleHRTdXBw
bGVtZW50KCkgPSAwOwogCi0gICAgV2ViQ29udGV4dCogbV9jb250ZXh0OworICAgIFdlYlByb2Nl
c3NQb29sKiBtX3Byb2Nlc3NQb29sOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29udGV4dFVzZXJNZXNzYWdlQ29kZXJzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvbnRleHRVc2VyTWVz
c2FnZUNvZGVycy5oCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViQ29udGV4dFVzZXJNZXNzYWdlQ29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcg
KzI0LDYgQEAKICAqLwogCiAjaW5jbHVkZSAiVXNlck1lc3NhZ2VDb2RlcnMuaCIKLSNpbmNsdWRl
ICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVQcm94eS5oIgogI2luY2x1ZGUgIldl
YlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91cERhdGEuaCIKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb29raWVNYW5hZ2VyUHJveHkuY3BwCShy
ZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29va2llTWFu
YWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjksOSBAQAogI2luY2x1ZGUg
IkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbkRhdGEuaCIKLSNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAi
V2ViQ29va2llTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclBy
b3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIApAQCAtNDAsMTggKzQwLDE4IEBAIGNvbnN0IGNoYXIqIFdlYkNvb2tpZU1hbmFn
ZXJQcm94eTo6c3VwcGwKICAgICByZXR1cm4gIldlYkNvb2tpZU1hbmFnZXJQcm94eSI7CiB9CiAK
LVBhc3NSZWZQdHI8V2ViQ29va2llTWFuYWdlclByb3h5PiBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OmNyZWF0ZShXZWJDb250ZXh0KiBjb250ZXh0KQorUGFzc1JlZlB0cjxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+IFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlByb2Nlc3NQb29sKiBwcm9j
ZXNzUG9vbCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkNvb2tpZU1hbmFnZXJQcm94
eShjb250ZXh0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJDb29raWVNYW5hZ2VyUHJv
eHkocHJvY2Vzc1Bvb2wpKTsKIH0KIAotV2ViQ29va2llTWFuYWdlclByb3h5OjpXZWJDb29raWVN
YW5hZ2VyUHJveHkoV2ViQ29udGV4dCogY29udGV4dCkKLSAgICA6IFdlYkNvbnRleHRTdXBwbGVt
ZW50KGNvbnRleHQpCitXZWJDb29raWVNYW5hZ2VyUHJveHk6OldlYkNvb2tpZU1hbmFnZXJQcm94
eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCisgICAgOiBXZWJDb250ZXh0U3VwcGxlbWVu
dChwcm9jZXNzUG9vbCkKICNpZiBVU0UoU09VUCkKICAgICAsIG1fY29va2llUGVyc2lzdGVudFN0
b3JhZ2VUeXBlKFNvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVNRTGl0ZSkKICNlbmRpZgogewot
ICAgIFdlYkNvbnRleHRTdXBwbGVtZW50Ojpjb250ZXh0KCktPmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6V2ViQ29va2llTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0
aGlzKTsKKyAgICBXZWJDb250ZXh0U3VwcGxlbWVudDo6cHJvY2Vzc1Bvb2woKS0+YWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgKnRoaXMpOwogfQogCiBXZWJDb29raWVNYW5hZ2VyUHJveHk6On5XZWJDb29raWVN
YW5hZ2VyUHJveHkoKQpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6aW5pdGlhbGl6ZUNsCiAKIC8vIFdlYkNvbnRleHRTdXBwbGVtZW50CiAKLXZvaWQgV2ViQ29v
a2llTWFuYWdlclByb3h5Ojpjb250ZXh0RGVzdHJveWVkKCkKK3ZvaWQgV2ViQ29va2llTWFuYWdl
clByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCgpCiB7CiAgICAgaW52YWxpZGF0ZUNhbGxiYWNr
TWFwKG1fYXJyYXlDYWxsYmFja3MsIENhbGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVyV2FzSW52YWxp
ZGF0ZWQpOwogICAgIGludmFsaWRhdGVDYWxsYmFja01hcChtX2h0dHBDb29raWVBY2NlcHRQb2xp
Y3lDYWxsYmFja3MsIENhbGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVyV2FzSW52YWxpZGF0ZWQpOwpA
QCAtODUsNyArODUsNyBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6cHJvY2Vzc0RpZENs
CiAKIGJvb2wgV2ViQ29va2llTWFuYWdlclByb3h5OjpzaG91bGRUZXJtaW5hdGUoV2ViUHJvY2Vz
c1Byb3h5KikgY29uc3QKIHsKLSAgICByZXR1cm4gY29udGV4dCgpLT5wcm9jZXNzTW9kZWwoKSAh
PSBQcm9jZXNzTW9kZWxTaGFyZWRTZWNvbmRhcnlQcm9jZXNzCisgICAgcmV0dXJuIHByb2Nlc3NQ
b29sKCktPnByb2Nlc3NNb2RlbCgpICE9IFByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nl
c3MKICAgICAgICAgfHwgKG1fYXJyYXlDYWxsYmFja3MuaXNFbXB0eSgpICYmIG1faHR0cENvb2tp
ZUFjY2VwdFBvbGljeUNhbGxiYWNrcy5pc0VtcHR5KCkpOwogfQogCkBAIC0xMDUsNyArMTA1LDcg
QEAgdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmdldEhvc3RuYW1lcwogICAgIHVpbnQ2NF90
IGNhbGxiYWNrSUQgPSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgpOwogICAgIG1fYXJyYXlDYWxsYmFj
a3Muc2V0KGNhbGxiYWNrSUQsIGNhbGxiYWNrLnJlbGVhc2UoKSk7CiAKLSAgICBjb250ZXh0KCkt
PnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6
V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoY2FsbGJhY2tJRCkpOwor
ICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5l
Y2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aENvb2tp
ZXMoY2FsbGJhY2tJRCkpOwogfQogICAgIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6OmRp
ZEdldEhvc3RuYW1lc1dpdGhDb29raWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBob3N0bmFtZXMs
IHVpbnQ2NF90IGNhbGxiYWNrSUQpCkBAIC0xMjEsMjcgKzEyMSwyNyBAQCB2b2lkIFdlYkNvb2tp
ZU1hbmFnZXJQcm94eTo6ZGlkR2V0SG9zdG5hCiAKIHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5
OjpkZWxldGVDb29raWVzRm9ySG9zdG5hbWUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKLSAg
ICBjb250ZXh0KCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2Fy
eShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVsZXRlQ29va2llc0Zvckhvc3RuYW1lKGhv
c3RuYW1lKSk7CisgICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxh
dW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2VyOjpEZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoaG9zdG5hbWUpKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJv
eHk6OmRlbGV0ZUFsbENvb2tpZXMoKQogewotICAgIGNvbnRleHQoKS0+c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29raWVNYW5hZ2Vy
OjpEZWxldGVBbGxDb29raWVzKCkpOworICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtp
bmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdl
cjo6RGVsZXRlQWxsQ29va2llcygpKTsKIH0KIAogdm9pZCBXZWJDb29raWVNYW5hZ2VyUHJveHk6
OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6
OnRpbWVfcG9pbnQgdGltZSkKIHsKLSAgICBjb250ZXh0KCktPnNlbmRUb05ldHdvcmtpbmdQcm9j
ZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6RGVs
ZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UodGltZSkpOworICAgIHByb2Nlc3NQb29sKCktPnNl
bmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2Vi
Q29va2llTWFuYWdlcjo6RGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UodGltZSkpOwogfQog
CiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2Vz
KCkKIHsKLSAgICBjb250ZXh0KCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJ
Zk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRPYnNlcnZpbmdDb29r
aWVDaGFuZ2VzKCkpOworICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb05ldHdvcmtpbmdQcm9jZXNz
UmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6U3RhcnRP
YnNlcnZpbmdDb29raWVDaGFuZ2VzKCkpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94
eTo6c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoKQogewotICAgIGNvbnRleHQoKS0+c2VuZFRv
TmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJDb29r
aWVNYW5hZ2VyOjpTdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcygpKTsKKyAgICBwcm9jZXNzUG9v
bCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2Fn
ZXM6OldlYkNvb2tpZU1hbmFnZXI6OlN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKCkpOwogfQog
CiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6Y29va2llc0RpZENoYW5nZSgpCkBAIC0xNTUs
MTAgKzE1NSwxMCBAQCB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6c2V0SFRUUENvb2tpCiAg
ICAgcGVyc2lzdEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KTsKICNlbmRpZgogI2lmIFVT
RShTT1VQKQotICAgIGNvbnRleHQoKS0+c2V0SW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3ko
cG9saWN5KTsKKyAgICBwcm9jZXNzUG9vbCgpLT5zZXRJbml0aWFsSFRUUENvb2tpZUFjY2VwdFBv
bGljeShwb2xpY3kpOwogI2VuZGlmCiAKLSAgICBjb250ZXh0KCktPnNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViQ29va2llTWFuYWdlcjo6
U2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShwb2xpY3kpKTsKKyAgICBwcm9jZXNzUG9vbCgpLT5z
ZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6Oldl
YkNvb2tpZU1hbmFnZXI6OlNldEhUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiB9CiAK
IHZvaWQgV2ViQ29va2llTWFuYWdlclByb3h5OjpnZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHN0
ZDo6ZnVuY3Rpb248dm9pZCAoSFRUUENvb2tpZUFjY2VwdFBvbGljeSwgQ2FsbGJhY2tCYXNlOjpF
cnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCkBAIC0xNjgsNyArMTY4LDcgQEAgdm9pZCBXZWJDb29r
aWVNYW5hZ2VyUHJveHk6OmdldEhUVFBDb29raQogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBj
YWxsYmFjay0+Y2FsbGJhY2tJRCgpOwogICAgIG1faHR0cENvb2tpZUFjY2VwdFBvbGljeUNhbGxi
YWNrcy5zZXQoY2FsbGJhY2tJRCwgY2FsbGJhY2sucmVsZWFzZSgpKTsKIAotICAgIGNvbnRleHQo
KS0+c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2Vz
OjpXZWJDb29raWVNYW5hZ2VyOjpHZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGNhbGxiYWNrSUQp
KTsKKyAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5n
SWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYkNvb2tpZU1hbmFnZXI6OkdldEhUVFBDb29raWVBY2Nl
cHRQb2xpY3koY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYkNvb2tpZU1hbmFnZXJQcm94eTo6
ZGlkR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSh1aW50MzJfdCBwb2xpY3ksIHVpbnQ2NF90IGNh
bGxiYWNrSUQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViQ29va2llTWFuYWdl
clByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkNvb2tp
ZU1hbmFnZXJQcm94eS5oCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViQ29va2llTWFuYWdlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDkgKzQz
LDEwIEBAIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgQXJyYXk7CiB9CiAKKwogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLWNsYXNzIFdlYkNvbnRleHQ7CitjbGFzcyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNz
IFdlYlByb2Nlc3NQcm94eTsKIAogdHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+
IEFycmF5Q2FsbGJhY2s7CkBAIC01NSw3ICs1Niw3IEBAIGNsYXNzIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eSA6IHB1YmxpYyBBUEkKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgY2hhciogc3VwcGxl
bWVudE5hbWUoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvb2tpZU1hbmFnZXJQcm94
eT4gY3JlYXRlKFdlYkNvbnRleHQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb29raWVN
YW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOwogICAgIHZpcnR1YWwgfldlYkNv
b2tpZU1hbmFnZXJQcm94eSgpOwogCiAgICAgdm9pZCBpbml0aWFsaXplQ2xpZW50KGNvbnN0IFdL
Q29va2llTWFuYWdlckNsaWVudEJhc2UqKTsKQEAgLTgwLDcgKzgxLDcgQEAgcHVibGljOgogICAg
IHVzaW5nIEFQSTo6T2JqZWN0OjpkZXJlZjsKIAogcHJpdmF0ZToKLSAgICBXZWJDb29raWVNYW5h
Z2VyUHJveHkoV2ViQ29udGV4dCopOworICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eShXZWJQcm9j
ZXNzUG9vbCopOwogCiAgICAgdm9pZCBkaWRHZXRIb3N0bmFtZXNXaXRoQ29va2llcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogICAgIHZvaWQgZGlkR2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeSh1aW50MzJfdCBwb2xpY3ksIHVpbnQ2NF90IGNhbGxiYWNrSUQp
OwpAQCAtODgsNyArODksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY29va2llc0RpZENoYW5nZSgp
OwogCiAgICAgLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLSAgICB2aXJ0dWFsIHZvaWQgY29udGV4
dERlc3Ryb3llZCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzUG9vbERlc3Ry
b3llZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJv
Y2Vzc1Byb3h5Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3NEaWRDbG9zZShO
ZXR3b3JrUHJvY2Vzc1Byb3h5Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFRl
cm1pbmF0ZShXZWJQcm9jZXNzUHJveHkqKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkRhdGFiYXNlTWFuYWdlclByb3h5LmNwcAko
cmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkRhdGFiYXNl
TWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsOSBAQAogI2luY2x1
ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRl
ICJJbW11dGFibGVEaWN0aW9uYXJ5LmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1
ZGUgIldlYkRhdGFiYXNlTWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViRGF0YWJhc2VN
YW5hZ2VyUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpA
QCAtMTA1LDE1ICsxMDUsMTUgQEAgU3RyaW5nIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpkYXRh
YmFzZQogICAgIHJldHVybiBrZXk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViRGF0YWJhc2VNYW5hZ2Vy
UHJveHk+IFdlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViQ29udGV4dCogd2ViQ29u
dGV4dCkKK1Bhc3NSZWZQdHI8V2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk+IFdlYkRhdGFiYXNlTWFu
YWdlclByb3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQogewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkod2ViQ29udGV4dCkpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkocHJvY2Vzc1Bv
b2wpKTsKIH0KIAotV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OldlYkRhdGFiYXNlTWFuYWdlclBy
b3h5KFdlYkNvbnRleHQqIHdlYkNvbnRleHQpCi0gICAgOiBXZWJDb250ZXh0U3VwcGxlbWVudCh3
ZWJDb250ZXh0KQorV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OldlYkRhdGFiYXNlTWFuYWdlclBy
b3h5KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKKyAgICA6IFdlYkNvbnRleHRTdXBwbGVt
ZW50KHByb2Nlc3NQb29sKQogewotICAgIFdlYkNvbnRleHRTdXBwbGVtZW50Ojpjb250ZXh0KCkt
PmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIFdlYkNvbnRleHRTdXBwbGVtZW50Ojpw
cm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkRhdGFiYXNlTWFu
YWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIH0KIAogV2ViRGF0YWJh
c2VNYW5hZ2VyUHJveHk6On5XZWJEYXRhYmFzZU1hbmFnZXJQcm94eSgpCkBAIC0xMjcsNyArMTI3
LDcgQEAgdm9pZCBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6aW5pdGlhbGl6ZQogCiAvLyBXZWJD
b250ZXh0U3VwcGxlbWVudAogCi12b2lkIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5Ojpjb250ZXh0
RGVzdHJveWVkKCkKK3ZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVz
dHJveWVkKCkKIHsKICAgICBpbnZhbGlkYXRlQ2FsbGJhY2tNYXAobV9hcnJheUNhbGxiYWNrcywg
Q2FsbGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CiB9CkBAIC0xNTgsNyAr
MTU4LDcgQEAgdm9pZCBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6Z2V0RGF0YWJhcwogICAgIHVp
bnQ2NF90IGNhbGxiYWNrSUQgPSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgpOwogICAgIG1fYXJyYXlD
YWxsYmFja3Muc2V0KGNhbGxiYWNrSUQsIGNhbGxiYWNrLnJlbGVhc2UoKSk7CiAKLSAgICBjb250
ZXh0KCktPnNlbmRUb09uZVByb2Nlc3MoTWVzc2FnZXM6OldlYkRhdGFiYXNlTWFuYWdlcjo6R2V0
RGF0YWJhc2VzQnlPcmlnaW4oY2FsbGJhY2tJRCkpOworICAgIHByb2Nlc3NQb29sKCktPnNlbmRU
b09uZVByb2Nlc3MoTWVzc2FnZXM6OldlYkRhdGFiYXNlTWFuYWdlcjo6R2V0RGF0YWJhc2VzQnlP
cmlnaW4oY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5Ojpk
aWRHZXREYXRhYmFzZXNCeU9yaWdpbihjb25zdCBWZWN0b3I8T3JpZ2luQW5kRGF0YWJhc2VzPiYg
b3JpZ2luQW5kRGF0YWJhc2VzVmVjdG9yLCB1aW50NjRfdCBjYWxsYmFja0lEKQpAQCAtMjExLDcg
KzIxMSw3IEBAIHZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OmdldERhdGFiYXMKICAgICB1
aW50NjRfdCBjYWxsYmFja0lEID0gY2FsbGJhY2stPmNhbGxiYWNrSUQoKTsKICAgICBtX2FycmF5
Q2FsbGJhY2tzLnNldChjYWxsYmFja0lELCBjYWxsYmFjay5yZWxlYXNlKCkpOwogCi0gICAgY29u
dGV4dCgpLT5zZW5kVG9PbmVQcm9jZXNzKE1lc3NhZ2VzOjpXZWJEYXRhYmFzZU1hbmFnZXI6Okdl
dERhdGFiYXNlT3JpZ2lucyhjYWxsYmFja0lEKSk7CisgICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRv
T25lUHJvY2VzcyhNZXNzYWdlczo6V2ViRGF0YWJhc2VNYW5hZ2VyOjpHZXREYXRhYmFzZU9yaWdp
bnMoY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpkaWRH
ZXREYXRhYmFzZU9yaWdpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9yaWdpbklkZW50aWZpZXJz
LCB1aW50NjRfdCBjYWxsYmFja0lEKQpAQCAtMjMzLDIyICsyMzMsMjIgQEAgdm9pZCBXZWJEYXRh
YmFzZU1hbmFnZXJQcm94eTo6ZGlkR2V0RGF0YQogCiB2b2lkIFdlYkRhdGFiYXNlTWFuYWdlclBy
b3h5OjpkZWxldGVEYXRhYmFzZVdpdGhOYW1lRm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VJZGVudGlmaWVyLCBBUEk6OlNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiB7Ci0gICAgY29udGV4
dCgpLT5zZW5kVG9PbmVQcm9jZXNzKE1lc3NhZ2VzOjpXZWJEYXRhYmFzZU1hbmFnZXI6OkRlbGV0
ZURhdGFiYXNlV2l0aE5hbWVGb3JPcmlnaW4oZGF0YWJhc2VJZGVudGlmaWVyLCBvcmlnaW4tPnNl
Y3VyaXR5T3JpZ2luKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpKTsKKyAgICBwcm9jZXNzUG9vbCgp
LT5zZW5kVG9PbmVQcm9jZXNzKE1lc3NhZ2VzOjpXZWJEYXRhYmFzZU1hbmFnZXI6OkRlbGV0ZURh
dGFiYXNlV2l0aE5hbWVGb3JPcmlnaW4oZGF0YWJhc2VJZGVudGlmaWVyLCBvcmlnaW4tPnNlY3Vy
aXR5T3JpZ2luKCkuZGF0YWJhc2VJZGVudGlmaWVyKCkpKTsKIH0KIAogdm9pZCBXZWJEYXRhYmFz
ZU1hbmFnZXJQcm94eTo6ZGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2luKEFQSTo6U2VjdXJpdHlPcmln
aW4qIG9yaWdpbikKIHsKLSAgICBjb250ZXh0KCktPnNlbmRUb09uZVByb2Nlc3MoTWVzc2FnZXM6
OldlYkRhdGFiYXNlTWFuYWdlcjo6RGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2luKG9yaWdpbi0+c2Vj
dXJpdHlPcmlnaW4oKS5kYXRhYmFzZUlkZW50aWZpZXIoKSkpOworICAgIHByb2Nlc3NQb29sKCkt
PnNlbmRUb09uZVByb2Nlc3MoTWVzc2FnZXM6OldlYkRhdGFiYXNlTWFuYWdlcjo6RGVsZXRlRGF0
YWJhc2VzRm9yT3JpZ2luKG9yaWdpbi0+c2VjdXJpdHlPcmlnaW4oKS5kYXRhYmFzZUlkZW50aWZp
ZXIoKSkpOwogfQogCiB2b2lkIFdlYkRhdGFiYXNlTWFuYWdlclByb3h5OjpkZWxldGVBbGxEYXRh
YmFzZXMoKQogewotICAgIGNvbnRleHQoKS0+c2VuZFRvT25lUHJvY2VzcyhNZXNzYWdlczo6V2Vi
RGF0YWJhc2VNYW5hZ2VyOjpEZWxldGVBbGxEYXRhYmFzZXMoKSk7CisgICAgcHJvY2Vzc1Bvb2wo
KS0+c2VuZFRvT25lUHJvY2VzcyhNZXNzYWdlczo6V2ViRGF0YWJhc2VNYW5hZ2VyOjpEZWxldGVB
bGxEYXRhYmFzZXMoKSk7CiB9CiAKIHZvaWQgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk6OnNldFF1
b3RhRm9yT3JpZ2luKEFQSTo6U2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwgdWludDY0X3QgcXVvdGEp
CiB7Ci0gICAgY29udGV4dCgpLT5zZW5kVG9PbmVQcm9jZXNzKE1lc3NhZ2VzOjpXZWJEYXRhYmFz
ZU1hbmFnZXI6OlNldFF1b3RhRm9yT3JpZ2luKG9yaWdpbi0+c2VjdXJpdHlPcmlnaW4oKS5kYXRh
YmFzZUlkZW50aWZpZXIoKSwgcXVvdGEpKTsKKyAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9PbmVQ
cm9jZXNzKE1lc3NhZ2VzOjpXZWJEYXRhYmFzZU1hbmFnZXI6OlNldFF1b3RhRm9yT3JpZ2luKG9y
aWdpbi0+c2VjdXJpdHlPcmlnaW4oKS5kYXRhYmFzZUlkZW50aWZpZXIoKSwgcXVvdGEpKTsKIH0K
IAogdm9pZCBXZWJEYXRhYmFzZU1hbmFnZXJQcm94eTo6ZGlkTW9kaWZ5T3JpZ2luKGNvbnN0IFN0
cmluZyYgb3JpZ2luSWRlbnRpZmllcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJEYXRhYmFzZU1hbmFnZXJQcm94eS5oCShyZXZpc2lvbiAxNzc2OTApCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3Mg
V2ViQ29udGV4dDsKK2NsYXNzIFdlYlByb2Nlc3NQb29sOwogY2xhc3MgV2ViUHJvY2Vzc1Byb3h5
OwogCiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4gQXJyYXlDYWxsYmFjazsK
QEAgLTQ5LDcgKzQ5LDcgQEAgY2xhc3MgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkgOiBwdWJsaWMg
QQogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJD
b250ZXh0Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk+
IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOwogICAgIHZpcnR1YWwgfldlYkRhdGFiYXNlTWFuYWdl
clByb3h5KCk7CiAKICAgICB2b2lkIGluaXRpYWxpemVDbGllbnQoY29uc3QgV0tEYXRhYmFzZU1h
bmFnZXJDbGllbnRCYXNlKik7CkBAIC03NiwxMCArNzYsMTAgQEAgcHVibGljOgogICAgIHVzaW5n
IEFQSTo6T2JqZWN0OjpkZXJlZjsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBXZWJEYXRhYmFz
ZU1hbmFnZXJQcm94eShXZWJDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViRGF0YWJhc2VNYW5h
Z2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsKIAogICAgIC8vIFdlYkNvbnRleHRTdXBwbGVtZW50
Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgcHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgcHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSopIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRUZXJtaW5hdGUoV2ViUHJvY2Vzc1Byb3h5KikgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIHJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkZyYW1lUHJveHkuY3BwCShyZXZpc2lv
biAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViRnJhbWVQcm94eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDExICsyNywxMSBAQAogI2luY2x1ZGUgIldlYkZyYW1lUHJv
eHkuaCIKIAogI2luY2x1ZGUgIldlYkNlcnRpZmljYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkNv
bnRleHQuaCIKICNpbmNsdWRlICJXZWJGb3JtU3VibWlzc2lvbkxpc3RlbmVyUHJveHkuaCIKICNp
bmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKICNpbmNsdWRlICJXZWJQYWdl
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcm9j
ZXNzUG9vbC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRE9NSW1wbGVtZW50YXRpb24uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0ltYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NSU1FVHlwZVJlZ2lzdHJ5
Lmg+CkBAIC00NywxMiArNDcsMTIgQEAgV2ViRnJhbWVQcm94eTo6V2ViRnJhbWVQcm94eShXZWJQ
YWdlUHJveAogICAgICwgbV9pc0ZyYW1lU2V0KGZhbHNlKQogICAgICwgbV9mcmFtZUlEKGZyYW1l
SUQpCiB7Ci0gICAgV2ViQ29udGV4dDo6c3RhdGlzdGljcygpLndrRnJhbWVDb3VudCsrOworICAg
IFdlYlByb2Nlc3NQb29sOjpzdGF0aXN0aWNzKCkud2tGcmFtZUNvdW50Kys7CiB9CiAKIFdlYkZy
YW1lUHJveHk6On5XZWJGcmFtZVByb3h5KCkKIHsKLSAgICBXZWJDb250ZXh0OjpzdGF0aXN0aWNz
KCkud2tGcmFtZUNvdW50LS07CisgICAgV2ViUHJvY2Vzc1Bvb2w6OnN0YXRpc3RpY3MoKS53a0Zy
YW1lQ291bnQtLTsKIH0KIAogdm9pZCBXZWJGcmFtZVByb3h5OjpkaXNjb25uZWN0KCkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkdlb2xvY2F0aW9uTWFu
YWdlclByb3h5LmNwcAkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
OSArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9u
TWFuYWdlclByb3h5LmgiCiAKLSNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2Vi
R2VvbG9jYXRpb25NYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJHZW9sb2NhdGlvbk1h
bmFnZXJQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKQEAgLTM3LDE1ICszNywxNSBAQCBjb25zdCBjaGFyKiBXZWJHZW9s
b2NhdGlvbk1hbmFnZXJQcm94eTo6CiAgICAgcmV0dXJuICJXZWJHZW9sb2NhdGlvbk1hbmFnZXJQ
cm94eSI7CiB9CiAKLVBhc3NSZWZQdHI8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+IFdlYkdl
b2xvY2F0aW9uTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViQ29udGV4dCogY29udGV4dCkKK1Bhc3NS
ZWZQdHI8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+IFdlYkdlb2xvY2F0aW9uTWFuYWdlclBy
b3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQogewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHkoY29udGV4dCkpOworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHkocHJvY2Vzc1Bvb2wp
KTsKIH0KIAotV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk6OldlYkdlb2xvY2F0aW9uTWFuYWdl
clByb3h5KFdlYkNvbnRleHQqIGNvbnRleHQpCi0gICAgOiBXZWJDb250ZXh0U3VwcGxlbWVudChj
b250ZXh0KQorV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk6OldlYkdlb2xvY2F0aW9uTWFuYWdl
clByb3h5KFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKKyAgICA6IFdlYkNvbnRleHRTdXBw
bGVtZW50KHByb2Nlc3NQb29sKQogewotICAgIFdlYkNvbnRleHRTdXBwbGVtZW50Ojpjb250ZXh0
KCktPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJv
eHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIFdlYkNvbnRleHRTdXBwbGVt
ZW50Ojpwcm9jZXNzUG9vbCgpLT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkdlb2xv
Y2F0aW9uTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIH0KIAog
dm9pZCBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eTo6aW5pdGlhbGl6ZVByb3ZpZGVyKGNvbnN0
IFdLR2VvbG9jYXRpb25Qcm92aWRlckJhc2UqIHByb3ZpZGVyKQpAQCAtNTUsNyArNTUsNyBAQCB2
b2lkIFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5Ojppbml0aWFsCiAKIC8vIFdlYkNvbnRleHRT
dXBwbGVtZW50CiAKLXZvaWQgV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk6OmNvbnRleHREZXN0
cm95ZWQoKQordm9pZCBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eTo6cHJvY2Vzc1Bvb2xEZXN0
cm95ZWQoKQogewogICAgIG1fdXBkYXRlUmVxdWVzdGVycy5jbGVhcigpOwogICAgIG1fcHJvdmlk
ZXIuc3RvcFVwZGF0aW5nKHRoaXMpOwpAQCAtNzgsMjQgKzc4LDI0IEBAIHZvaWQgV2ViR2VvbG9j
YXRpb25NYW5hZ2VyUHJveHk6OmRlcmVmV2UKIAogdm9pZCBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQ
cm94eTo6cHJvdmlkZXJEaWRDaGFuZ2VQb3NpdGlvbihXZWJHZW9sb2NhdGlvblBvc2l0aW9uKiBw
b3NpdGlvbikKIHsKLSAgICBpZiAoIWNvbnRleHQoKSkKKyAgICBpZiAoIXByb2Nlc3NQb29sKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnRleHQoKS0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1l
c3NhZ2VzOjpXZWJHZW9sb2NhdGlvbk1hbmFnZXI6OkRpZENoYW5nZVBvc2l0aW9uKHBvc2l0aW9u
LT5kYXRhKCkpKTsKKyAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2Fn
ZXM6OldlYkdlb2xvY2F0aW9uTWFuYWdlcjo6RGlkQ2hhbmdlUG9zaXRpb24ocG9zaXRpb24tPmRh
dGEoKSkpOwogfQogCiB2b2lkIFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5Ojpwcm92aWRlckRp
ZEZhaWxUb0RldGVybWluZVBvc2l0aW9uKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQogewot
ICAgIGlmICghY29udGV4dCgpKQorICAgIGlmICghcHJvY2Vzc1Bvb2woKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgY29udGV4dCgpLT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYkdl
b2xvY2F0aW9uTWFuYWdlcjo6RGlkRmFpbFRvRGV0ZXJtaW5lUG9zaXRpb24oZXJyb3JNZXNzYWdl
KSk7CisgICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJH
ZW9sb2NhdGlvbk1hbmFnZXI6OkRpZEZhaWxUb0RldGVybWluZVBvc2l0aW9uKGVycm9yTWVzc2Fn
ZSkpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TKQogdm9pZCBXZWJHZW9sb2NhdGlvbk1hbmFnZXJQ
cm94eTo6cmVzZXRQZXJtaXNzaW9ucygpCiB7Ci0gICAgY29udGV4dCgpLT5zZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYkdlb2xvY2F0aW9uTWFuYWdlcjo6UmVzZXRQZXJtaXNzaW9ucygp
KTsKKyAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYkdl
b2xvY2F0aW9uTWFuYWdlcjo6UmVzZXRQZXJtaXNzaW9ucygpKTsKIH0KICNlbmRpZgogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViR2VvbG9jYXRpb25NYW5h
Z2VyUHJveHkuaAkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE0ICsz
NiwxNCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViQ29udGV4dDsKIGNsYXNz
IFdlYkdlb2xvY2F0aW9uUG9zaXRpb247CitjbGFzcyBXZWJQcm9jZXNzUG9vbDsKIAogY2xhc3Mg
V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6
T2JqZWN0OjpUeXBlOjpHZW9sb2NhdGlvbk1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBs
ZW1lbnQsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgogICAgIHN0YXRp
YyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8
V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJDb250ZXh0Kik7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQcm9j
ZXNzUG9vbCopOwogCiAgICAgdm9pZCBpbml0aWFsaXplUHJvdmlkZXIoY29uc3QgV0tHZW9sb2Nh
dGlvblByb3ZpZGVyQmFzZSopOwogCkBAIC01NywxMCArNTcsMTAgQEAgcHVibGljOgogICAgIHVz
aW5nIEFQSTo6T2JqZWN0OjpkZXJlZjsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBXZWJHZW9s
b2NhdGlvbk1hbmFnZXJQcm94eShXZWJDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR2VvbG9j
YXRpb25NYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsKIAogICAgIC8vIFdlYkNvbnRleHRT
dXBwbGVtZW50Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSopIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCByZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgdm9pZCBkZXJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNlLmNwcAkocmV2aXNp
b24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkljb25EYXRhYmFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDkgQEAKICNpbmNsdWRlICJXZWJJY29uRGF0
YWJhc2UuaCIKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJXZWJDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiV2ViSWNvbkRhdGFiYXNlTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJJY29u
RGF0YWJhc2VQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ljb25EYXRh
YmFzZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2UuaD4KQEAgLTM5LDIyICszOSwyMiBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBhc3NSZWZQ
dHI8V2ViSWNvbkRhdGFiYXNlPiBXZWJJY29uRGF0YWJhc2U6OmNyZWF0ZShXZWJDb250ZXh0KiBj
b250ZXh0KQorUGFzc1JlZlB0cjxXZWJJY29uRGF0YWJhc2U+IFdlYkljb25EYXRhYmFzZTo6Y3Jl
YXRlKFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFdlYkljb25EYXRhYmFzZSgqY29udGV4dCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
V2ViSWNvbkRhdGFiYXNlKCpwcm9jZXNzUG9vbCkpOwogfQogCiBXZWJJY29uRGF0YWJhc2U6On5X
ZWJJY29uRGF0YWJhc2UoKQogewogfQogCi1XZWJJY29uRGF0YWJhc2U6OldlYkljb25EYXRhYmFz
ZShXZWJDb250ZXh0JiBjb250ZXh0KQotICAgIDogbV93ZWJDb250ZXh0KCZjb250ZXh0KQorV2Vi
SWNvbkRhdGFiYXNlOjpXZWJJY29uRGF0YWJhc2UoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29s
KQorICAgIDogbV9wcm9jZXNzUG9vbCgmcHJvY2Vzc1Bvb2wpCiAgICAgLCBtX3VybEltcG9ydENv
bXBsZXRlZChmYWxzZSkKICAgICAsIG1fZGF0YWJhc2VDbGVhbnVwRGlzYWJsZWQoZmFsc2UpCiAg
ICAgLCBtX3Nob3VsZERlcmVmV2hlbkFwcHJvcHJpYXRlKGZhbHNlKQogewotICAgIG1fd2ViQ29u
dGV4dC0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJY29uRGF0YWJhc2U6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIG1fcHJvY2Vzc1Bvb2wtPmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6V2ViSWNvbkRhdGFiYXNlOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
ICp0aGlzKTsKIH0KIAogdm9pZCBXZWJJY29uRGF0YWJhc2U6OmludmFsaWRhdGUoKQpAQCAtNzUs
NyArNzUsNyBAQCB2b2lkIFdlYkljb25EYXRhYmFzZTo6c2V0RGF0YWJhc2VQYXRoKGNvCiAgICAg
bV9kYXRhYmFzZUNsZWFudXBEaXNhYmxlZCA9IHRydWU7CiAgICAgbV9pY29uRGF0YWJhc2VJbXBs
LT5zZXRFbmFibGVkKHRydWUpOwogCi0gICAgLy8gRklYTUU6IFdlYkljb25EYXRhYmFzZXMgYXJl
IHBlci1XZWJDb250ZXh0IGJ1dCBXZWJDb250ZXh0J3MgZG9uJ3QgaGF2ZSB0aGVpciBvd24gbm90
aW9uIG9mIHRoZSBjdXJyZW50IHByaXZhdGUgYnJvd3Npbmcgc2V0dGluZy4KKyAgICAvLyBGSVhN
RTogV2ViSWNvbkRhdGFiYXNlcyBhcmUgcGVyLVByb2Nlc3NQb29sIGJ1dCBQcm9jZXNzUG9vbHMn
cyBkb24ndCBoYXZlIHRoZWlyIG93biBub3Rpb24gb2YgdGhlIGN1cnJlbnQgcHJpdmF0ZSBicm93
c2luZyBzZXR0aW5nLgogICAgIC8vIEFzIHdlIGNsZWFuIHVwIHByaXZhdGUgYnJvd3NpbmcgdGhy
b3VnaG91dCB0aGUgc3RhY2sgd2UgbmVlZCB0byBjbGVhbiBpdCB1cCBoZXJlLgogICAgIG1faWNv
bkRhdGFiYXNlSW1wbC0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChXZWJQcmVmZXJlbmNlczo6
YW55UGFnZXNBcmVVc2luZ1ByaXZhdGVCcm93c2luZygpKTsKIApAQCAtMTYxLDEyICsxNjEsMTIg
QEAgdm9pZCBXZWJJY29uRGF0YWJhc2U6OmdldExvYWREZWNpc2lvbkZvcgogewogICAgIExPRyhJ
Y29uRGF0YWJhc2UsICJXSzIgVUlQcm9jZXNzIGdldHRpbmcgbG9hZCBkZWNpc2lvbiBmb3IgaWNv
biBVUkwgJXMgd2l0aCBjYWxsYmFjayBJRCAlbGxpIiwgaWNvblVSTC5hc2NpaSgpLmRhdGEoKSwg
c3RhdGljX2Nhc3Q8bG9uZyBsb25nPihjYWxsYmFja0lEKSk7CiAKLSAgICBpZiAoIW1fd2ViQ29u
dGV4dCkKKyAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
ICghbV9pY29uRGF0YWJhc2VJbXBsIHx8ICFtX2ljb25EYXRhYmFzZUltcGwtPmlzT3BlbigpIHx8
IGljb25VUkwuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZJWE1FIChNdWx0aS1XZWJQcm9jZXNz
KTogPHJkYXI6Ly9wcm9ibGVtLzEyMjQwMjIzPiBXZSBuZWVkIHRvIGtub3cgd2hpY2ggY29ubmVj
dGlvbiB0byBzZW5kIHRoaXMgbWVzc2FnZSB0by4KLSAgICAgICAgbV93ZWJDb250ZXh0LT5zZW5k
VG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZVByb3h5OjpSZWNlaXZlZElj
b25Mb2FkRGVjaXNpb24oc3RhdGljX2Nhc3Q8aW50PihJY29uTG9hZE5vKSwgY2FsbGJhY2tJRCkp
OworICAgICAgICBtX3Byb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6Oldl
Ykljb25EYXRhYmFzZVByb3h5OjpSZWNlaXZlZEljb25Mb2FkRGVjaXNpb24oc3RhdGljX2Nhc3Q8
aW50PihJY29uTG9hZE5vKSwgY2FsbGJhY2tJRCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIApAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgV2ViSWNvbkRhdGFiYXNlOjpnZXRMb2FkRGVj
aXNpb25Gb3IKICAgICB9CiAKICAgICAvLyBGSVhNRSAoTXVsdGktV2ViUHJvY2Vzcyk6IDxyZGFy
Oi8vcHJvYmxlbS8xMjI0MDIyMz4gV2UgbmVlZCB0byBrbm93IHdoaWNoIGNvbm5lY3Rpb24gdG8g
c2VuZCB0aGlzIG1lc3NhZ2UgdG8uCi0gICAgbV93ZWJDb250ZXh0LT5zZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZVByb3h5OjpSZWNlaXZlZEljb25Mb2FkRGVjaXNp
b24oKGludClkZWNpc2lvbiwgY2FsbGJhY2tJRCkpOworICAgIG1fcHJvY2Vzc1Bvb2wtPnNlbmRU
b0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViSWNvbkRhdGFiYXNlUHJveHk6OlJlY2VpdmVkSWNv
bkxvYWREZWNpc2lvbigoaW50KWRlY2lzaW9uLCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2Vi
SWNvbkRhdGFiYXNlOjpkaWRSZWNlaXZlSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdl
VVJMKQpAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgV2ViSWNvbkRhdGFiYXNlOjpkaWRSZWNlaXZl
SWNvbkZvclAKIAogSW1hZ2UqIFdlYkljb25EYXRhYmFzZTo6aW1hZ2VGb3JQYWdlVVJMKGNvbnN0
IFN0cmluZyYgcGFnZVVSTCwgY29uc3QgSW50U2l6ZSYgaWNvblNpemUpCiB7Ci0gICAgaWYgKCFt
X3dlYkNvbnRleHQgfHwgIW1faWNvbkRhdGFiYXNlSW1wbCB8fCAhbV9pY29uRGF0YWJhc2VJbXBs
LT5pc09wZW4oKSB8fCBwYWdlVVJMLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wg
fHwgIW1faWNvbkRhdGFiYXNlSW1wbCB8fCAhbV9pY29uRGF0YWJhc2VJbXBsLT5pc09wZW4oKSB8
fCBwYWdlVVJMLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBU
aGUgV2ViQ29yZSBJY29uRGF0YWJhc2UgaWdub3JlcyB0aGUgcGFzc2VkIGluIHNpemUgcGFyYW1l
dGVyLgpAQCAtMjAxLDcgKzIwMSw3IEBAIEltYWdlKiBXZWJJY29uRGF0YWJhc2U6OmltYWdlRm9y
UGFnZVVSTCgKIAogTmF0aXZlSW1hZ2VQdHIgV2ViSWNvbkRhdGFiYXNlOjpuYXRpdmVJbWFnZUZv
clBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMLCBjb25zdCBJbnRTaXplJiBpY29uU2l6ZSkK
IHsKLSAgICBpZiAoIW1fd2ViQ29udGV4dCB8fCAhbV9pY29uRGF0YWJhc2VJbXBsIHx8ICFtX2lj
b25EYXRhYmFzZUltcGwtPmlzT3BlbigpIHx8IHBhZ2VVUkwuaXNFbXB0eSgpKQorICAgIGlmICgh
bV9wcm9jZXNzUG9vbCB8fCAhbV9pY29uRGF0YWJhc2VJbXBsIHx8ICFtX2ljb25EYXRhYmFzZUlt
cGwtPmlzT3BlbigpIHx8IHBhZ2VVUkwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIHJldHVybiBtX2ljb25EYXRhYmFzZUltcGwtPnN5bmNocm9ub3VzTmF0aXZlSWNv
bkZvclBhZ2VVUkwocGFnZVVSTCwgaWNvblNpemUpOwpAQCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQg
V2ViSWNvbkRhdGFiYXNlOjpkaWRSZW1vdmVBbGxJY29ucygKIAogdm9pZCBXZWJJY29uRGF0YWJh
c2U6OmRpZEZpbmlzaFVSTEltcG9ydCgpCiB7Ci0gICAgaWYgKCFtX3dlYkNvbnRleHQpCisgICAg
aWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoIW1fdXJs
SW1wb3J0Q29tcGxldGVkKTsKQEAgLTI3Nyw3ICsyNzcsNyBAQCB2b2lkIFdlYkljb25EYXRhYmFz
ZTo6ZGlkRmluaXNoVVJMSW1wb3J0CiAgICAgICAgIEFTU0VSVChkZWNpc2lvbiAhPSBJY29uTG9h
ZFVua25vd24pOwogCiAgICAgICAgIC8vIEZJWE1FIChNdWx0aS1XZWJQcm9jZXNzKTogPHJkYXI6
Ly9wcm9ibGVtLzEyMjQwMjIzPiBXZSBuZWVkIHRvIGtub3cgd2hpY2ggY29ubmVjdGlvbiB0byBz
ZW5kIHRoaXMgbWVzc2FnZSB0by4KLSAgICAgICAgbV93ZWJDb250ZXh0LT5zZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZVByb3h5OjpSZWNlaXZlZEljb25Mb2FkRGVj
aXNpb24oc3RhdGljX2Nhc3Q8aW50PihkZWNpc2lvbiksIHNsb3Qua2V5KSk7CisgICAgICAgIG1f
cHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViSWNvbkRhdGFiYXNl
UHJveHk6OlJlY2VpdmVkSWNvbkxvYWREZWNpc2lvbihzdGF0aWNfY2FzdDxpbnQ+KGRlY2lzaW9u
KSwgc2xvdC5rZXkpKTsKICAgICB9CiAKICAgICBtX3BlbmRpbmdMb2FkRGVjaXNpb25VUkxNYXAu
Y2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29uRGF0YWJhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSWNvbkRhdGFiYXNl
LmgJKHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJY29u
RGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTUgKzQ0LDE1IEBAIGNsYXNzIEltYWdl
OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViQ29udGV4dDsKK2NsYXNzIFdlYlBy
b2Nlc3NQb29sOwogCiBjbGFzcyBXZWJJY29uRGF0YWJhc2UgOiBwdWJsaWMgQVBJOjpPYmplY3RJ
bXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpJY29uRGF0YWJhc2U+LCBwcml2YXRlIFdlYkNvcmU6Oklj
b25EYXRhYmFzZUNsaWVudCwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViSWNvbkRhdGFiYXNlPiBjcmVhdGUoV2ViQ29udGV4
dCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkljb25EYXRhYmFzZT4gY3JlYXRlKFdlYlBy
b2Nlc3NQb29sKik7CiAgICAgdmlydHVhbCB+V2ViSWNvbkRhdGFiYXNlKCk7CiAKICAgICB2b2lk
IGludmFsaWRhdGUoKTsKLSAgICB2b2lkIGNsZWFyQ29udGV4dCgpIHsgbV93ZWJDb250ZXh0ID0g
bnVsbHB0cjsgfQorICAgIHZvaWQgY2xlYXJQcm9jZXNzUG9vbCgpIHsgbV9wcm9jZXNzUG9vbCA9
IG51bGxwdHI7IH0KICAgICB2b2lkIHNldERhdGFiYXNlUGF0aChjb25zdCBTdHJpbmcmKTsKICAg
ICB2b2lkIGVuYWJsZURhdGFiYXNlQ2xlYW51cCgpOwogCkBAIC04NCwxMyArODQsMTMgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wpOwogCi0gICAg
Ly8gQ2FsbGVkIHdoZW4gdGhlIFdlYkNvbnRleHQgaXMgdGhyb3VnaCB3aXRoIHRoaXMgV2ViSWNv
bkRhdGFiYXNlIGJ1dCB0aGUKKyAgICAvLyBDYWxsZWQgd2hlbiB0aGUgV2ViUHJvY2Vzc1Bvb2wg
aXMgdGhyb3VnaCB3aXRoIHRoaXMgV2ViSWNvbkRhdGFiYXNlIGJ1dCB0aGUKICAgICAvLyBXZWJD
b3JlOjpJY29uRGF0YWJhc2UgcG9zc2libHkgaXNuJ3QgZG9uZSBzaHV0dGluZyBkb3duLgogICAg
IC8vIEluIHRoYXQgY2FzZSB0aGlzIFdlYkljb25EYXRhYmFzZSB3aWxsIGRlcmVmKCkgaXRzZWxm
IHdoZW4gdGhlIHRpbWUgaXMgcmlnaHQuCiAgICAgdm9pZCBkZXJlZldoZW5BcHByb3ByaWF0ZSgp
OwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFdlYkljb25EYXRhYmFzZShXZWJDb250ZXh0Jik7
CisgICAgZXhwbGljaXQgV2ViSWNvbkRhdGFiYXNlKFdlYlByb2Nlc3NQb29sJik7CiAKICAgICAv
LyBXZWJDb3JlOjpJY29uRGF0YWJhc2VDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgZGlkSW1wb3J0
SWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CkBAIC0xMDYsNyArMTA2
LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgbm90aWZ5SWNvbkRhdGFSZWFkeUZvclBhZ2VVUkwo
Y29uc3QgU3RyaW5nJik7CiAKLSAgICBXZWJDb250ZXh0KiBtX3dlYkNvbnRleHQ7CisgICAgV2Vi
UHJvY2Vzc1Bvb2wqIG1fcHJvY2Vzc1Bvb2w7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6SWNvbkRhdGFiYXNlPiBtX2ljb25EYXRhYmFzZUltcGw7CiAgICAgYm9vbCBtX3VybEltcG9y
dENvbXBsZXRlZDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQ
cm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkluc3Bl
Y3RvclByb3h5LmNwcAkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNiBA
QAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNpbmNsdWRlICJBUElVUkxSZXF1ZXN0LmgiCi0j
aW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQ
cm94eS5oIgogI2luY2x1ZGUgIldlYkZyYW1lUHJveHkuaCIKICNpbmNsdWRlICJXZWJJbnNwZWN0
b3JNZXNzYWdlcy5oIgpAQCAtMzksNiArMzgsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5o
IgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgi
CisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHku
aCIKICNpbmNsdWRlIDxXZWJDb3JlL1NjaGVtZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CkBAIC0zNjIsMjAgKzM2MiwyMSBAQCBib29sIFdlYkluc3BlY3RvclBy
b3h5Ojppc0luc3BlY3RvclBhZ2UoCiAgICAgcmV0dXJuIFdlYkluc3BlY3RvclBhZ2VHcm91cHM6
OnNoYXJlZCgpLmlzSW5zcGVjdG9yUGFnZUdyb3VwKHBhZ2UucGFnZUdyb3VwKCkpOwogfQogCi1X
ZWJDb250ZXh0JiBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yQ29udGV4dCgpCitXZWJQcm9j
ZXNzUG9vbCYgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclByb2Nlc3NQb29sKCkKIHsKLSAg
ICAvLyBIYXZpbmcgb3VyIG93biBjb250ZXh0IHJlbW92ZXMgdXMgZnJvbSB0aGUgbWFpbiBjb250
ZXh0J3MgcHJvY2VzcyBwb29sIGFuZAorICAgIC8vIEhhdmluZyBvdXIgb3duIHByb2Nlc3MgcG9v
bCByZW1vdmVzIHVzIGZyb20gdGhlIG1haW4gcHJvY2VzcyBwb29sIGFuZAogICAgIC8vIGd1YXJh
bnRlZXMgbm8gcHJvY2VzcyBzaGFyaW5nIGZvciBvdXIgdXNlciBpbnRlcmZhY2UuCiAKLSAgICBz
dGF0aWMgV2ViQ29udGV4dCogY29udGV4dDsKLSAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAg
V2ViQ29udGV4dENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKLSAgICAgICAgV2ViQ29udGV4
dDo6YXBwbHlQbGF0Zm9ybVNwZWNpZmljQ29uZmlndXJhdGlvbkRlZmF1bHRzKGNvbmZpZ3VyYXRp
b24pOwotICAgICAgICBjb250ZXh0ID0gKFdlYkNvbnRleHQ6OmNyZWF0ZShjb25maWd1cmF0aW9u
KSkubGVha1JlZigpOwotICAgICAgICBjb250ZXh0LT5zZXRQcm9jZXNzTW9kZWwoUHJvY2Vzc01v
ZGVsTXVsdGlwbGVTZWNvbmRhcnlQcm9jZXNzZXMpOworICAgIHN0YXRpYyBXZWJQcm9jZXNzUG9v
bCogcHJvY2Vzc1Bvb2w7CisgICAgaWYgKCFwcm9jZXNzUG9vbCkgeworICAgICAgICBXZWJQcm9j
ZXNzUG9vbENvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKKyAgICAgICAgV2ViUHJvY2Vzc1Bv
b2w6OmFwcGx5UGxhdGZvcm1TcGVjaWZpY0NvbmZpZ3VyYXRpb25EZWZhdWx0cyhjb25maWd1cmF0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIHByb2Nlc3NQb29sID0gKFdlYlByb2Nlc3NQb29sOjpj
cmVhdGUoV1RGOjptb3ZlKGNvbmZpZ3VyYXRpb24pKSkubGVha1JlZigpOworICAgICAgICBwcm9j
ZXNzUG9vbC0+c2V0UHJvY2Vzc01vZGVsKFByb2Nlc3NNb2RlbE11bHRpcGxlU2Vjb25kYXJ5UHJv
Y2Vzc2VzKTsKICAgICB9CiAKLSAgICByZXR1cm4gKmNvbnRleHQ7CisgICAgcmV0dXJuICpwcm9j
ZXNzUG9vbDsKIH0KIAogc3RhdGljIGJvb2wgaXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShjb25z
dCBXZWJJbnNwZWN0b3JQcm94eSogd2ViSW5zcGVjdG9yUHJveHksIFdLVVJMUmVxdWVzdFJlZiBy
ZXF1ZXN0UmVmKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkluc3BlY3RvclBy
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkluc3BlY3Rv
clByb3h5LmgJKHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJJbnNwZWN0b3JQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxMCArNjEsMTAgQEAgT0JK
Q19DTEFTUyBXS1dlYkluc3BlY3RvcldLVmlldzsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNs
YXNzIFdlYkNvbnRleHQ7CiBjbGFzcyBXZWJGcmFtZVByb3h5OwogY2xhc3MgV2ViUGFnZUdyb3Vw
OwogY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiAKIGVudW0gQXR0
YWNobWVudFNpZGUgewogICAgIEF0dGFjaG1lbnRTaWRlQm90dG9tLApAQCAtMTMzLDcgKzEzMyw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIHRvZ2dsZVBhZ2VQcm9maWxpbmcoKTsKIAogICAgIHN0YXRp
YyBib29sIGlzSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkmKTsKLSAgICBzdGF0aWMgV2ViQ29u
dGV4dCYgaW5zcGVjdG9yQ29udGV4dCgpOworICAgIHN0YXRpYyBXZWJQcm9jZXNzUG9vbCYgaW5z
cGVjdG9yUHJvY2Vzc1Bvb2woKTsKIAogICAgIC8vIFByb3ZpZGVkIGJ5IHBsYXRmb3JtIFdlYklu
c3BlY3RvclByb3h5IGltcGxlbWVudGF0aW9ucy4KICAgICBTdHJpbmcgaW5zcGVjdG9yUGFnZVVS
TCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYktleVZhbHVlU3Rv
cmFnZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIK
ICNpbmNsdWRlICJMb2NhbFN0b3JhZ2VEZXRhaWxzLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW5EYXRhLmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQ
b29sLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtNjAsMTMgKzYwLDEzIEBAIFN0cmluZyBXZWJLZXlWYWx1ZVN0b3JhZ2VN
YW5hZ2VyOjptb2RpZmkKICAgICByZXR1cm4ga2V5OwogfQogCi1QYXNzUmVmUHRyPFdlYktleVZh
bHVlU3RvcmFnZU1hbmFnZXI+IFdlYktleVZhbHVlU3RvcmFnZU1hbmFnZXI6OmNyZWF0ZShXZWJD
b250ZXh0KiBjb250ZXh0KQorUGFzc1JlZlB0cjxXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyPiBX
ZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyOjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQ
b29sKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdl
cihjb250ZXh0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJLZXlWYWx1ZVN0b3JhZ2VN
YW5hZ2VyKHByb2Nlc3NQb29sKSk7CiB9CiAKLVdlYktleVZhbHVlU3RvcmFnZU1hbmFnZXI6Oldl
YktleVZhbHVlU3RvcmFnZU1hbmFnZXIoV2ViQ29udGV4dCogY29udGV4dCkKLSAgICA6IFdlYkNv
bnRleHRTdXBwbGVtZW50KGNvbnRleHQpCitXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyOjpXZWJL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyKFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKKyAgICA6
IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nlc3NQb29sKQogewogfQogCkBAIC04OCw3ICs4OCw3
IEBAIHZvaWQgV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlcjo6ZGVyZWZXZWIKIAogdm9pZCBXZWJL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyOjpnZXRLZXlWYWx1ZVN0b3JhZ2VPcmlnaW5zKHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoQVBJOjpBcnJheSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1
bmN0aW9uKQogewotICAgIGNvbnRleHQoKS0+c3RvcmFnZU1hbmFnZXIoKS5nZXRPcmlnaW5zKFtj
YWxsYmFja0Z1bmN0aW9uXShWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4gc2VjdXJpdHlP
cmlnaW5zKSB7CisgICAgcHJvY2Vzc1Bvb2woKS0+c3RvcmFnZU1hbmFnZXIoKS5nZXRPcmlnaW5z
KFtjYWxsYmFja0Z1bmN0aW9uXShWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4gc2VjdXJp
dHlPcmlnaW5zKSB7CiAgICAgICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiB3ZWJTZWN1
cml0eU9yaWdpbnM7CiAgICAgICAgIHdlYlNlY3VyaXR5T3JpZ2lucy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHNlY3VyaXR5T3JpZ2lucy5zaXplKCkpOwogICAgICAgICBmb3IgKGF1dG8mIG9yaWdp
biA6IHNlY3VyaXR5T3JpZ2lucykKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIFdlYktleVZhbHVl
U3RvcmFnZU1hbmFnZXI6OmdldEtleVZhCiAKIHZvaWQgV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdl
cjo6Z2V0U3RvcmFnZURldGFpbHNCeU9yaWdpbihzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFQSTo6QXJy
YXkqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAgICBjb250
ZXh0KCktPnN0b3JhZ2VNYW5hZ2VyKCkuZ2V0U3RvcmFnZURldGFpbHNCeU9yaWdpbihbY2FsbGJh
Y2tGdW5jdGlvbl0oVmVjdG9yPExvY2FsU3RvcmFnZURldGFpbHM+IHN0b3JhZ2VEZXRhaWxzKSB7
CisgICAgcHJvY2Vzc1Bvb2woKS0+c3RvcmFnZU1hbmFnZXIoKS5nZXRTdG9yYWdlRGV0YWlsc0J5
T3JpZ2luKFtjYWxsYmFja0Z1bmN0aW9uXShWZWN0b3I8TG9jYWxTdG9yYWdlRGV0YWlscz4gc3Rv
cmFnZURldGFpbHMpIHsKICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxBUEk6Ok9iamVj
dD4+IGRldGFpbHNNYXA7CiAgICAgICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiByZXN1
bHQ7CiAgICAgICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHN0b3JhZ2VEZXRhaWxz
LnNpemUoKSk7CkBAIC0xMjUsMTIgKzEyNSwxMiBAQCB2b2lkIFdlYktleVZhbHVlU3RvcmFnZU1h
bmFnZXI6OmdldFN0b3JhCiAKIHZvaWQgV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlcjo6ZGVsZXRl
RW50cmllc0Zvck9yaWdpbihBUEk6OlNlY3VyaXR5T3JpZ2luKiBvcmlnaW4pCiB7Ci0gICAgY29u
dGV4dCgpLT5zdG9yYWdlTWFuYWdlcigpLmRlbGV0ZUVudHJpZXNGb3JPcmlnaW4ob3JpZ2luLT5z
ZWN1cml0eU9yaWdpbigpKTsKKyAgICBwcm9jZXNzUG9vbCgpLT5zdG9yYWdlTWFuYWdlcigpLmRl
bGV0ZUVudHJpZXNGb3JPcmlnaW4ob3JpZ2luLT5zZWN1cml0eU9yaWdpbigpKTsKIH0KIAogdm9p
ZCBXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyOjpkZWxldGVBbGxFbnRyaWVzKCkKIHsKLSAgICBj
b250ZXh0KCktPnN0b3JhZ2VNYW5hZ2VyKCkuZGVsZXRlQWxsRW50cmllcygpOworICAgIHByb2Nl
c3NQb29sKCktPnN0b3JhZ2VNYW5hZ2VyKCkuZGVsZXRlQWxsRW50cmllcygpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJLZXlW
YWx1ZVN0b3JhZ2VNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXIuaAkocmV2aXNpb24gMTc3NjkwKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYktleVZhbHVlU3RvcmFnZU1hbmFnZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsMTMgKzM2LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFz
cyBXZWJQcm9jZXNzUG9vbDsKIHR5cGVkZWYgR2VuZXJpY0NhbGxiYWNrPEFQSTo6QXJyYXkqPiBB
cnJheUNhbGxiYWNrOwogCiBjbGFzcyBXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyIDogcHVibGlj
IEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6S2V5VmFsdWVTdG9yYWdlTWFuYWdl
cj4sIHB1YmxpYyBXZWJDb250ZXh0U3VwcGxlbWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJL
ZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyPiBjcmVhdGUoV2ViQ29udGV4dCopOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdlYktleVZhbHVlU3RvcmFnZU1hbmFnZXI+IGNyZWF0ZShXZWJQcm9jZXNzUG9v
bCopOwogICAgIHZpcnR1YWwgfldlYktleVZhbHVlU3RvcmFnZU1hbmFnZXIoKTsKIAogICAgIHZv
aWQgZ2V0S2V5VmFsdWVTdG9yYWdlT3JpZ2lucyhzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFQSTo6QXJy
YXkqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOwpAQCAtNTgsNyArNTksNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFN0cmluZyBtb2RpZmljYXRpb25UaW1lS2V5KCk7CiAKIHByaXZhdGU6Ci0gICAg
ZXhwbGljaXQgV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlcihXZWJDb250ZXh0Kik7CisgICAgZXhw
bGljaXQgV2ViS2V5VmFsdWVTdG9yYWdlTWFuYWdlcihXZWJQcm9jZXNzUG9vbCopOwogCiAgICAg
Ly8gV2ViQ29udGV4dFN1cHBsZW1lbnQKICAgICB2aXJ0dWFsIHZvaWQgcmVmV2ViQ29udGV4dFN1
cHBsZW1lbnQoKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJN
ZWRpYUNhY2hlTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eS5jcHAJKHJldmlzaW9uIDE3NzY5MCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTAgKzI3LDkgQEAKICNpbmNsdWRlICJXZWJNZWRpYUNh
Y2hlTWFuYWdlclByb3h5LmgiCiAKICNpbmNsdWRlICJBUElBcnJheS5oIgotI2luY2x1ZGUgIkFQ
SVNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldl
Yk1lZGlhQ2FjaGVNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJNZWRpYUNhY2hlTWFu
YWdlclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIApAQCAtMzksMTUgKzM4LDE1IEBAIGNvbnN0IGNoYXIqIFdlYk1lZGlh
Q2FjaGVNYW5hZ2VyUHJveHk6OnMKICAgICByZXR1cm4gIldlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJv
eHkiOwogfQogCi1QYXNzUmVmUHRyPFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHk+IFdlYk1lZGlh
Q2FjaGVNYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJDb250ZXh0KiBjb250ZXh0KQorUGFzc1JlZlB0
cjxXZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5PiBXZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5Ojpj
cmVhdGUoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eShjb250ZXh0KSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBXZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5KHByb2Nlc3NQb29sKSk7CiB9CiAK
LVdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHk6OldlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkoV2Vi
Q29udGV4dCogY29udGV4dCkKLSAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50KGNvbnRleHQpCitX
ZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5OjpXZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5KFdlYlBy
b2Nlc3NQb29sKiBwcm9jZXNzUG9vbCkKKyAgICA6IFdlYkNvbnRleHRTdXBwbGVtZW50KHByb2Nl
c3NQb29sKQogewotICAgIFdlYkNvbnRleHRTdXBwbGVtZW50Ojpjb250ZXh0KCktPmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCAqdGhpcyk7CisgICAgV2ViQ29udGV4dFN1cHBsZW1lbnQ6OnByb2Nlc3NQ
b29sKCktPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViTWVkaWFDYWNoZU1hbmFnZXJQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAqdGhpcyk7CiB9CiAKIFdlYk1lZGlhQ2FjaGVN
YW5hZ2VyUHJveHk6On5XZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5KCkKQEAgLTU2LDcgKzU1LDcg
QEAgV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eTo6fldlYk1lZGlhQ2FjaAogCiAvLyBXZWJDb250
ZXh0U3VwcGxlbWVudAogCi12b2lkIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHk6OmNvbnRleHRE
ZXN0cm95ZWQoKQordm9pZCBXZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERl
c3Ryb3llZCgpCiB7CiAgICAgaW52YWxpZGF0ZUNhbGxiYWNrTWFwKG1fYXJyYXlDYWxsYmFja3Ms
IENhbGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVyV2FzSW52YWxpZGF0ZWQpOwogfQpAQCAtODgsNyAr
ODcsNyBAQCB2b2lkIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHk6OmdldEhvc3RuCiAgICAgbV9h
cnJheUNhbGxiYWNrcy5zZXQoY2FsbGJhY2tJRCwgY2FsbGJhY2sucmVsZWFzZSgpKTsKIAogICAg
IC8vIEZJWE1FIChNdWx0aS1XZWJQcm9jZXNzKTogPHJkYXI6Ly9wcm9ibGVtLzEyMjM5NzY1PiBX
aGVuIHdlJ3JlIHNlbmRpbmcgdGhpcyB0byBtdWx0aXBsZSBwcm9jZXNzZXMsIHdlIG5lZWQgdG8g
YWdncmVnYXRlIHRoZSBjYWxsYmFjayBkYXRhIHdoZW4gaXQgY29tZXMgYmFjay4KLSAgICBjb250
ZXh0KCktPnNlbmRUb0FsbFByb2Nlc3Nlc1JlbGF1bmNoaW5nVGhlbUlmTmVjZXNzYXJ5KE1lc3Nh
Z2VzOjpXZWJNZWRpYUNhY2hlTWFuYWdlcjo6R2V0SG9zdG5hbWVzV2l0aE1lZGlhQ2FjaGUoY2Fs
bGJhY2tJRCkpOworICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb0FsbFByb2Nlc3Nlc1JlbGF1bmNo
aW5nVGhlbUlmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJNZWRpYUNhY2hlTWFuYWdlcjo6R2V0SG9z
dG5hbWVzV2l0aE1lZGlhQ2FjaGUoY2FsbGJhY2tJRCkpOwogfQogICAgIAogdm9pZCBXZWJNZWRp
YUNhY2hlTWFuYWdlclByb3h5OjpkaWRHZXRIb3N0bmFtZXNXaXRoTWVkaWFDYWNoZShjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgaG9zdG5hbWVzLCB1aW50NjRfdCBjYWxsYmFja0lEKQpAQCAtMTA0LDEy
ICsxMDMsMTIgQEAgdm9pZCBXZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5OjpkaWRHZXRIbwogCiB2
b2lkIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHk6OmNsZWFyQ2FjaGVGb3JIb3N0bmFtZShjb25z
dCBTdHJpbmcmIGhvc3RuYW1lKQogewotICAgIGNvbnRleHQoKS0+c2VuZFRvQWxsUHJvY2Vzc2Vz
UmVsYXVuY2hpbmdUaGVtSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYk1lZGlhQ2FjaGVNYW5hZ2Vy
OjpDbGVhckNhY2hlRm9ySG9zdG5hbWUoaG9zdG5hbWUpKTsKKyAgICBwcm9jZXNzUG9vbCgpLT5z
ZW5kVG9BbGxQcm9jZXNzZXNSZWxhdW5jaGluZ1RoZW1JZk5lY2Vzc2FyeShNZXNzYWdlczo6V2Vi
TWVkaWFDYWNoZU1hbmFnZXI6OkNsZWFyQ2FjaGVGb3JIb3N0bmFtZShob3N0bmFtZSkpOwogfQog
CiB2b2lkIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHk6OmNsZWFyQ2FjaGVGb3JBbGxIb3N0bmFt
ZXMoKQogewotICAgIGNvbnRleHQoKS0+c2VuZFRvQWxsUHJvY2Vzc2VzUmVsYXVuY2hpbmdUaGVt
SWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYk1lZGlhQ2FjaGVNYW5hZ2VyOjpDbGVhckNhY2hlRm9y
QWxsSG9zdG5hbWVzKCkpOworICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb0FsbFByb2Nlc3Nlc1Jl
bGF1bmNoaW5nVGhlbUlmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJNZWRpYUNhY2hlTWFuYWdlcjo6
Q2xlYXJDYWNoZUZvckFsbEhvc3RuYW1lcygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJNZWRpYUNhY2hl
TWFuYWdlclByb3h5LmgJKHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJNZWRpYUNhY2hlTWFuYWdlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcg
KzM2LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFdlYkNvbnRleHQ7CitjbGFz
cyBXZWJQcm9jZXNzUG9vbDsKIGNsYXNzIFdlYlByb2Nlc3NQcm94eTsKIAogdHlwZWRlZiBHZW5l
cmljQ2FsbGJhY2s8QVBJOjpBcnJheSo+IEFycmF5Q2FsbGJhY2s7CkBAIC00NSw3ICs0NSw3IEBA
IGNsYXNzIFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkgOiBwdWJsaWMKIHB1YmxpYzoKICAgICBz
dGF0aWMgY29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJDb250ZXh0Kik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYlBy
b2Nlc3NQb29sKik7CiAgICAgdmlydHVhbCB+V2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eSgpOwog
ICAgIAogICAgIHZvaWQgZ2V0SG9zdG5hbWVzV2l0aE1lZGlhQ2FjaGUoc3RkOjpmdW5jdGlvbjx2
b2lkIChBUEk6OkFycmF5KiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKQEAgLTU2LDEyICs1Niwx
MiBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQVBJOjpPYmplY3Q6OmRlcmVmOwogCiBwcml2YXRlOgot
ICAgIGV4cGxpY2l0IFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkoV2ViQ29udGV4dCopOworICAg
IGV4cGxpY2l0IFdlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsKIAog
ICAgIHZvaWQgZGlkR2V0SG9zdG5hbWVzV2l0aE1lZGlhQ2FjaGUoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKIAogICAgIC8vIFdlYkNvbnRleHRTdXBwbGVtZW50
Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgcHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgcHJvY2Vzc0RpZENsb3NlKFdlYlByb2Nlc3NQcm94eSopIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRUZXJtaW5hdGUoV2ViUHJvY2Vzc1Byb3h5KikgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIHJlZldlYkNvbnRleHRTdXBwbGVtZW50KCkgb3ZlcnJpZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYk9yaWdpbkRhdGFN
YW5hZ2VyUHJveHkuY3BwCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDkgKzI4LDkgQEAKIAogI2luY2x1ZGUgIkFQSVNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW5EYXRhLmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUg
IldlYk9yaWdpbkRhdGFNYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJPcmlnaW5EYXRh
TWFuYWdlclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
QEAgLTQyLDE1ICs0MiwxNSBAQCBjb25zdCBjaGFyKiBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5
OjpzCiAgICAgcmV0dXJuICJXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5IjsKIH0KIAotUGFzc1Jl
ZlB0cjxXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5PiBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5
OjpjcmVhdGUoV2ViQ29udGV4dCogY29udGV4dCkKK1Bhc3NSZWZQdHI8V2ViT3JpZ2luRGF0YU1h
bmFnZXJQcm94eT4gV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eTo6Y3JlYXRlKFdlYlByb2Nlc3NQ
b29sKiBwcm9jZXNzUG9vbCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYk9yaWdpbkRh
dGFNYW5hZ2VyUHJveHkoY29udGV4dCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViT3Jp
Z2luRGF0YU1hbmFnZXJQcm94eShwcm9jZXNzUG9vbCkpOwogfQogCi1XZWJPcmlnaW5EYXRhTWFu
YWdlclByb3h5OjpXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5KFdlYkNvbnRleHQqIGNvbnRleHQp
Ci0gICAgOiBXZWJDb250ZXh0U3VwcGxlbWVudChjb250ZXh0KQorV2ViT3JpZ2luRGF0YU1hbmFn
ZXJQcm94eTo6V2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCogcHJvY2Vz
c1Bvb2wpCisgICAgOiBXZWJDb250ZXh0U3VwcGxlbWVudChwcm9jZXNzUG9vbCkKIHsKLSAgICBj
b250ZXh0LT5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYk9yaWdpbkRhdGFNYW5hZ2Vy
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIHByb2Nlc3NQb29sLT5h
ZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOwogfQogCiBXZWJPcmlnaW5EYXRhTWFuYWdlclBy
b3h5Ojp+V2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eSgpCkBAIC01OCw3ICs1OCw3IEBAIFdlYk9y
aWdpbkRhdGFNYW5hZ2VyUHJveHk6On5XZWJPcmlnaW5EYXQKIH0KIAogCi12b2lkIFdlYk9yaWdp
bkRhdGFNYW5hZ2VyUHJveHk6OmNvbnRleHREZXN0cm95ZWQoKQordm9pZCBXZWJPcmlnaW5EYXRh
TWFuYWdlclByb3h5Ojpwcm9jZXNzUG9vbERlc3Ryb3llZCgpCiB7CiAgICAgaW52YWxpZGF0ZUNh
bGxiYWNrTWFwKG1fYXJyYXlDYWxsYmFja3MsIENhbGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVyV2Fz
SW52YWxpZGF0ZWQpOwogfQpAQCAtMTU1LDkgKzE1NSw5IEBAIHN0YXRpYyBzdGQ6OnBhaXI8UmVm
UHRyPENhbGxiYWNrU3luY2hyb24KIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENhbGxiYWNrVHlw
ZSwgdHlwZW5hbWUgTWVzc2FnZVR5cGUsIHR5cGVuYW1lLi4uIFBhcmFtZXRlcnM+Ci1zdGF0aWMg
dm9pZCBzZW5kTWVzc2FnZVRvQWxsUHJvY2Vzc2VzSW5Db250ZXh0KFdlYkNvbnRleHQqIGNvbnRl
eHQsIHR5cGVuYW1lIENhbGxiYWNrVHlwZTo6Q2FsbGJhY2tGdW5jdGlvbiBjYWxsYmFjaywgSGFz
aE1hcDx1aW50NjRfdCwgUmVmUHRyPENhbGxiYWNrVHlwZT4+JiBjYWxsYmFja1N0b3JhZ2UsIFBh
cmFtZXRlcnMuLi4gcGFyYW1ldGVycykKK3N0YXRpYyB2b2lkIHNlbmRNZXNzYWdlVG9BbGxQcm9j
ZXNzZXNJblByb2Nlc3NQb29sKFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCwgdHlwZW5hbWUg
Q2FsbGJhY2tUeXBlOjpDYWxsYmFja0Z1bmN0aW9uIGNhbGxiYWNrLCBIYXNoTWFwPHVpbnQ2NF90
LCBSZWZQdHI8Q2FsbGJhY2tUeXBlPj4mIGNhbGxiYWNrU3RvcmFnZSwgUGFyYW1ldGVycy4uLiBw
YXJhbWV0ZXJzKQogewotICAgIGlmICghY29udGV4dCkgeworICAgIGlmICghcHJvY2Vzc1Bvb2wp
IHsKICAgICAgICAgQ2FsbGJhY2tUeXBlOjpjcmVhdGUoY2FsbGJhY2spLT5pbnZhbGlkYXRlKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNjYsNyArMTY2LDcgQEAgc3RhdGljIHZvaWQg
c2VuZE1lc3NhZ2VUb0FsbFByb2Nlc3Nlc0luQwogICAgIFJlZlB0cjxDYWxsYmFja1N5bmNocm9u
aXplcj4gc3luY2hyb25pemVyID0gc3luY2hyb25pemVyQW5kQ2FsbGJhY2suZmlyc3Q7CiAgICAg
YXV0byBwZXJQcm9jZXNzQ2FsbGJhY2sgPSBzeW5jaHJvbml6ZXJBbmRDYWxsYmFjay5zZWNvbmQ7
CiAKLSAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBjb250ZXh0LT5wcm9jZXNzZXMoKSkgeworICAg
IGZvciAoYXV0byYgcHJvY2VzcyA6IHByb2Nlc3NQb29sLT5wcm9jZXNzZXMoKSkgewogICAgICAg
ICBpZiAoIXByb2Nlc3MgfHwgIXByb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIApAQCAtMTgyLDEzICsxODIsMTMgQEAgc3RhdGljIHZvaWQgc2VuZE1lc3Nh
Z2VUb0FsbFByb2Nlc3Nlc0luQwogICAgICAgICBSZWZQdHI8Q2FsbGJhY2tUeXBlPiBjYWxsYmFj
ayA9IENhbGxiYWNrVHlwZTo6Y3JlYXRlKHBlclByb2Nlc3NDYWxsYmFjayk7CiAgICAgICAgIHVp
bnQ2NF90IGNhbGxiYWNrSUQgPSBjYWxsYmFjay0+Y2FsbGJhY2tJRCgpOwogICAgICAgICBjYWxs
YmFja1N0b3JhZ2Uuc2V0KGNhbGxiYWNrSUQsIGNhbGxiYWNrLnJlbGVhc2UoKSk7Ci0gICAgICAg
IGNvbnRleHQtPnNlbmRUb0RhdGFiYXNlUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVz
c2FnZVR5cGUocGFyYW1ldGVycy4uLiwgY2FsbGJhY2tJRCkpOworICAgICAgICBwcm9jZXNzUG9v
bC0+c2VuZFRvRGF0YWJhc2VQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShNZXNzYWdlVHlw
ZShwYXJhbWV0ZXJzLi4uLCBjYWxsYmFja0lEKSk7CiAgICAgfQogfQogCiB2b2lkIFdlYk9yaWdp
bkRhdGFNYW5hZ2VyUHJveHk6OmdldE9yaWdpbnMoV0tPcmlnaW5EYXRhVHlwZXMgdHlwZXMsIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoQVBJOjpBcnJheSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxs
YmFja0Z1bmN0aW9uKQogewotICAgIHNlbmRNZXNzYWdlVG9BbGxQcm9jZXNzZXNJbkNvbnRleHQ8
QXJyYXlDYWxsYmFjaywgTWVzc2FnZXM6OldlYk9yaWdpbkRhdGFNYW5hZ2VyOjpHZXRPcmlnaW5z
Pihjb250ZXh0KCksIGNhbGxiYWNrRnVuY3Rpb24sIG1fYXJyYXlDYWxsYmFja3MsIHR5cGVzKTsK
KyAgICBzZW5kTWVzc2FnZVRvQWxsUHJvY2Vzc2VzSW5Qcm9jZXNzUG9vbDxBcnJheUNhbGxiYWNr
LCBNZXNzYWdlczo6V2ViT3JpZ2luRGF0YU1hbmFnZXI6OkdldE9yaWdpbnM+KHByb2Nlc3NQb29s
KCksIGNhbGxiYWNrRnVuY3Rpb24sIG1fYXJyYXlDYWxsYmFja3MsIHR5cGVzKTsKIH0KIAogdm9p
ZCBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5OjpkaWRHZXRPcmlnaW5zKElQQzo6Q29ubmVjdGlv
biogY29ubmVjdGlvbiwgY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbklk
ZW50aWZpZXJzLCB1aW50NjRfdCBjYWxsYmFja0lEKQpAQCAtMjEyLDEyICsyMTIsMTIgQEAgdm9p
ZCBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5OjpkZWxldGVFbgogICAgIHNlY3VyaXR5T3JpZ2lu
RGF0YS5ob3N0ID0gb3JpZ2luLT5zZWN1cml0eU9yaWdpbigpLmhvc3QoKTsKICAgICBzZWN1cml0
eU9yaWdpbkRhdGEucG9ydCA9IG9yaWdpbi0+c2VjdXJpdHlPcmlnaW4oKS5wb3J0KCk7CiAKLSAg
ICBzZW5kTWVzc2FnZVRvQWxsUHJvY2Vzc2VzSW5Db250ZXh0PFZvaWRDYWxsYmFjaywgTWVzc2Fn
ZXM6OldlYk9yaWdpbkRhdGFNYW5hZ2VyOjpEZWxldGVFbnRyaWVzRm9yT3JpZ2luPihjb250ZXh0
KCksIGNhbGxiYWNrRnVuY3Rpb24sIG1fdm9pZENhbGxiYWNrcywgdHlwZXMsIHNlY3VyaXR5T3Jp
Z2luRGF0YSk7CisgICAgc2VuZE1lc3NhZ2VUb0FsbFByb2Nlc3Nlc0luUHJvY2Vzc1Bvb2w8Vm9p
ZENhbGxiYWNrLCBNZXNzYWdlczo6V2ViT3JpZ2luRGF0YU1hbmFnZXI6OkRlbGV0ZUVudHJpZXNG
b3JPcmlnaW4+KHByb2Nlc3NQb29sKCksIGNhbGxiYWNrRnVuY3Rpb24sIG1fdm9pZENhbGxiYWNr
cywgdHlwZXMsIHNlY3VyaXR5T3JpZ2luRGF0YSk7CiB9CiAKIHZvaWQgV2ViT3JpZ2luRGF0YU1h
bmFnZXJQcm94eTo6ZGVsZXRlRW50cmllc01vZGlmaWVkQmV0d2VlbkRhdGVzKFdLT3JpZ2luRGF0
YVR5cGVzIHR5cGVzLCBkb3VibGUgc3RhcnREYXRlLCBkb3VibGUgZW5kRGF0ZSwgc3RkOjpmdW5j
dGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4gY2FsbGJhY2tGdW5jdGlvbikKIHsKLSAg
ICBzZW5kTWVzc2FnZVRvQWxsUHJvY2Vzc2VzSW5Db250ZXh0PFZvaWRDYWxsYmFjaywgTWVzc2Fn
ZXM6OldlYk9yaWdpbkRhdGFNYW5hZ2VyOjpEZWxldGVFbnRyaWVzTW9kaWZpZWRCZXR3ZWVuRGF0
ZXM+KGNvbnRleHQoKSwgY2FsbGJhY2tGdW5jdGlvbiwgbV92b2lkQ2FsbGJhY2tzLCB0eXBlcywg
c3RhcnREYXRlLCBlbmREYXRlKTsKKyAgICBzZW5kTWVzc2FnZVRvQWxsUHJvY2Vzc2VzSW5Qcm9j
ZXNzUG9vbDxWb2lkQ2FsbGJhY2ssIE1lc3NhZ2VzOjpXZWJPcmlnaW5EYXRhTWFuYWdlcjo6RGVs
ZXRlRW50cmllc01vZGlmaWVkQmV0d2VlbkRhdGVzPihwcm9jZXNzUG9vbCgpLCBjYWxsYmFja0Z1
bmN0aW9uLCBtX3ZvaWRDYWxsYmFja3MsIHR5cGVzLCBzdGFydERhdGUsIGVuZERhdGUpOwogfQog
CiB2b2lkIFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk6OmRpZERlbGV0ZUVudHJpZXMoSVBDOjpD
b25uZWN0aW9uKiBjb25uZWN0aW9uLCB1aW50NjRfdCBjYWxsYmFja0lEKQpAQCAtMjI5LDcgKzIy
OSw3IEBAIHZvaWQgV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eTo6ZGlkRGVsZXQKIAogdm9pZCBX
ZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5OjpkZWxldGVBbGxFbnRyaWVzKFdLT3JpZ2luRGF0YVR5
cGVzIHR5cGVzLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxs
YmFja0Z1bmN0aW9uKQogewotICAgIHNlbmRNZXNzYWdlVG9BbGxQcm9jZXNzZXNJbkNvbnRleHQ8
Vm9pZENhbGxiYWNrLCBNZXNzYWdlczo6V2ViT3JpZ2luRGF0YU1hbmFnZXI6OkRlbGV0ZUFsbEVu
dHJpZXM+KGNvbnRleHQoKSwgY2FsbGJhY2tGdW5jdGlvbiwgbV92b2lkQ2FsbGJhY2tzLCB0eXBl
cyk7CisgICAgc2VuZE1lc3NhZ2VUb0FsbFByb2Nlc3Nlc0luUHJvY2Vzc1Bvb2w8Vm9pZENhbGxi
YWNrLCBNZXNzYWdlczo6V2ViT3JpZ2luRGF0YU1hbmFnZXI6OkRlbGV0ZUFsbEVudHJpZXM+KHBy
b2Nlc3NQb29sKCksIGNhbGxiYWNrRnVuY3Rpb24sIG1fdm9pZENhbGxiYWNrcywgdHlwZXMpOwog
fQogCiB2b2lkIFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk6OmRpZERlbGV0ZUFsbEVudHJpZXMo
SVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCB1aW50NjRfdCBjYWxsYmFja0lEKQpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViT3JpZ2luRGF0YU1hbmFnZXJQ
cm94eS5oCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
T3JpZ2luRGF0YU1hbmFnZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBA
IGNsYXNzIENvbm5lY3Rpb247CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBXZWJQcm9j
ZXNzUG9vbDsKIHN0cnVjdCBTZWN1cml0eU9yaWdpbkRhdGE7CiAKIHR5cGVkZWYgR2VuZXJpY0Nh
bGxiYWNrPEFQSTo6QXJyYXkqPiBBcnJheUNhbGxiYWNrOwpAQCAtNDksNyArNTAsNyBAQCBjbGFz
cyBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5IDogcHVibGljCiBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
ZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViQ29udGV4dCopOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk+IGNyZWF0ZShXZWJQcm9jZXNz
UG9vbCopOwogICAgIHZpcnR1YWwgfldlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHkoKTsKIAogICAg
IHZvaWQgZ2V0T3JpZ2lucyhXS09yaWdpbkRhdGFUeXBlcywgc3RkOjpmdW5jdGlvbjx2b2lkIChB
UEk6OkFycmF5KiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+KTsKQEAgLTY0LDE0ICs2NSwxNCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biosIElQQzo6TWVzc2FnZURlY29kZXImKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBleHBs
aWNpdCBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5KFdlYkNvbnRleHQqKTsKKyAgICBleHBsaWNp
dCBXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5KFdlYlByb2Nlc3NQb29sKik7CiAKICAgICB2b2lk
IGRpZEdldE9yaWdpbnMoSVBDOjpDb25uZWN0aW9uKiwgY29uc3QgVmVjdG9yPFNlY3VyaXR5T3Jp
Z2luRGF0YT4mLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKICAgICB2b2lkIGRpZERlbGV0ZUVudHJp
ZXMoSVBDOjpDb25uZWN0aW9uKiwgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9pZCBkaWRE
ZWxldGVBbGxFbnRyaWVzKElQQzo6Q29ubmVjdGlvbiosIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwog
CiAgICAgLy8gV2ViQ29udGV4dFN1cHBsZW1lbnQKLSAgICB2aXJ0dWFsIHZvaWQgY29udGV4dERl
c3Ryb3llZCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzUG9vbERlc3Ryb3ll
ZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vz
c1Byb3h5Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFRlcm1pbmF0ZShXZWJQ
cm9jZXNzUHJveHkqKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVmV2ViQ29u
dGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNiBA
QAogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3
YXJkTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJXZWJDZXJ0aWZpY2F0ZUluZm8uaCIKLSNpbmNsdWRl
ICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVQcm94eS5oIgogI2luY2x1
ZGUgIldlYkNvbnRleHRVc2VyTWVzc2FnZUNvZGVycy5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1
bWVudENvZGVycy5oIgpAQCAtODYsNiArODUsNyBAQAogI2luY2x1ZGUgIldlYlBvcHVwTWVudVBy
b3h5LmgiCiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNz
TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb3RlY3Rpb25TcGFjZS5oIgogI2luY2x1ZGUg
IldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmgiCkBAIC00MDIsNyArNDAyLDcgQEAgV2Vi
UGFnZVByb3h5OjpXZWJQYWdlUHJveHkoUGFnZUNsaWVudCYgcAogICAgIHdlYlBhZ2VQcm94eUNv
dW50ZXIuaW5jcmVtZW50KCk7CiAjZW5kaWYKIAotICAgIFdlYkNvbnRleHQ6OnN0YXRpc3RpY3Mo
KS53a1BhZ2VDb3VudCsrOworICAgIFdlYlByb2Nlc3NQb29sOjpzdGF0aXN0aWNzKCkud2tQYWdl
Q291bnQrKzsKIAogICAgIG1fcHJlZmVyZW5jZXMtPmFkZFBhZ2UoKnRoaXMpOwogICAgIG1fcGFn
ZUdyb3VwLT5hZGRQYWdlKHRoaXMpOwpAQCAtNDI0LDcgKzQyNCw3IEBAIFdlYlBhZ2VQcm94eTo6
V2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmIHAKIAogICAgIC8vIEZJWE1FOiBJZiB3ZSBldmVyIGV4
cG9zZSB0aGUgc2Vzc2lvbiBzdG9yYWdlIHNpemUgYXMgYSBwcmVmZXJlbmNlLCB3ZSBuZWVkIHRv
IHBhc3MgaXQgaGVyZS4KICAgICBJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24gPSBtX3Byb2Nl
c3MtPnN0YXRlKCkgPT0gV2ViUHJvY2Vzc1Byb3h5OjpTdGF0ZTo6UnVubmluZyA/IG1fcHJvY2Vz
cy0+Y29ubmVjdGlvbigpIDogbnVsbHB0cjsKLSAgICBtX3Byb2Nlc3MtPmNvbnRleHQoKS5zdG9y
YWdlTWFuYWdlcigpLmNyZWF0ZVNlc3Npb25TdG9yYWdlTmFtZXNwYWNlKG1fcGFnZUlELCBjb25u
ZWN0aW9uLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIG1fcHJv
Y2Vzcy0+cHJvY2Vzc1Bvb2woKS5zdG9yYWdlTWFuYWdlcigpLmNyZWF0ZVNlc3Npb25TdG9yYWdl
TmFtZXNwYWNlKG1fcGFnZUlELCBjb25uZWN0aW9uLCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkpOwogICAgIHNldFNlc3Npb25JRChjb25maWd1cmF0aW9uLnNlc3Npb25JRCk7
CiAKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTQ0Niw3ICs0NDYsNyBAQCBXZWJQYWdlUHJveHk6
On5XZWJQYWdlUHJveHkoKQogICAgIGlmICghbV9pc0Nsb3NlZCkKICAgICAgICAgY2xvc2UoKTsK
IAotICAgIFdlYkNvbnRleHQ6OnN0YXRpc3RpY3MoKS53a1BhZ2VDb3VudC0tOworICAgIFdlYlBy
b2Nlc3NQb29sOjpzdGF0aXN0aWNzKCkud2tQYWdlQ291bnQtLTsKIAogICAgIGlmIChtX2hhc1Nw
ZWxsRG9jdW1lbnRUYWcpCiAgICAgICAgIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRX
aXRoVGFnKG1fc3BlbGxEb2N1bWVudFRhZyk7CkBAIC01NjYsMTAgKzU2NiwxMCBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6cmVhdHRhY2hUb1dlYlByb2Nlc3MoCiAgICAgbV9wcm9jZXNzLT5yZW1vdmVX
ZWJQYWdlKG1fcGFnZUlEKTsKICAgICBtX3Byb2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlEKTsK
IAotICAgIGlmIChtX3Byb2Nlc3MtPmNvbnRleHQoKS5wcm9jZXNzTW9kZWwoKSA9PSBQcm9jZXNz
TW9kZWxTaGFyZWRTZWNvbmRhcnlQcm9jZXNzKQotICAgICAgICBtX3Byb2Nlc3MgPSBtX3Byb2Nl
c3MtPmNvbnRleHQoKS5lbnN1cmVTaGFyZWRXZWJQcm9jZXNzKCk7CisgICAgaWYgKG1fcHJvY2Vz
cy0+cHJvY2Vzc1Bvb2woKS5wcm9jZXNzTW9kZWwoKSA9PSBQcm9jZXNzTW9kZWxTaGFyZWRTZWNv
bmRhcnlQcm9jZXNzKQorICAgICAgICBtX3Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29s
KCkuZW5zdXJlU2hhcmVkV2ViUHJvY2VzcygpOwogICAgIGVsc2UKLSAgICAgICAgbV9wcm9jZXNz
ID0gbV9wcm9jZXNzLT5jb250ZXh0KCkuY3JlYXRlTmV3V2ViUHJvY2Vzc1Jlc3BlY3RpbmdQcm9j
ZXNzQ291bnRMaW1pdCgpOworICAgICAgICBtX3Byb2Nlc3MgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQ
b29sKCkuY3JlYXRlTmV3V2ViUHJvY2Vzc1Jlc3BlY3RpbmdQcm9jZXNzQ291bnRMaW1pdCgpOwog
CiAgICAgQVNTRVJUKG1fcHJvY2Vzcy0+c3RhdGUoKSAhPSBDaGlsZFByb2Nlc3NQcm94eTo6U3Rh
dGU6OlRlcm1pbmF0ZWQpOwogICAgIGlmIChtX3Byb2Nlc3MtPnN0YXRlKCkgPT0gQ2hpbGRQcm9j
ZXNzUHJveHk6OlN0YXRlOjpSdW5uaW5nKQpAQCAtNjI1LDcgKzYyNSw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpzZXRTZXNzaW9uSUQoU2Vzc2lvbkkKIAogI2lmIEVOQUJMRShORVRXT1JLX1BST0NF
U1MpCiAgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotICAgICAgICBtX3Byb2Nlc3Mt
PmNvbnRleHQoKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lvbklEKSk7CisgICAgICAgIG1f
cHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OkVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lvbklEKSk7
CiAjZW5kaWYKIH0KIApAQCAtNjkyLDggKzY5Miw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjbG9z
ZSgpCiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDbG9zZSgpLCBtX3Bh
Z2VJRCk7CiAgICAgbV9wcm9jZXNzLT5yZW1vdmVXZWJQYWdlKG1fcGFnZUlEKTsKICAgICBtX3By
b2Nlc3MtPnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGFnZVByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlEKTsKLSAgICBtX3Byb2Nlc3MtPmNvbnRleHQoKS5z
dG9yYWdlTWFuYWdlcigpLmRlc3Ryb3lTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZShtX3BhZ2VJRCk7
Ci0gICAgbV9wcm9jZXNzLT5jb250ZXh0KCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5h
Z2VyUHJveHk+KCktPmNsZWFyTm90aWZpY2F0aW9ucyh0aGlzKTsKKyAgICBtX3Byb2Nlc3MtPnBy
b2Nlc3NQb29sKCkuc3RvcmFnZU1hbmFnZXIoKS5kZXN0cm95U2Vzc2lvblN0b3JhZ2VOYW1lc3Bh
Y2UobV9wYWdlSUQpOworICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5zdXBwbGVtZW50PFdl
Yk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKS0+Y2xlYXJOb3RpZmljYXRpb25zKHRoaXMpOwog
CiAgICAgbV93ZWJzaXRlRGF0YVN0b3JlLT5yZW1vdmVXZWJQYWdlKCp0aGlzKTsKIH0KQEAgLTEw
MzksMTQgKzEwMzksMTQgQEAgYm9vbCBXZWJQYWdlUHJveHk6OmNhblNob3dNSU1FVHlwZShjb25z
dAogCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgU3RyaW5nIG5ld01pbWVU
eXBlID0gbWltZVR5cGU7Ci0gICAgUGx1Z2luTW9kdWxlSW5mbyBwbHVnaW4gPSBtX3Byb2Nlc3Mt
PmNvbnRleHQoKS5wbHVnaW5JbmZvU3RvcmUoKS5maW5kUGx1Z2luKG5ld01pbWVUeXBlLCBVUkwo
KSk7CisgICAgUGx1Z2luTW9kdWxlSW5mbyBwbHVnaW4gPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29s
KCkucGx1Z2luSW5mb1N0b3JlKCkuZmluZFBsdWdpbihuZXdNaW1lVHlwZSwgVVJMKCkpOwogICAg
IGlmICghcGx1Z2luLnBhdGguaXNOdWxsKCkgJiYgbV9wcmVmZXJlbmNlcy0+cGx1Z2luc0VuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BM
VUdJTl9BUEkpCiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAvLyBPbiBNYWMsIHdlIGNhbiBz
aG93IFBERnMuCi0gICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzUERGT3JQb3N0U2NyaXB0TUlN
RVR5cGUobWltZVR5cGUpICYmICFXZWJDb250ZXh0OjpvbWl0UERGU3VwcG9ydCgpKQorICAgIGlm
IChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1BERk9yUG9zdFNjcmlwdE1JTUVUeXBlKG1pbWVUeXBlKSAm
JiAhV2ViUHJvY2Vzc1Bvb2w6Om9taXRQREZTdXBwb3J0KCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogI2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKQogCkBAIC0xMjcxLDcgKzEyNzEsNyBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6dXBkYXRlQWN0aXZpdHlUb2tlbigpCiAgICAgaWYgKG1fdmlld1N0YXRl
ICYgVmlld1N0YXRlOjpJc1Zpc3VhbGx5SWRsZSkKICAgICAgICAgbV9wYWdlSXNVc2VyT2JzZXJ2
YWJsZUNvdW50ID0gbnVsbHB0cjsKICAgICBlbHNlIGlmICghbV9wYWdlSXNVc2VyT2JzZXJ2YWJs
ZUNvdW50KQotICAgICAgICBtX3BhZ2VJc1VzZXJPYnNlcnZhYmxlQ291bnQgPSBtX3Byb2Nlc3Mt
PmNvbnRleHQoKS51c2VyT2JzZXJ2YWJsZVBhZ2VDb3VudCgpOworICAgICAgICBtX3BhZ2VJc1Vz
ZXJPYnNlcnZhYmxlQ291bnQgPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkudXNlck9ic2VydmFi
bGVQYWdlQ291bnQoKTsKIAogI2lmIFBMQVRGT1JNKElPUykKICAgICBpZiAoIWlzVmlld1Zpc2li
bGUoKSkKQEAgLTEyODYsNyArMTI4Niw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVQcm9j
Y2Vzc1N1cHByZXMKICAgICBpZiAobV9wcmVmZXJlbmNlcy0+cGFnZVZpc2liaWxpdHlCYXNlZFBy
b2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSkKICAgICAgICAgbV9wcmV2ZW50UHJvY2Vzc1N1cHBy
ZXNzaW9uQ291bnQgPSBudWxscHRyOwogICAgIGVsc2UgaWYgKCFtX3ByZXZlbnRQcm9jZXNzU3Vw
cHJlc3Npb25Db3VudCkKLSAgICAgICAgbV9wcmV2ZW50UHJvY2Vzc1N1cHByZXNzaW9uQ291bnQg
PSBtX3Byb2Nlc3MtPmNvbnRleHQoKS5wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VD
b3VudCgpOworICAgICAgICBtX3ByZXZlbnRQcm9jZXNzU3VwcHJlc3Npb25Db3VudCA9IG1fcHJv
Y2Vzcy0+cHJvY2Vzc1Bvb2woKS5wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3Vu
dCgpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6bGF5ZXJIb3N0aW5nTW9kZURpZENoYW5nZSgp
CkBAIC0xNjY0LDcgKzE2NjQsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZmluZFBsdWdpbihjb25z
dCBTdHJpCiAgICAgcGx1Z2luTG9hZFBvbGljeSA9IFBsdWdpbk1vZHVsZUxvYWROb3JtYWxseTsK
IAogICAgIFBsdWdpbkRhdGE6OkFsbG93ZWRQbHVnaW5UeXBlcyBhbGxvd2VkUGx1Z2luVHlwZXMg
PSBhbGxvd09ubHlBcHBsaWNhdGlvblBsdWdpbnMgPyBQbHVnaW5EYXRhOjpPbmx5QXBwbGljYXRp
b25QbHVnaW5zIDogUGx1Z2luRGF0YTo6QWxsUGx1Z2luczsKLSAgICBQbHVnaW5Nb2R1bGVJbmZv
IHBsdWdpbiA9IG1fcHJvY2Vzcy0+Y29udGV4dCgpLnBsdWdpbkluZm9TdG9yZSgpLmZpbmRQbHVn
aW4obmV3TWltZVR5cGUsIFVSTChVUkwoKSwgdXJsU3RyaW5nKSwgYWxsb3dlZFBsdWdpblR5cGVz
KTsKKyAgICBQbHVnaW5Nb2R1bGVJbmZvIHBsdWdpbiA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2wo
KS5wbHVnaW5JbmZvU3RvcmUoKS5maW5kUGx1Z2luKG5ld01pbWVUeXBlLCBVUkwoVVJMKCksIHVy
bFN0cmluZyksIGFsbG93ZWRQbHVnaW5UeXBlcyk7CiAgICAgaWYgKCFwbHVnaW4ucGF0aCkgewog
ICAgICAgICBwbHVnaW5Qcm9jZXNzVG9rZW4gPSAwOwogICAgICAgICByZXR1cm47CkBAIC0xODI4
LDcgKzE4MjgsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVjZWl2ZWRQb2xpY3lEZWNpc2lvCiAg
ICAgICAgIC8vIENyZWF0ZSBhIGRvd25sb2FkIHByb3h5LgogICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGVuc3VyZSB0aGF0IHRoZSBkb3dubG9hZFJlcXVlc3QgaXMgbmV2ZXIgZW1wdHkuCiAg
ICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgZG93bmxvYWRSZXF1ZXN0ID0gbV9kZWNpZGVQ
b2xpY3lGb3JSZXNwb25zZVJlcXVlc3QgPyAqbV9kZWNpZGVQb2xpY3lGb3JSZXNwb25zZVJlcXVl
c3QgOiBSZXNvdXJjZVJlcXVlc3QoKTsKLSAgICAgICAgRG93bmxvYWRQcm94eSogZG93bmxvYWQg
PSBtX3Byb2Nlc3MtPmNvbnRleHQoKS5jcmVhdGVEb3dubG9hZFByb3h5KGRvd25sb2FkUmVxdWVz
dCk7CisgICAgICAgIERvd25sb2FkUHJveHkqIGRvd25sb2FkID0gbV9wcm9jZXNzLT5wcm9jZXNz
UG9vbCgpLmNyZWF0ZURvd25sb2FkUHJveHkoZG93bmxvYWRSZXF1ZXN0KTsKICAgICAgICAgZG93
bmxvYWRJRCA9IGRvd25sb2FkLT5kb3dubG9hZElEKCk7CiAgICAgICAgIGhhbmRsZURvd25sb2Fk
UmVxdWVzdChkb3dubG9hZCk7CiAgICAgfQpAQCAtMzA3OSw3ICszMDc5LDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OmRpZE5hdmlnYXRlV2l0aE5hdmlnYQogICAgIE1FU1NBR0VfQ0hFQ0soZnJhbWUt
PnBhZ2UoKSA9PSB0aGlzKTsKIAogICAgIG1fbG9hZGVyQ2xpZW50LT5kaWROYXZpZ2F0ZVdpdGhO
YXZpZ2F0aW9uRGF0YSgqdGhpcywgc3RvcmUsICpmcmFtZSk7Ci0gICAgcHJvY2VzcygpLmNvbnRl
eHQoKS5oaXN0b3J5Q2xpZW50KCkuZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEocHJvY2Vz
cygpLmNvbnRleHQoKSwgKnRoaXMsIHN0b3JlLCAqZnJhbWUpOworICAgIHByb2Nlc3MoKS5wcm9j
ZXNzUG9vbCgpLmhpc3RvcnlDbGllbnQoKS5kaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShw
cm9jZXNzKCkucHJvY2Vzc1Bvb2woKSwgKnRoaXMsIHN0b3JlLCAqZnJhbWUpOwogfQogCiB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KGNvbnN0IFN0cmluZyYgc291
cmNlVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCB1aW50NjRf
dCBmcmFtZUlEKQpAQCAtMzA5NSw3ICszMDk1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFBl
cmZvcm1DbGllbnRSZWRpcgogICAgIE1FU1NBR0VfQ0hFQ0tfVVJMKGRlc3RpbmF0aW9uVVJMU3Ry
aW5nKTsKIAogICAgIG1fbG9hZGVyQ2xpZW50LT5kaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoKnRo
aXMsIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsICpmcmFtZSk7Ci0gICAg
cHJvY2VzcygpLmNvbnRleHQoKS5oaXN0b3J5Q2xpZW50KCkuZGlkUGVyZm9ybUNsaWVudFJlZGly
ZWN0KHByb2Nlc3MoKS5jb250ZXh0KCksICp0aGlzLCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0
aW9uVVJMU3RyaW5nLCAqZnJhbWUpOworICAgIHByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmhpc3Rv
cnlDbGllbnQoKS5kaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QocHJvY2VzcygpLnByb2Nlc3NQb29s
KCksICp0aGlzLCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCAqZnJhbWUp
OwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KGNvbnN0
IFN0cmluZyYgc291cmNlVVJMU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVJMU3Ry
aW5nLCB1aW50NjRfdCBmcmFtZUlEKQpAQCAtMzExMSw3ICszMTExLDcgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmRpZFBlcmZvcm1TZXJ2ZXJSZWRpcgogICAgIE1FU1NBR0VfQ0hFQ0tfVVJMKGRlc3Rp
bmF0aW9uVVJMU3RyaW5nKTsKIAogICAgIG1fbG9hZGVyQ2xpZW50LT5kaWRQZXJmb3JtU2VydmVy
UmVkaXJlY3QoKnRoaXMsIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsICpm
cmFtZSk7Ci0gICAgcHJvY2VzcygpLmNvbnRleHQoKS5oaXN0b3J5Q2xpZW50KCkuZGlkUGVyZm9y
bVNlcnZlclJlZGlyZWN0KHByb2Nlc3MoKS5jb250ZXh0KCksICp0aGlzLCBzb3VyY2VVUkxTdHJp
bmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCAqZnJhbWUpOworICAgIHByb2Nlc3MoKS5wcm9jZXNz
UG9vbCgpLmhpc3RvcnlDbGllbnQoKS5kaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QocHJvY2Vzcygp
LnByb2Nlc3NQb29sKCksICp0aGlzLCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3Ry
aW5nLCAqZnJhbWUpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkVXBkYXRlSGlzdG9yeVRp
dGxlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgdXJsLCB1aW50NjRfdCBmcmFt
ZUlEKQpAQCAtMzEyMyw3ICszMTIzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFVwZGF0ZUhp
c3RvcnlUaXRsZQogICAgIE1FU1NBR0VfQ0hFQ0tfVVJMKHVybCk7CiAKICAgICBtX2xvYWRlckNs
aWVudC0+ZGlkVXBkYXRlSGlzdG9yeVRpdGxlKCp0aGlzLCB0aXRsZSwgdXJsLCAqZnJhbWUpOwot
ICAgIHByb2Nlc3MoKS5jb250ZXh0KCkuaGlzdG9yeUNsaWVudCgpLmRpZFVwZGF0ZUhpc3RvcnlU
aXRsZShwcm9jZXNzKCkuY29udGV4dCgpLCAqdGhpcywgdGl0bGUsIHVybCwgKmZyYW1lKTsKKyAg
ICBwcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5oaXN0b3J5Q2xpZW50KCkuZGlkVXBkYXRlSGlzdG9y
eVRpdGxlKHByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLCAqdGhpcywgdGl0bGUsIHVybCwgKmZyYW1l
KTsKIH0KIAogLy8gVUlDbGllbnQKQEAgLTMxNDEsNyArMzE0MSw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpjcmVhdGVOZXdQYWdlKHVpbnQ2NF8KIAogICAgIG5ld1BhZ2VJRCA9IG5ld1BhZ2UtPnBh
Z2VJRCgpOwogICAgIG5ld1BhZ2VQYXJhbWV0ZXJzID0gbmV3UGFnZS0+Y3JlYXRpb25QYXJhbWV0
ZXJzKCk7Ci0gICAgcHJvY2VzcygpLmNvbnRleHQoKS5zdG9yYWdlTWFuYWdlcigpLmNsb25lU2Vz
c2lvblN0b3JhZ2VOYW1lc3BhY2UobV9wYWdlSUQsIG5ld1BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBw
cm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5zdG9yYWdlTWFuYWdlcigpLmNsb25lU2Vzc2lvblN0b3Jh
Z2VOYW1lc3BhY2UobV9wYWdlSUQsIG5ld1BhZ2UtPnBhZ2VJRCgpKTsKIH0KICAgICAKIHZvaWQg
V2ViUGFnZVByb3h5OjpzaG93UGFnZSgpCkBAIC0zMjY3LDE0ICszMjY3LDE0IEBAIHZvaWQgV2Vi
UGFnZVByb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVAKIHsKICAgICBBU1NFUlQoY29ubmVjdGlv
biA9PSBtX3Byb2Nlc3MtPmNvbm5lY3Rpb24oKSk7CiAKLSAgICBtX3Byb2Nlc3MtPmNvbnRleHQo
KS5zdG9yYWdlTWFuYWdlcigpLnNldEFsbG93ZWRTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUNvbm5l
Y3Rpb24obV9wYWdlSUQsIGNvbm5lY3Rpb24pOworICAgIG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2wo
KS5zdG9yYWdlTWFuYWdlcigpLnNldEFsbG93ZWRTZXNzaW9uU3RvcmFnZU5hbWVzcGFjZUNvbm5l
Y3Rpb24obV9wYWdlSUQsIGNvbm5lY3Rpb24pOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y29u
bmVjdGlvbldpbGxDbG9zZShJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCiB7CiAgICAgQVNT
RVJUX1VOVVNFRChjb25uZWN0aW9uLCBjb25uZWN0aW9uID09IG1fcHJvY2Vzcy0+Y29ubmVjdGlv
bigpKTsKIAotICAgIG1fcHJvY2Vzcy0+Y29udGV4dCgpLnN0b3JhZ2VNYW5hZ2VyKCkuc2V0QWxs
b3dlZFNlc3Npb25TdG9yYWdlTmFtZXNwYWNlQ29ubmVjdGlvbihtX3BhZ2VJRCwgMCk7CisgICAg
bV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnN0b3JhZ2VNYW5hZ2VyKCkuc2V0QWxsb3dlZFNlc3Np
b25TdG9yYWdlTmFtZXNwYWNlQ29ubmVjdGlvbihtX3BhZ2VJRCwgMCk7CiB9CiAKIHZvaWQgV2Vi
UGFnZVByb3h5Ojpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKCkKQEAgLTMyOTYsNyArMzI5Niw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojp1bmF2YWlsYWJsZVBsdWdpbkJ1dHQKIAogICAgIFJlZlB0
cjxJbW11dGFibGVEaWN0aW9uYXJ5PiBwbHVnaW5JbmZvcm1hdGlvbjsKICAgICBTdHJpbmcgbmV3
TWltZVR5cGUgPSBtaW1lVHlwZTsKLSAgICBQbHVnaW5Nb2R1bGVJbmZvIHBsdWdpbiA9IG1fcHJv
Y2Vzcy0+Y29udGV4dCgpLnBsdWdpbkluZm9TdG9yZSgpLmZpbmRQbHVnaW4obmV3TWltZVR5cGUs
IFVSTChVUkwoKSwgcGx1Z2luVVJMU3RyaW5nKSk7CisgICAgUGx1Z2luTW9kdWxlSW5mbyBwbHVn
aW4gPSBtX3Byb2Nlc3MtPnByb2Nlc3NQb29sKCkucGx1Z2luSW5mb1N0b3JlKCkuZmluZFBsdWdp
bihuZXdNaW1lVHlwZSwgVVJMKFVSTCgpLCBwbHVnaW5VUkxTdHJpbmcpKTsKICAgICBwbHVnaW5J
bmZvcm1hdGlvbiA9IGNyZWF0ZVBsdWdpbkluZm9ybWF0aW9uRGljdGlvbmFyeShwbHVnaW4sIGZy
YW1lVVJMU3RyaW5nLCBtaW1lVHlwZSwgcGFnZVVSTFN0cmluZywgcGx1Z2luc3BhZ2VBdHRyaWJ1
dGVVUkxTdHJpbmcsIHBsdWdpblVSTFN0cmluZyk7CiAKICAgICBXS1BsdWdpblVuYXZhaWxhYmls
aXR5UmVhc29uIHBsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uID0ga1dLUGx1Z2luVW5hdmFpbGFi
aWxpdHlSZWFzb25QbHVnaW5NaXNzaW5nOwpAQCAtMzk3MSwxNSArMzk3MSwxNSBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6Y29udGV4dE1lbnVJdGVtU2VsZWN0CiAgICAgfQogI2VuZGlmCiAgICAgaWYg
KGl0ZW0uYWN0aW9uKCkgPT0gQ29udGV4dE1lbnVJdGVtVGFnRG93bmxvYWRJbWFnZVRvRGlzaykg
ewotICAgICAgICBtX3Byb2Nlc3MtPmNvbnRleHQoKS5kb3dubG9hZCh0aGlzLCBVUkwoVVJMKCks
IG1fYWN0aXZlQ29udGV4dE1lbnVDb250ZXh0RGF0YS53ZWJIaXRUZXN0UmVzdWx0RGF0YSgpLmFi
c29sdXRlSW1hZ2VVUkwpKTsKKyAgICAgICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLmRvd25s
b2FkKHRoaXMsIFVSTChVUkwoKSwgbV9hY3RpdmVDb250ZXh0TWVudUNvbnRleHREYXRhLndlYkhp
dFRlc3RSZXN1bHREYXRhKCkuYWJzb2x1dGVJbWFnZVVSTCkpOwogICAgICAgICByZXR1cm47ICAg
IAogICAgIH0KICAgICBpZiAoaXRlbS5hY3Rpb24oKSA9PSBDb250ZXh0TWVudUl0ZW1UYWdEb3du
bG9hZExpbmtUb0Rpc2spIHsKLSAgICAgICAgbV9wcm9jZXNzLT5jb250ZXh0KCkuZG93bmxvYWQo
dGhpcywgVVJMKFVSTCgpLCBtX2FjdGl2ZUNvbnRleHRNZW51Q29udGV4dERhdGEud2ViSGl0VGVz
dFJlc3VsdERhdGEoKS5hYnNvbHV0ZUxpbmtVUkwpKTsKKyAgICAgICAgbV9wcm9jZXNzLT5wcm9j
ZXNzUG9vbCgpLmRvd25sb2FkKHRoaXMsIFVSTChVUkwoKSwgbV9hY3RpdmVDb250ZXh0TWVudUNv
bnRleHREYXRhLndlYkhpdFRlc3RSZXN1bHREYXRhKCkuYWJzb2x1dGVMaW5rVVJMKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGl0ZW0uYWN0aW9uKCkgPT0gQ29udGV4dE1lbnVJ
dGVtVGFnRG93bmxvYWRNZWRpYVRvRGlzaykgewotICAgICAgICBtX3Byb2Nlc3MtPmNvbnRleHQo
KS5kb3dubG9hZCh0aGlzLCBVUkwoVVJMKCksIG1fYWN0aXZlQ29udGV4dE1lbnVDb250ZXh0RGF0
YS53ZWJIaXRUZXN0UmVzdWx0RGF0YSgpLmFic29sdXRlTWVkaWFVUkwpKTsKKyAgICAgICAgbV9w
cm9jZXNzLT5wcm9jZXNzUG9vbCgpLmRvd25sb2FkKHRoaXMsIFVSTChVUkwoKSwgbV9hY3RpdmVD
b250ZXh0TWVudUNvbnRleHREYXRhLndlYkhpdFRlc3RSZXN1bHREYXRhKCkuYWJzb2x1dGVNZWRp
YVVSTCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChpdGVtLmFjdGlvbigpID09
IENvbnRleHRNZW51SXRlbVRhZ0NoZWNrU3BlbGxpbmdXaGlsZVR5cGluZykgewpAQCAtNDg1NCwy
MiArNDg1NCwyMiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVxdWVzdE5vdGlmaWNhdGlvblBlCiAK
IHZvaWQgV2ViUGFnZVByb3h5OjpzaG93Tm90aWZpY2F0aW9uKGNvbnN0IFN0cmluZyYgdGl0bGUs
IGNvbnN0IFN0cmluZyYgYm9keSwgY29uc3QgU3RyaW5nJiBpY29uVVJMLCBjb25zdCBTdHJpbmcm
IHRhZywgY29uc3QgU3RyaW5nJiBsYW5nLCBjb25zdCBTdHJpbmcmIGRpciwgY29uc3QgU3RyaW5n
JiBvcmlnaW5TdHJpbmcsIHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEKQogewotICAgIG1fcHJvY2Vz
cy0+Y29udGV4dCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5PigpLT5z
aG93KHRoaXMsIHRpdGxlLCBib2R5LCBpY29uVVJMLCB0YWcsIGxhbmcsIGRpciwgb3JpZ2luU3Ry
aW5nLCBub3RpZmljYXRpb25JRCk7CisgICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnN1cHBs
ZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5PigpLT5zaG93KHRoaXMsIHRpdGxlLCBi
b2R5LCBpY29uVVJMLCB0YWcsIGxhbmcsIGRpciwgb3JpZ2luU3RyaW5nLCBub3RpZmljYXRpb25J
RCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjYW5jZWxOb3RpZmljYXRpb24odWludDY0X3Qg
bm90aWZpY2F0aW9uSUQpCiB7Ci0gICAgbV9wcm9jZXNzLT5jb250ZXh0KCkuc3VwcGxlbWVudDxX
ZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+KCktPmNhbmNlbCh0aGlzLCBub3RpZmljYXRpb25J
RCk7CisgICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0
aW9uTWFuYWdlclByb3h5PigpLT5jYW5jZWwodGhpcywgbm90aWZpY2F0aW9uSUQpOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6Y2xlYXJOb3RpZmljYXRpb25zKGNvbnN0IFZlY3Rvcjx1aW50NjRf
dD4mIG5vdGlmaWNhdGlvbklEcykKIHsKLSAgICBtX3Byb2Nlc3MtPmNvbnRleHQoKS5zdXBwbGVt
ZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4oKS0+Y2xlYXJOb3RpZmljYXRpb25zKHRo
aXMsIG5vdGlmaWNhdGlvbklEcyk7CisgICAgbV9wcm9jZXNzLT5wcm9jZXNzUG9vbCgpLnN1cHBs
ZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5PigpLT5jbGVhck5vdGlmaWNhdGlvbnMo
dGhpcywgbm90aWZpY2F0aW9uSURzKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZERlc3Ry
b3lOb3RpZmljYXRpb24odWludDY0X3Qgbm90aWZpY2F0aW9uSUQpCiB7Ci0gICAgbV9wcm9jZXNz
LT5jb250ZXh0KCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+KCktPmRp
ZERlc3Ryb3lOb3RpZmljYXRpb24odGhpcywgbm90aWZpY2F0aW9uSUQpOworICAgIG1fcHJvY2Vz
cy0+cHJvY2Vzc1Bvb2woKS5zdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eT4o
KS0+ZGlkRGVzdHJveU5vdGlmaWNhdGlvbih0aGlzLCBub3RpZmljYXRpb25JRCk7CiB9CiAKIGZs
b2F0IFdlYlBhZ2VQcm94eTo6aGVhZGVySGVpZ2h0KFdlYkZyYW1lUHJveHkqIGZyYW1lKQpAQCAt
NDk2Niw3ICs0OTY2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZEJsb2NrSW5zZWN1cmVQbHVn
aQogCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQog
ICAgIFN0cmluZyBuZXdNaW1lVHlwZSA9IG1pbWVUeXBlOwotICAgIFBsdWdpbk1vZHVsZUluZm8g
cGx1Z2luID0gbV9wcm9jZXNzLT5jb250ZXh0KCkucGx1Z2luSW5mb1N0b3JlKCkuZmluZFBsdWdp
bihuZXdNaW1lVHlwZSwgVVJMKFVSTCgpLCBwbHVnaW5VUkxTdHJpbmcpKTsKKyAgICBQbHVnaW5N
b2R1bGVJbmZvIHBsdWdpbiA9IG1fcHJvY2Vzcy0+cHJvY2Vzc1Bvb2woKS5wbHVnaW5JbmZvU3Rv
cmUoKS5maW5kUGx1Z2luKG5ld01pbWVUeXBlLCBVUkwoVVJMKCksIHBsdWdpblVSTFN0cmluZykp
OwogICAgIHBsdWdpbkluZm9ybWF0aW9uID0gY3JlYXRlUGx1Z2luSW5mb3JtYXRpb25EaWN0aW9u
YXJ5KHBsdWdpbiwgZnJhbWVVUkxTdHJpbmcsIG1pbWVUeXBlLCBwYWdlVVJMU3RyaW5nLCBTdHJp
bmcoKSwgU3RyaW5nKCksIHJlcGxhY2VtZW50T2JzY3VyZWQpOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0obWltZVR5cGUpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByZWZl
cmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJl
ZmVyZW5jZXMuY3BwCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUHJlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5ICsyNiw5IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKIAotI2luY2x1
ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJX
ZWJQcmVmZXJlbmNlc0tleXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAt
ODcsNyArODcsNyBAQCB2b2lkIFdlYlByZWZlcmVuY2VzOjphZGRQYWdlKFdlYlBhZ2VQcm94CiAK
ICAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmICghcHJpdmF0
ZUJyb3dzaW5nUGFnZUNvdW50KQotICAgICAgICAgICAgV2ViQ29udGV4dDo6d2lsbFN0YXJ0VXNp
bmdQcml2YXRlQnJvd3NpbmcoKTsKKyAgICAgICAgICAgIFdlYlByb2Nlc3NQb29sOjp3aWxsU3Rh
cnRVc2luZ1ByaXZhdGVCcm93c2luZygpOwogCiAgICAgICAgICsrcHJpdmF0ZUJyb3dzaW5nUGFn
ZUNvdW50OwogICAgIH0KQEAgLTEwMSw3ICsxMDEsNyBAQCB2b2lkIFdlYlByZWZlcmVuY2VzOjpy
ZW1vdmVQYWdlKFdlYlBhZ2VQCiAgICAgaWYgKHByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkgewog
ICAgICAgICAtLXByaXZhdGVCcm93c2luZ1BhZ2VDb3VudDsKICAgICAgICAgaWYgKCFwcml2YXRl
QnJvd3NpbmdQYWdlQ291bnQpCi0gICAgICAgICAgICBXZWJDb250ZXh0Ojp3aWxsU3RvcFVzaW5n
UHJpdmF0ZUJyb3dzaW5nKCk7CisgICAgICAgICAgICBXZWJQcm9jZXNzUG9vbDo6d2lsbFN0b3BV
c2luZ1ByaXZhdGVCcm93c2luZygpOwogICAgIH0KIH0KIApAQCAtMTU2LDcgKzE1Niw3IEBAIHZv
aWQgV2ViUHJlZmVyZW5jZXM6OnVwZGF0ZVByaXZhdGVCcm93c2kKIAogICAgIGlmICh2YWx1ZSkg
ewogICAgICAgICBpZiAoIXByaXZhdGVCcm93c2luZ1BhZ2VDb3VudCkKLSAgICAgICAgICAgIFdl
YkNvbnRleHQ6OndpbGxTdGFydFVzaW5nUHJpdmF0ZUJyb3dzaW5nKCk7CisgICAgICAgICAgICBX
ZWJQcm9jZXNzUG9vbDo6d2lsbFN0YXJ0VXNpbmdQcml2YXRlQnJvd3NpbmcoKTsKICAgICAgICAg
cHJpdmF0ZUJyb3dzaW5nUGFnZUNvdW50ICs9IHBhZ2VzQ2hhbmdlZDsKICAgICB9CiAKQEAgLTE2
Niw3ICsxNjYsNyBAQCB2b2lkIFdlYlByZWZlcmVuY2VzOjp1cGRhdGVQcml2YXRlQnJvd3NpCiAg
ICAgICAgIEFTU0VSVChwcml2YXRlQnJvd3NpbmdQYWdlQ291bnQgPj0gcGFnZXNDaGFuZ2VkKTsK
ICAgICAgICAgcHJpdmF0ZUJyb3dzaW5nUGFnZUNvdW50IC09IHBhZ2VzQ2hhbmdlZDsKICAgICAg
ICAgaWYgKCFwcml2YXRlQnJvd3NpbmdQYWdlQ291bnQpCi0gICAgICAgICAgICBXZWJDb250ZXh0
Ojp3aWxsU3RvcFVzaW5nUHJpdmF0ZUJyb3dzaW5nKCk7CisgICAgICAgICAgICBXZWJQcm9jZXNz
UG9vbDo6d2lsbFN0b3BVc2luZ1ByaXZhdGVCcm93c2luZygpOwogICAgIH0KIH0KIApJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCShyZXZpc2lvbiAx
Nzc2MzYpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcDoxNzc2
MzYpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwg
MjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisKKyNpbmNs
dWRlICJBUElBcnJheS5oIgorI2luY2x1ZGUgIkFQSURvd25sb2FkQ2xpZW50LmgiCisjaW5jbHVk
ZSAiQVBJTGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQuaCIKKyNpbmNsdWRlICJDdXN0b21Qcm90
b2NvbE1hbmFnZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkRvd25sb2FkUHJveHkuaCIKKyNpbmNs
dWRlICJEb3dubG9hZFByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5j
bHVkZSAiTXV0YWJsZURpY3Rpb25hcnkuaCIKKyNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgi
CisjaW5jbHVkZSAiU3RhdGlzdGljc0RhdGEuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgor
I2luY2x1ZGUgIldLQ29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJBcHBsaWNhdGlvbkNh
Y2hlTWFuYWdlclByb3h5LmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dE1lc3NhZ2VLaW5kcy5oIgor
I2luY2x1ZGUgIldlYkNvbnRleHRNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYkNvbnRleHRTdXBw
bGVtZW50LmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dFVzZXJNZXNzYWdlQ29kZXJzLmgiCisjaW5j
bHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRl
ICJXZWJHZW9sb2NhdGlvbk1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUgIldlYkljb25EYXRhYmFz
ZS5oIgorI2luY2x1ZGUgIldlYktleVZhbHVlU3RvcmFnZU1hbmFnZXIuaCIKKyNpbmNsdWRlICJX
ZWJLaXQySW5pdGlhbGl6ZS5oIgorI2luY2x1ZGUgIldlYk1lZGlhQ2FjaGVNYW5hZ2VyUHJveHku
aCIKKyNpbmNsdWRlICJXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJX
ZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNp
bmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgorI2luY2x1ZGUgIldlYk1lbW9yeVNhbXBsZXIuaCIK
KyNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiV2Vi
UHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVk
ZSAiV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRh
U3RvcmUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9MYW5ndWFnZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTGlua0hhc2gu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0xvZ2dpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291
cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorCisjaWYgRU5BQkxFKEJBVFRFUllfU1RBVFVTKQor
I2luY2x1ZGUgIldlYkJhdHRlcnlNYW5hZ2VyUHJveHkuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxF
KERBVEFCQVNFX1BST0NFU1MpCisjaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRl
ICJXZWJPcmlnaW5EYXRhTWFuYWdlclByb3h5LmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
aCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTmV0d29y
a1Byb2Nlc3NQcm94eS5oIgorI2VuZGlmCisKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykK
KyNpbmNsdWRlICJTZXJ2aWNlc0NvbnRyb2xsZXIuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKFJF
TU9URV9JTlNQRUNUT1IpCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVtb3RlSW5zcGVjdG9y
Lmg+CisjZW5kaWYKKworI2lmIFVTRShTT1VQKQorI2luY2x1ZGUgIldlYlNvdXBDdXN0b21Qcm90
b2NvbFJlcXVlc3RNYW5hZ2VyLmgiCisjZW5kaWYKKworI2lmbmRlZiBOREVCVUcKKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgY29uc3QgZG91YmxlIHNo
YXJlZFNlY29uZGFyeVByb2Nlc3NTaHV0ZG93blRpbWVvdXQgPSA2MDsKKworREVGSU5FX0RFQlVH
X09OTFlfR0xPQkFMKFdURjo6UmVmQ291bnRlZExlYWtDb3VudGVyLCB3ZWJDb250ZXh0Q291bnRl
ciwgKCJXZWJDb250ZXh0IikpOworCit2b2lkIFdlYkNvbnRleHQ6OmFwcGx5UGxhdGZvcm1TcGVj
aWZpY0NvbmZpZ3VyYXRpb25EZWZhdWx0cyhXZWJDb250ZXh0Q29uZmlndXJhdGlvbiYgY29uZmln
dXJhdGlvbikKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGJlIG5l
ZWRlZDsgYWxsIHBvcnRzIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBo
YXMgdGhlIHJpZ2h0CisgICAgLy8gdmFsdWVzLCBhbmQgdGhlbiB3ZSBzaG91bGQgZ2V0IHJpZCBv
ZiB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgZGVmYXVsdHMgaW5zaWRlIFdlYkNvbnRleHQuCisKKyAg
ICBpZiAoIWNvbmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlRGlyZWN0b3J5KQorICAgICAgICBjb25m
aWd1cmF0aW9uLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IHBsYXRmb3JtRGVmYXVsdExvY2FsU3Rv
cmFnZURpcmVjdG9yeSgpOworCisgICAgaWYgKCFjb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNl
RGlyZWN0b3J5KQorICAgICAgICBjb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNlRGlyZWN0b3J5
ID0gcGxhdGZvcm1EZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoKTsKKworICAgIC8vICoq
KioqKioqKgorICAgIC8vIElNUE9SVEFOVDogRG8gbm90IGNoYW5nZSB0aGUgZGlyZWN0b3J5IHN0
cnVjdHVyZSBmb3IgaW5kZXhlZCBkYXRhYmFzZXMgb24gZGlzayB3aXRob3V0IGZpcnN0IGNvbnN1
bHRpbmcgYSByZXZpZXdlciBmcm9tIEFwcGxlICg8cmRhcjovL3Byb2JsZW0vMTc0NTQ3MTI+KQor
ICAgIC8vICoqKioqKioqKgorICAgIGlmICghY29uZmlndXJhdGlvbi5pbmRleGVkREJEYXRhYmFz
ZURpcmVjdG9yeSkKKyAgICAgICAgY29uZmlndXJhdGlvbi5pbmRleGVkREJEYXRhYmFzZURpcmVj
dG9yeSA9IHBsYXRmb3JtRGVmYXVsdEluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5KCk7CisKKyAg
ICBpZiAoIWNvbmZpZ3VyYXRpb24ubWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSkKKyAgICAgICAg
Y29uZmlndXJhdGlvbi5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gcGxhdGZvcm1EZWZhdWx0
TWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSgpOworfQorCitQYXNzUmVmUHRyPFdlYkNvbnRleHQ+
IFdlYkNvbnRleHQ6OmNyZWF0ZShXZWJDb250ZXh0Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
KQoreworICAgIEluaXRpYWxpemVXZWJLaXQyKCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBX
ZWJDb250ZXh0KFdURjo6bW92ZShjb25maWd1cmF0aW9uKSkpOworfQorCitzdGF0aWMgVmVjdG9y
PFdlYkNvbnRleHQqPiYgY29udGV4dHMoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxW
ZWN0b3I8V2ViQ29udGV4dCo+PiBjb250ZXh0czsKKyAgICByZXR1cm4gY29udGV4dHM7Cit9CisK
K2NvbnN0IFZlY3RvcjxXZWJDb250ZXh0Kj4mIFdlYkNvbnRleHQ6OmFsbENvbnRleHRzKCkKK3sK
KyAgICByZXR1cm4gY29udGV4dHMoKTsKK30KKworc3RhdGljIFdlYnNpdGVEYXRhU3RvcmU6OkNv
bmZpZ3VyYXRpb24gd2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24oKQoreworICAgIFdlYnNp
dGVEYXRhU3RvcmU6OkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKKworICAgIC8vIEZJWE1F
OiBGaWxsIGluIHRoZSBjb25maWd1cmF0aW9uLgorICAgIHJldHVybiBjb25maWd1cmF0aW9uOwor
fQorCitXZWJDb250ZXh0OjpXZWJDb250ZXh0KFdlYkNvbnRleHRDb25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24pCisgICAgOiBtX3Byb2Nlc3NNb2RlbChQcm9jZXNzTW9kZWxTaGFyZWRTZWNvbmRh
cnlQcm9jZXNzKQorICAgICwgbV93ZWJQcm9jZXNzQ291bnRMaW1pdChVSU5UX01BWCkKKyAgICAs
IG1faGF2ZUluaXRpYWxFbXB0eVByb2Nlc3MoZmFsc2UpCisgICAgLCBtX3Byb2Nlc3NXaXRoUGFn
ZUNhY2hlKDApCisgICAgLCBtX2RlZmF1bHRQYWdlR3JvdXAoV2ViUGFnZUdyb3VwOjpjcmVhdGVO
b25OdWxsKCkpCisgICAgLCBtX2luamVjdGVkQnVuZGxlUGF0aChjb25maWd1cmF0aW9uLmluamVj
dGVkQnVuZGxlUGF0aCkKKyAgICAsIG1fZG93bmxvYWRDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxB
UEk6OkRvd25sb2FkQ2xpZW50PigpKQorICAgICwgbV9oaXN0b3J5Q2xpZW50KHN0ZDo6bWFrZV91
bmlxdWU8QVBJOjpMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudD4oKSkKKyAgICAsIG1fdmlzaXRl
ZExpbmtQcm92aWRlcihWaXNpdGVkTGlua1Byb3ZpZGVyOjpjcmVhdGUoKSkKKyAgICAsIG1fdmlz
aXRlZExpbmtzUG9wdWxhdGVkKGZhbHNlKQorICAgICwgbV9wbHVnSW5BdXRvU3RhcnRQcm92aWRl
cih0aGlzKQorICAgICwgbV9hbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aChmYWxzZSkKKyAg
ICAsIG1fc2hvdWxkVXNlRm9udFNtb290aGluZyh0cnVlKQorICAgICwgbV9jYWNoZU1vZGVsKENh
Y2hlTW9kZWxEb2N1bWVudFZpZXdlcikKKyAgICAsIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQoZmFs
c2UpCisgICAgLCBtX21lbW9yeVNhbXBsZXJJbnRlcnZhbCgxNDAwLjApCisgICAgLCBtX3dlYnNp
dGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlKHdlYnNpdGVEYXRhU3RvcmVDb25m
aWd1cmF0aW9uKCkpKQorICAgICwgbV9zdG9yYWdlTWFuYWdlcihTdG9yYWdlTWFuYWdlcjo6Y3Jl
YXRlKGNvbmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlRGlyZWN0b3J5KSkKKyNpZiBVU0UoU09VUCkK
KyAgICAsIG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBv
bGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluKQorI2VuZGlmCisgICAgLCBtX3dlYlNRTERh
dGFiYXNlRGlyZWN0b3J5KFdURjo6bW92ZShjb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNlRGly
ZWN0b3J5KSkKKyAgICAsIG1faW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoV1RGOjptb3ZlKGNv
bmZpZ3VyYXRpb24uaW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkpKQorICAgICwgbV9tZWRpYUtl
eXNTdG9yYWdlRGlyZWN0b3J5KFdURjo6bW92ZShjb25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3Jh
Z2VEaXJlY3RvcnkpKQorICAgICwgbV9zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb24oZmFs
c2UpCisgICAgLCBtX3Byb2Nlc3NUZXJtaW5hdGlvbkVuYWJsZWQodHJ1ZSkKKyNpZiBFTkFCTEUo
TkVUV09SS19QUk9DRVNTKQorICAgICwgbV9jYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhbHVh
dGlvbih0cnVlKQorICAgICwgbV91c2VzTmV0d29ya1Byb2Nlc3MoZmFsc2UpCisjZW5kaWYKKyNp
ZiBVU0UoU09VUCkKKyAgICAsIG1faWdub3JlVExTRXJyb3JzKHRydWUpCisjZW5kaWYKKyAgICAs
IG1fbWVtb3J5Q2FjaGVEaXNhYmxlZChmYWxzZSkKKyAgICAsIG1fdXNlck9ic2VydmFibGVQYWdl
Q291bnRlcihbdGhpc10oYm9vbCkgeyB1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpOyB9
KQorICAgICwgbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyKFt0aGlz
XShib29sKSB7IHVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCk7IH0pCit7CisgICAgcGxh
dGZvcm1Jbml0aWFsaXplKCk7CisKKyAgICBhZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6Oldl
YkNvbnRleHQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRoaXMpOworICAgIGFkZE1lc3NhZ2VS
ZWNlaXZlcihXZWJDb250ZXh0TGVnYWN5TWVzc2FnZXM6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
KnRoaXMpOworCisgICAgLy8gTk9URTogVGhlc2Ugc3ViLW9iamVjdHMgbXVzdCBiZSBpbml0aWFs
aXplZCBhZnRlciBtX21lc3NhZ2VSZWNlaXZlck1hcC4uCisgICAgbV9pY29uRGF0YWJhc2UgPSBX
ZWJJY29uRGF0YWJhc2U6OmNyZWF0ZSh0aGlzKTsKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKKyAgICBtX3BsdWdpblNpdGVEYXRhTWFuYWdlciA9IFdlYlBsdWdpblNpdGVEYXRhTWFu
YWdlcjo6Y3JlYXRlKHRoaXMpOworI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQorCisgICAgYWRkU3VwcGxlbWVudDxXZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5Pigp
OworICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAgIGFkZFN1
cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+KCk7CisgICAgYWRkU3VwcGxlbWVu
dDxXZWJLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyPigpOworICAgIGFkZFN1cHBsZW1lbnQ8V2ViTWVk
aWFDYWNoZU1hbmFnZXJQcm94eT4oKTsKKyAgICBhZGRTdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlv
bk1hbmFnZXJQcm94eT4oKTsKKyAgICBhZGRTdXBwbGVtZW50PFdlYlJlc291cmNlQ2FjaGVNYW5h
Z2VyUHJveHk+KCk7CisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKKyAgICBhZGRTdXBwbGVtZW50
PFdlYkRhdGFiYXNlTWFuYWdlclByb3h5PigpOworI2VuZGlmCisjaWYgVVNFKFNPVVApCisgICAg
YWRkU3VwcGxlbWVudDxXZWJTb3VwQ3VzdG9tUHJvdG9jb2xSZXF1ZXN0TWFuYWdlcj4oKTsKKyNl
bmRpZgorI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKKyAgICBhZGRTdXBwbGVtZW50PFdlYkJh
dHRlcnlNYW5hZ2VyUHJveHk+KCk7CisjZW5kaWYKKyNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VT
UykKKyAgICBhZGRTdXBwbGVtZW50PFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk+KCk7CisjZW5k
aWYKKworICAgIGNvbnRleHRzKCkuYXBwZW5kKHRoaXMpOworCisgICAgYWRkTGFuZ3VhZ2VDaGFu
Z2VPYnNlcnZlcih0aGlzLCBsYW5ndWFnZUNoYW5nZWQpOworCisjaWYgIUxPR19ESVNBQkxFRAor
ICAgIFdlYkNvcmU6OmluaXRpYWxpemVMb2dnaW5nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpOworICAg
IFdlYktpdDo6aW5pdGlhbGl6ZUxvZ0NoYW5uZWxzSWZOZWNlc3NhcnkoKTsKKyNlbmRpZiAvLyAh
TE9HX0RJU0FCTEVECisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBtX3Bs
dWdpbkluZm9TdG9yZS5zZXRDbGllbnQodGhpcyk7CisjZW5kaWYKKworI2lmbmRlZiBOREVCVUcK
KyAgICB3ZWJDb250ZXh0Q291bnRlci5pbmNyZW1lbnQoKTsKKyNlbmRpZgorfQorCisjaWYgIVBM
QVRGT1JNKENPQ09BKQordm9pZCBXZWJDb250ZXh0OjpwbGF0Zm9ybUluaXRpYWxpemUoKQorewor
fQorI2VuZGlmCisKK1dlYkNvbnRleHQ6On5XZWJDb250ZXh0KCkKK3sKKyAgICBBU1NFUlQoY29u
dGV4dHMoKS5maW5kKHRoaXMpICE9IG5vdEZvdW5kKTsKKyAgICBjb250ZXh0cygpLnJlbW92ZShj
b250ZXh0cygpLmZpbmQodGhpcykpOworCisgICAgcmVtb3ZlTGFuZ3VhZ2VDaGFuZ2VPYnNlcnZl
cih0aGlzKTsKKworICAgIG1fbWVzc2FnZVJlY2VpdmVyTWFwLmludmFsaWRhdGUoKTsKKworICAg
IFdlYkNvbnRleHRTdXBwbGVtZW50TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3VwcGxlbWVu
dHMuYmVnaW4oKTsKKyAgICBXZWJDb250ZXh0U3VwcGxlbWVudE1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9zdXBwbGVtZW50cy5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7
CisgICAgICAgIGl0LT52YWx1ZS0+Y29udGV4dERlc3Ryb3llZCgpOworICAgICAgICBpdC0+dmFs
dWUtPmNsZWFyQ29udGV4dCgpOworICAgIH0KKworICAgIG1faWNvbkRhdGFiYXNlLT5pbnZhbGlk
YXRlKCk7CisgICAgbV9pY29uRGF0YWJhc2UtPmNsZWFyQ29udGV4dCgpOworICAgIFdlYkljb25E
YXRhYmFzZSogcmF3SWNvbkRhdGFiYXNlID0gbV9pY29uRGF0YWJhc2UucmVsZWFzZSgpLmxlYWtS
ZWYoKTsKKyAgICByYXdJY29uRGF0YWJhc2UtPmRlcmVmV2hlbkFwcHJvcHJpYXRlKCk7CisKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBtX3BsdWdpblNpdGVEYXRhTWFuYWdl
ci0+aW52YWxpZGF0ZSgpOworICAgIG1fcGx1Z2luU2l0ZURhdGFNYW5hZ2VyLT5jbGVhckNvbnRl
eHQoKTsKKyNlbmRpZgorCisgICAgaW52YWxpZGF0ZUNhbGxiYWNrTWFwKG1fZGljdGlvbmFyeUNh
bGxiYWNrcywgQ2FsbGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CisKKyAg
ICBwbGF0Zm9ybUludmFsaWRhdGVDb250ZXh0KCk7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKKyAgICBtX3BsdWdpbkluZm9TdG9yZS5zZXRDbGllbnQoMCk7CisjZW5kaWYKKwor
I2lmbmRlZiBOREVCVUcKKyAgICB3ZWJDb250ZXh0Q291bnRlci5kZWNyZW1lbnQoKTsKKyNlbmRp
ZgorfQorCit2b2lkIFdlYkNvbnRleHQ6OmluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb250ZXh0
Q2xpZW50QmFzZSogY2xpZW50KQoreworICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsK
K30KKwordm9pZCBXZWJDb250ZXh0Ojppbml0aWFsaXplSW5qZWN0ZWRCdW5kbGVDbGllbnQoY29u
c3QgV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnRCYXNlKiBjbGllbnQpCit7CisgICAgbV9p
bmplY3RlZEJ1bmRsZUNsaWVudC5pbml0aWFsaXplKGNsaWVudCk7Cit9CisKK3ZvaWQgV2ViQ29u
dGV4dDo6aW5pdGlhbGl6ZUNvbm5lY3Rpb25DbGllbnQoY29uc3QgV0tDb250ZXh0Q29ubmVjdGlv
bkNsaWVudEJhc2UqIGNsaWVudCkKK3sKKyAgICBtX2Nvbm5lY3Rpb25DbGllbnQuaW5pdGlhbGl6
ZShjbGllbnQpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OnNldEhpc3RvcnlDbGllbnQoc3RkOjp1
bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+IGhpc3RvcnlDbGllbnQp
Cit7CisgICAgaWYgKCFoaXN0b3J5Q2xpZW50KQorICAgICAgICBtX2hpc3RvcnlDbGllbnQgPSBz
dGQ6Om1ha2VfdW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCk7CisgICAg
ZWxzZQorICAgICAgICBtX2hpc3RvcnlDbGllbnQgPSBXVEY6Om1vdmUoaGlzdG9yeUNsaWVudCk7
Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6c2V0RG93bmxvYWRDbGllbnQoc3RkOjp1bmlxdWVfcHRy
PEFQSTo6RG93bmxvYWRDbGllbnQ+IGRvd25sb2FkQ2xpZW50KQoreworICAgIGlmICghZG93bmxv
YWRDbGllbnQpCisgICAgICAgIG1fZG93bmxvYWRDbGllbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFQ
STo6RG93bmxvYWRDbGllbnQ+KCk7CisgICAgZWxzZQorICAgICAgICBtX2Rvd25sb2FkQ2xpZW50
ID0gV1RGOjptb3ZlKGRvd25sb2FkQ2xpZW50KTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpzZXRQ
cm9jZXNzTW9kZWwoUHJvY2Vzc01vZGVsIHByb2Nlc3NNb2RlbCkKK3sKKyAgICAvLyBHdWFyZCBh
Z2FpbnN0IEFQSSBtaXN1c2UuCisgICAgaWYgKCFtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkpCisgICAg
ICAgIENSQVNIKCk7CisgICAgaWYgKHByb2Nlc3NNb2RlbCAhPSBQcm9jZXNzTW9kZWxTaGFyZWRT
ZWNvbmRhcnlQcm9jZXNzICYmICFtX21lc3NhZ2VzVG9JbmplY3RlZEJ1bmRsZVBvc3RlZFRvRW1w
dHlDb250ZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgQ1JBU0goKTsKKworICAgIG1fcHJvY2Vzc01v
ZGVsID0gcHJvY2Vzc01vZGVsOworfQorCit2b2lkIFdlYkNvbnRleHQ6OnNldE1heGltdW1OdW1i
ZXJPZlByb2Nlc3Nlcyh1bnNpZ25lZCBtYXhpbXVtTnVtYmVyT2ZQcm9jZXNzZXMpCit7CisgICAg
Ly8gR3VhcmQgYWdhaW5zdCBBUEkgbWlzdXNlLgorICAgIGlmICghbV9wcm9jZXNzZXMuaXNFbXB0
eSgpKQorICAgICAgICBDUkFTSCgpOworCisgICAgaWYgKG1heGltdW1OdW1iZXJPZlByb2Nlc3Nl
cyA9PSAwKQorICAgICAgICBtX3dlYlByb2Nlc3NDb3VudExpbWl0ID0gVUlOVF9NQVg7CisgICAg
ZWxzZQorICAgICAgICBtX3dlYlByb2Nlc3NDb3VudExpbWl0ID0gbWF4aW11bU51bWJlck9mUHJv
Y2Vzc2VzOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFdlYkNvbnRleHQ6Om5ldHdvcmtpbmdQcm9j
ZXNzQ29ubmVjdGlvbigpCit7CisgICAgc3dpdGNoIChtX3Byb2Nlc3NNb2RlbCkgeworICAgIGNh
c2UgUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2VzczoKKyNpZiBFTkFCTEUoTkVUV09S
S19QUk9DRVNTKQorICAgICAgICBpZiAobV91c2VzTmV0d29ya1Byb2Nlc3MpCisgICAgICAgICAg
ICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy0+Y29ubmVjdGlvbigpOworI2VuZGlmCisgICAgICAg
IHJldHVybiBtX3Byb2Nlc3Nlc1swXS0+Y29ubmVjdGlvbigpOworICAgIGNhc2UgUHJvY2Vzc01v
ZGVsTXVsdGlwbGVTZWNvbmRhcnlQcm9jZXNzZXM6CisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VT
UykKKyAgICAgICAgQVNTRVJUKG1fdXNlc05ldHdvcmtQcm9jZXNzKTsKKyAgICAgICAgcmV0dXJu
IG1fbmV0d29ya1Byb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyNlbHNlCisgICAgICAgIGJyZWFrOwor
I2VuZGlmCisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwor
fQorCit2b2lkIFdlYkNvbnRleHQ6Omxhbmd1YWdlQ2hhbmdlZCh2b2lkKiBjb250ZXh0KQorewor
ICAgIHN0YXRpY19jYXN0PFdlYkNvbnRleHQqPihjb250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7
Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKK3sKKyAgICBzZW5kVG9B
bGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlVzZXJQcmVmZXJyZWRMYW5ndWFnZXND
aGFuZ2VkKHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKSkpOworI2lmIFVTRShTT1VQKSAmJiBFTkFC
TEUoTkVUV09SS19QUk9DRVNTKQorICAgIGlmIChtX3VzZXNOZXR3b3JrUHJvY2VzcyAmJiBtX25l
dHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6VXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJl
ZExhbmd1YWdlcygpKSwgMCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJDb250ZXh0OjpmdWxsS2V5
Ym9hcmRBY2Nlc3NNb2RlQ2hhbmdlZChib29sIGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQpCit7
CisgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpGdWxsS2V5Ym9h
cmRBY2Nlc3NNb2RlQ2hhbmdlZChmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkKSk7Cit9CisKK3Zv
aWQgV2ViQ29udGV4dDo6dGV4dENoZWNrZXJTdGF0ZUNoYW5nZWQoKQoreworICAgIHNlbmRUb0Fs
bFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0VGV4dENoZWNrZXJTdGF0ZShUZXh0
Q2hlY2tlcjo6c3RhdGUoKSkpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OnNldFVzZXNOZXR3b3Jr
UHJvY2Vzcyhib29sIHVzZXNOZXR3b3JrUHJvY2VzcykKK3sKKyNpZiBFTkFCTEUoTkVUV09SS19Q
Uk9DRVNTKQorICAgIG1fdXNlc05ldHdvcmtQcm9jZXNzID0gdXNlc05ldHdvcmtQcm9jZXNzOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odXNlc05ldHdvcmtQcm9jZXNzKTsKKyNlbmRpZgorfQor
Citib29sIFdlYkNvbnRleHQ6OnVzZXNOZXR3b3JrUHJvY2VzcygpIGNvbnN0Cit7CisjaWYgRU5B
QkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICByZXR1cm4gbV91c2VzTmV0d29ya1Byb2Nlc3M7Cisj
ZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKE5FVFdPUktf
UFJPQ0VTUykKK3ZvaWQgV2ViQ29udGV4dDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKQoreworICAg
IGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX25ldHdvcmtQ
cm9jZXNzID0gTmV0d29ya1Byb2Nlc3NQcm94eTo6Y3JlYXRlKCp0aGlzKTsKKworICAgIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisKKyAgICBwYXJhbWV0ZXJz
LnByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBXZWJQcmVmZXJlbmNlczo6YW55UGFnZXNBcmVVc2lu
Z1ByaXZhdGVCcm93c2luZygpOworCisgICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gbV9jYWNo
ZU1vZGVsOworICAgIHBhcmFtZXRlcnMuY2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRp
b24gPSBtX2NhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uOworCisgICAgcGFyYW1l
dGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkgPSBzdHJpbmdCeVJlc29sdmluZ1N5bWxpbmtzSW5QYXRo
KGRpc2tDYWNoZURpcmVjdG9yeSgpKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMuZGlza0NhY2hlRGly
ZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxl
Rm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisKKyAgICBwYXJhbWV0
ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBjb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7CisK
KyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKCFwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJl
Y3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVG
b3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0b3J5LCBw
YXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworCisgICAg
U3RyaW5nIGhzdHNEYXRhYmFzZVBhdGggPSBuZXR3b3JraW5nSFNUU0RhdGFiYXNlUGF0aCgpOwor
ICAgIGlmICghaHN0c0RhdGFiYXNlUGF0aC5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZShoc3RzRGF0YWJhc2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpS
ZWFkV3JpdGUsIHBhcmFtZXRlcnMuaHN0c0RhdGFiYXNlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CisK
KyAgICBTdHJpbmcgcGFyZW50QnVuZGxlRGlyZWN0b3J5ID0gdGhpcy0+cGFyZW50QnVuZGxlRGly
ZWN0b3J5KCk7CisgICAgaWYgKCFwYXJlbnRCdW5kbGVEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyZW50QnVuZGxlRGlyZWN0b3J5
LCBTYW5kYm94RXh0ZW5zaW9uOjpSZWFkT25seSwgcGFyYW1ldGVycy5wYXJlbnRCdW5kbGVEaXJl
Y3RvcnlFeHRlbnNpb25IYW5kbGUpOworI2VuZGlmCisKKyAgICBwYXJhbWV0ZXJzLnNob3VsZFVz
ZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiA9IG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9u
OworCisgICAgLy8gQWRkIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJhbWV0ZXJzCisgICAgcGxh
dGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MocGFyYW1ldGVycyk7CisKKyAgICAvLyBJbml0
aWFsaXplIHRoZSBuZXR3b3JrIHByb2Nlc3MuCisgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhwYXJhbWV0
ZXJzKSwgMCk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0UU9TKG5ldHdvcmtQcm9jZXNzTGF0ZW5j
eVFPUygpLCBuZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDApOworI2VuZGlmCit9CisK
K3ZvaWQgV2ViQ29udGV4dDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKE5ldHdvcmtQcm9jZXNzUHJv
eHkqIG5ldHdvcmtQcm9jZXNzUHJveHkpCit7CisgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3Mp
OworICAgIEFTU0VSVChuZXR3b3JrUHJvY2Vzc1Byb3h5ID09IG1fbmV0d29ya1Byb2Nlc3MuZ2V0
KCkpOworCisgICAgV2ViQ29udGV4dFN1cHBsZW1lbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9zdXBwbGVtZW50cy5iZWdpbigpOworICAgIFdlYkNvbnRleHRTdXBwbGVtZW50TWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3N1cHBsZW1lbnRzLmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgIGl0LT52YWx1ZS0+cHJvY2Vzc0RpZENsb3NlKG5ldHdvcmtQcm9j
ZXNzUHJveHkpOworCisgICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7CisKKyAgICBtX2Ns
aWVudC5uZXR3b3JrUHJvY2Vzc0RpZENyYXNoKHRoaXMpOworfQorCit2b2lkIFdlYkNvbnRleHQ6
OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihQYXNzUmVmUHRyPE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5PiByZXBs
eSkKK3sKKyAgICBBU1NFUlQocmVwbHkpOworCisgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsK
KyAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vzcyk7CisKKyAgICBtX25ldHdvcmtQcm9jZXNzLT5n
ZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24ocmVwbHkpOworfQorI2VuZGlmCisKKyNpZiBFTkFC
TEUoREFUQUJBU0VfUFJPQ0VTUykKK3ZvaWQgV2ViQ29udGV4dDo6ZW5zdXJlRGF0YWJhc2VQcm9j
ZXNzKCkKK3sKKyAgICBpZiAobV9kYXRhYmFzZVByb2Nlc3MpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fZGF0YWJhc2VQcm9jZXNzID0gRGF0YWJhc2VQcm9jZXNzUHJveHk6OmNyZWF0ZSh0aGlz
KTsKKworICAgIEFTU0VSVCghbV9pbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkp
OworCisgICAgLy8gKioqKioqKioqCisgICAgLy8gSU1QT1JUQU5UOiBEbyBub3QgY2hhbmdlIHRo
ZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBpbmRleGVkIGRhdGFiYXNlcyBvbiBkaXNrIHdpdGhv
dXQgZmlyc3QgY29uc3VsdGluZyBhIHJldmlld2VyIGZyb20gQXBwbGUgKDxyZGFyOi8vcHJvYmxl
bS8xNzQ1NDcxMj4pCisgICAgLy8gKioqKioqKioqCisgICAgRGF0YWJhc2VQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VE
aXJlY3RvcnkgPSBtX2luZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5OworCisgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eUV4dGVuc2lvbkhhbmRsZSk7CisKKyAgICBtX2RhdGFiYXNlUHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6RGF0YWJhc2VQcm9jZXNzOjpJbml0aWFsaXplRGF0YWJhc2VQcm9jZXNzKHBhcmFtZXRlcnMp
LCAwKTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpnZXREYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9u
KFBhc3NSZWZQdHI8TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0RGF0YWJhc2VQcm9jZXNz
Q29ubmVjdGlvbjo6RGVsYXllZFJlcGx5PiByZXBseSkKK3sKKyAgICBBU1NFUlQocmVwbHkpOwor
CisgICAgZW5zdXJlRGF0YWJhc2VQcm9jZXNzKCk7CisKKyAgICBtX2RhdGFiYXNlUHJvY2Vzcy0+
Z2V0RGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbihyZXBseSk7Cit9CisKK3ZvaWQgV2ViQ29udGV4
dDo6ZGF0YWJhc2VQcm9jZXNzQ3Jhc2hlZChEYXRhYmFzZVByb2Nlc3NQcm94eSogZGF0YWJhc2VQ
cm9jZXNzUHJveHkpCit7CisgICAgQVNTRVJUKG1fZGF0YWJhc2VQcm9jZXNzKTsKKyAgICBBU1NF
UlQoZGF0YWJhc2VQcm9jZXNzUHJveHkgPT0gbV9kYXRhYmFzZVByb2Nlc3MuZ2V0KCkpOworCisg
ICAgZm9yIChhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cykKKyAgICAgICAgc3VwcGxl
bWVudC52YWx1ZS0+cHJvY2Vzc0RpZENsb3NlKGRhdGFiYXNlUHJvY2Vzc1Byb3h5KTsKKworICAg
IG1fZGF0YWJhc2VQcm9jZXNzID0gbnVsbHB0cjsKK30KKyNlbmRpZgorCit2b2lkIFdlYkNvbnRl
eHQ6OndpbGxTdGFydFVzaW5nUHJpdmF0ZUJyb3dzaW5nKCkKK3sKKyAgICBjb25zdCBWZWN0b3I8
V2ViQ29udGV4dCo+JiBjb250ZXh0cyA9IGFsbENvbnRleHRzKCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDAsIGNvdW50ID0gY29udGV4dHMuc2l6ZSgpOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAg
Y29udGV4dHNbaV0tPnNldEFueVBhZ2VHcm91cE1pZ2h0SGF2ZVByaXZhdGVCcm93c2luZ0VuYWJs
ZWQodHJ1ZSk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6d2lsbFN0b3BVc2luZ1ByaXZhdGVCcm93
c2luZygpCit7CisgICAgY29uc3QgVmVjdG9yPFdlYkNvbnRleHQqPiYgY29udGV4dHMgPSBhbGxD
b250ZXh0cygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IGNvbnRleHRzLnNpemUo
KTsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIGNvbnRleHRzW2ldLT5zZXRBbnlQYWdlR3JvdXBN
aWdodEhhdmVQcml2YXRlQnJvd3NpbmdFbmFibGVkKGZhbHNlKTsKK30KKwordm9pZCBXZWJDb250
ZXh0Ojp3aW5kb3dTZXJ2ZXJDb25uZWN0aW9uU3RhdGVDaGFuZ2VkKCkKK3sKKyAgICBzaXplX3Qg
cHJvY2Vzc0NvdW50ID0gbV9wcm9jZXNzZXMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcHJvY2Vzc0NvdW50OyArK2kpCisgICAgICAgIG1fcHJvY2Vzc2VzW2ldLT53aW5kb3dT
ZXJ2ZXJDb25uZWN0aW9uU3RhdGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6c2V0
QW55UGFnZUdyb3VwTWlnaHRIYXZlUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIHByaXZhdGVC
cm93c2luZ0VuYWJsZWQpCit7CisgICAgbV9pY29uRGF0YWJhc2UtPnNldFByaXZhdGVCcm93c2lu
Z0VuYWJsZWQocHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7CisKKyNpZiBFTkFCTEUoTkVUV09SS19Q
Uk9DRVNTKQorICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSAmJiBuZXR3b3JrUHJvY2Vzcygp
KSB7CisgICAgICAgIGlmIChwcml2YXRlQnJvd3NpbmdFbmFibGVkKQorICAgICAgICAgICAgbmV0
d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkVuc3VyZVByaXZh
dGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lvbklEOjpsZWdhY3lQcml2YXRlU2Vzc2lvbklEKCkpLCAw
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3MoKS0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Np
b25JRDo6bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpKSwgMCk7CisgICAgfQorI2VuZGlmIC8vIEVO
QUJMRUQoTkVUV09SS19QUk9DRVNTKQorCisgICAgaWYgKHByaXZhdGVCcm93c2luZ0VuYWJsZWQp
CisgICAgICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6RW5zdXJl
UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uSUQ6OmxlZ2FjeVByaXZhdGVTZXNzaW9uSUQo
KSkpOworICAgIGVsc2UKKyAgICAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzOjpEZXN0cm95UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uSUQ6OmxlZ2FjeVBy
aXZhdGVTZXNzaW9uSUQoKSkpOworfQorCit2b2lkICgqc19pbnZhbGlkTWVzc2FnZUNhbGxiYWNr
KShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSk7CisKK3ZvaWQgV2ViQ29udGV4dDo6c2V0SW52YWxp
ZE1lc3NhZ2VDYWxsYmFjayh2b2lkICgqaW52YWxpZE1lc3NhZ2VDYWxsYmFjaykoV0tTdHJpbmdS
ZWYgbWVzc2FnZU5hbWUpKQoreworICAgIHNfaW52YWxpZE1lc3NhZ2VDYWxsYmFjayA9IGludmFs
aWRNZXNzYWdlQ2FsbGJhY2s7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6ZGlkUmVjZWl2ZUludmFs
aWRNZXNzYWdlKGNvbnN0IElQQzo6U3RyaW5nUmVmZXJlbmNlJiBtZXNzYWdlUmVjZWl2ZXJOYW1l
LCBjb25zdCBJUEM6OlN0cmluZ1JlZmVyZW5jZSYgbWVzc2FnZU5hbWUpCit7CisgICAgaWYgKCFz
X2ludmFsaWRNZXNzYWdlQ2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZ0J1
aWxkZXIgbWVzc2FnZU5hbWVTdHJpbmdCdWlsZGVyOworICAgIG1lc3NhZ2VOYW1lU3RyaW5nQnVp
bGRlci5hcHBlbmQobWVzc2FnZVJlY2VpdmVyTmFtZS5kYXRhKCksIG1lc3NhZ2VSZWNlaXZlck5h
bWUuc2l6ZSgpKTsKKyAgICBtZXNzYWdlTmFtZVN0cmluZ0J1aWxkZXIuYXBwZW5kKCIuIik7Cisg
ICAgbWVzc2FnZU5hbWVTdHJpbmdCdWlsZGVyLmFwcGVuZChtZXNzYWdlTmFtZS5kYXRhKCksIG1l
c3NhZ2VOYW1lLnNpemUoKSk7CisKKyAgICBzX2ludmFsaWRNZXNzYWdlQ2FsbGJhY2sodG9BUEko
QVBJOjpTdHJpbmc6OmNyZWF0ZShtZXNzYWdlTmFtZVN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSku
Z2V0KCkpKTsKK30KKwordm9pZCBXZWJDb250ZXh0Ojpwcm9jZXNzRGlkQ2FjaGVQYWdlKFdlYlBy
b2Nlc3NQcm94eSogcHJvY2VzcykKK3sKKyAgICBpZiAobV9wcm9jZXNzV2l0aFBhZ2VDYWNoZSAm
JiBtX3Byb2Nlc3NXaXRoUGFnZUNhY2hlICE9IHByb2Nlc3MpCisgICAgICAgIG1fcHJvY2Vzc1dp
dGhQYWdlQ2FjaGUtPnJlbGVhc2VQYWdlQ2FjaGUoKTsKKyAgICBtX3Byb2Nlc3NXaXRoUGFnZUNh
Y2hlID0gcHJvY2VzczsKK30KKworV2ViUHJvY2Vzc1Byb3h5JiBXZWJDb250ZXh0OjplbnN1cmVT
aGFyZWRXZWJQcm9jZXNzKCkKK3sKKyAgICBBU1NFUlQobV9wcm9jZXNzTW9kZWwgPT0gUHJvY2Vz
c01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2Vzcyk7CisgICAgaWYgKG1fcHJvY2Vzc2VzLmlzRW1w
dHkoKSkKKyAgICAgICAgY3JlYXRlTmV3V2ViUHJvY2VzcygpOworICAgIHJldHVybiAqbV9wcm9j
ZXNzZXNbMF07Cit9CisKK1dlYlByb2Nlc3NQcm94eSYgV2ViQ29udGV4dDo6Y3JlYXRlTmV3V2Vi
UHJvY2VzcygpCit7CisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICBpZiAobV91c2Vz
TmV0d29ya1Byb2Nlc3MpCisgICAgICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisjZW5kaWYK
KworICAgIFJlZjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3MgPSBXZWJQcm9jZXNzUHJveHk6OmNy
ZWF0ZSgqdGhpcyk7CisKKyAgICBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRl
cnM7CisKKyAgICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aCA9IGluamVjdGVkQnVuZGxl
UGF0aCgpOworICAgIGlmICghcGFyYW1ldGVycy5pbmplY3RlZEJ1bmRsZVBhdGguaXNFbXB0eSgp
KQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGFyYW1ldGVycy5pbmpl
Y3RlZEJ1bmRsZVBhdGgsIFNhbmRib3hFeHRlbnNpb246OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLmlu
amVjdGVkQnVuZGxlUGF0aEV4dGVuc2lvbkhhbmRsZSk7CisKKyAgICBwYXJhbWV0ZXJzLmFwcGxp
Y2F0aW9uQ2FjaGVEaXJlY3RvcnkgPSBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCk7CisgICAg
aWYgKCFwYXJhbWV0ZXJzLmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAg
ICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3Rvcnko
cGFyYW1ldGVycy5hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmFwcGxpY2F0
aW9uQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworCisgICAgcGFyYW1ldGVycy53ZWJT
UUxEYXRhYmFzZURpcmVjdG9yeSA9IG1fd2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnk7CisgICAgaWYg
KCFwYXJhbWV0ZXJzLndlYlNRTERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAg
U2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFt
ZXRlcnMud2ViU1FMRGF0YWJhc2VEaXJlY3RvcnksIHBhcmFtZXRlcnMud2ViU1FMRGF0YWJhc2VE
aXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOworCisgICAgcGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJl
Y3RvcnkgPSBkaXNrQ2FjaGVEaXJlY3RvcnkoKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMuZGlza0Nh
Y2hlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRl
SGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5
LCBwYXJhbWV0ZXJzLmRpc2tDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisKKyAgICBw
YXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkgPSBjb29raWVTdG9yYWdlRGlyZWN0b3J5
KCk7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgaWYgKCFwYXJhbWV0ZXJzLmNvb2tpZVN0b3Jh
Z2VEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5jb29raWVTdG9yYWdlRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwor
CisgICAgU3RyaW5nIG9wZW5HTENhY2hlRGlyZWN0b3J5ID0gdGhpcy0+b3BlbkdMQ2FjaGVEaXJl
Y3RvcnkoKTsKKyAgICBpZiAoIW9wZW5HTENhY2hlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAg
ICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KG9w
ZW5HTENhY2hlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLm9wZW5HTENhY2hlRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKKworICAgIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkgPSB0
aGlzLT5jb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKTsKKyAgICBpZiAoIWNvbnRhaW5lclRl
bXBvcmFyeURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNy
ZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb250YWluZXJUZW1wb3JhcnlEaXJlY3Rv
cnksIHBhcmFtZXRlcnMuY29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxl
KTsKKworICAgIFN0cmluZyBoc3RzRGF0YWJhc2VQYXRoID0gd2ViQ29udGVudEhTVFNEYXRhYmFz
ZVBhdGgoKTsKKyAgICBpZiAoIWhzdHNEYXRhYmFzZVBhdGguaXNFbXB0eSgpKQorICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoaHN0c0RhdGFiYXNlUGF0aCwgU2FuZGJveEV4
dGVuc2lvbjo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmhzdHNEYXRhYmFzZVBhdGhFeHRlbnNpb25I
YW5kbGUpOworI2VuZGlmCisKKyAgICBwYXJhbWV0ZXJzLm1lZGlhS2V5U3RvcmFnZURpcmVjdG9y
eSA9IG1fbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeTsKKyAgICBpZiAoIXBhcmFtZXRlcnMubWVk
aWFLZXlTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yUmVhZFdyaXRlRGlyZWN0b3J5KHBhcmFtZXRlcnMubWVkaWFLZXlT
dG9yYWdlRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLm1lZGlhS2V5U3RvcmFnZURpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSk7CisKKyAgICBwYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vz
c2lvbiA9IG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uOworCisgICAgcGFyYW1ldGVy
cy5jYWNoZU1vZGVsID0gbV9jYWNoZU1vZGVsOworICAgIHBhcmFtZXRlcnMubGFuZ3VhZ2VzID0g
dXNlclByZWZlcnJlZExhbmd1YWdlcygpOworCisgICAgY29weVRvVmVjdG9yKG1fc2NoZW1lc1Rv
UmVnaXN0ZXJBc0VtcHR5RG9jdW1lbnQsIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZXJk
QXNFbXB0eURvY3VtZW50KTsKKyAgICBjb3B5VG9WZWN0b3IobV9zY2hlbWVzVG9SZWdpc3RlckFz
U2VjdXJlLCBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmUpOworICAgIGNv
cHlUb1ZlY3RvcihtX3NjaGVtZXNUb1NldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3IsIHBh
cmFtZXRlcnMudXJsU2NoZW1lc0ZvcldoaWNoRG9tYWluUmVsYXhhdGlvbklzRm9yYmlkZGVuKTsK
KyAgICBjb3B5VG9WZWN0b3IobV9zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWwsIHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsKTsKKyAgICBjb3B5VG9WZWN0b3IobV9zY2hlbWVz
VG9SZWdpc3RlckFzTm9BY2Nlc3MsIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05v
QWNjZXNzKTsKKyAgICBjb3B5VG9WZWN0b3IobV9zY2hlbWVzVG9SZWdpc3RlckFzRGlzcGxheUlz
b2xhdGVkLCBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNEaXNwbGF5SXNvbGF0ZWQp
OworICAgIGNvcHlUb1ZlY3RvcihtX3NjaGVtZXNUb1JlZ2lzdGVyQXNDT1JTRW5hYmxlZCwgcGFy
YW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQ09SU0VuYWJsZWQpOworI2lmIEVOQUJMRShD
QUNIRV9QQVJUSVRJT05JTkcpCisgICAgY29weVRvVmVjdG9yKG1fc2NoZW1lc1RvUmVnaXN0ZXJB
c0NhY2hlUGFydGl0aW9uZWQsIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0NhY2hl
UGFydGl0aW9uZWQpOworI2VuZGlmCisKKyAgICBwYXJhbWV0ZXJzLnNob3VsZEFsd2F5c1VzZUNv
bXBsZXhUZXh0Q29kZVBhdGggPSBtX2Fsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoOworICAg
IHBhcmFtZXRlcnMuc2hvdWxkVXNlRm9udFNtb290aGluZyA9IG1fc2hvdWxkVXNlRm9udFNtb290
aGluZzsKKworICAgIC8vIEZJWE1FOiBUaGlzIGxlYXZlcyBVSSBwcm9jZXNzIGFuZCBXZWJQcm9j
ZXNzIGRpc2FncmVlaW5nIGFib3V0IHRoZSBzdGF0ZSBpZiB0aGUgY2xpZW50IGhhc24ndCBzZXQg
dGhlIHBhdGguCisgICAgLy8gaWNvbkRhdGFiYXNlUGF0aCBpcyBub24tZW1wdHkgYnkgZGVmYXVs
dCwgYnV0IG1faWNvbkRhdGFiYXNlIGlzbid0IGVuYWJsZWQgaW4gVUkgcHJvY2VzcyB1bmxlc3Mg
c2V0RGF0YWJhc2VQYXRoIGlzIGNhbGxlZCBleHBsaWNpdGx5LgorICAgIHBhcmFtZXRlcnMuaWNv
bkRhdGFiYXNlRW5hYmxlZCA9ICFpY29uRGF0YWJhc2VQYXRoKCkuaXNFbXB0eSgpOworCisgICAg
cGFyYW1ldGVycy50ZXJtaW5hdGlvblRpbWVvdXQgPSAobV9wcm9jZXNzTW9kZWwgPT0gUHJvY2Vz
c01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2VzcykgPyBzaGFyZWRTZWNvbmRhcnlQcm9jZXNzU2h1
dGRvd25UaW1lb3V0IDogMDsKKworICAgIHBhcmFtZXRlcnMudGV4dENoZWNrZXJTdGF0ZSA9IFRl
eHRDaGVja2VyOjpzdGF0ZSgpOworCisgICAgcGFyYW1ldGVycy5mdWxsS2V5Ym9hcmRBY2Nlc3NF
bmFibGVkID0gV2ViUHJvY2Vzc1Byb3h5OjpmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkKCk7CisK
KyAgICBwYXJhbWV0ZXJzLmRlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsID0gQVBJOjpVUkxS
ZXF1ZXN0OjpkZWZhdWx0VGltZW91dEludGVydmFsKCk7CisKKyNpZiBFTkFCTEUoTk9USUZJQ0FU
SU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQorICAgIC8vIEZJWE1FOiBUaGVy
ZSBzaG91bGQgYmUgYSBnZW5lcmljIHdheSBmb3Igc3VwcGxlbWVudHMgdG8gYWRkIHRvIHRoZSBp
bnRpYWxpemF0aW9uIHBhcmFtZXRlcnMuCisgICAgc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25N
YW5hZ2VyUHJveHk+KCktPnBvcHVsYXRlQ29weU9mTm90aWZpY2F0aW9uUGVybWlzc2lvbnMocGFy
YW1ldGVycy5ub3RpZmljYXRpb25QZXJtaXNzaW9ucyk7CisjZW5kaWYKKworI2lmIEVOQUJMRShO
RVRXT1JLX1BST0NFU1MpCisgICAgcGFyYW1ldGVycy51c2VzTmV0d29ya1Byb2Nlc3MgPSBtX3Vz
ZXNOZXR3b3JrUHJvY2VzczsKKyNlbmRpZgorCisgICAgcGFyYW1ldGVycy5wbHVnSW5BdXRvU3Rh
cnRPcmlnaW5IYXNoZXMgPSBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmF1dG9TdGFydE9yaWdp
bkhhc2hlc0NvcHkoKTsKKyAgICBjb3B5VG9WZWN0b3IobV9wbHVnSW5BdXRvU3RhcnRQcm92aWRl
ci5hdXRvU3RhcnRPcmlnaW5zKCksIHBhcmFtZXRlcnMucGx1Z0luQXV0b1N0YXJ0T3JpZ2lucyk7
CisKKyAgICBwYXJhbWV0ZXJzLm1lbW9yeUNhY2hlRGlzYWJsZWQgPSBtX21lbW9yeUNhY2hlRGlz
YWJsZWQ7CisKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICBwYXJhbWV0ZXJzLmhh
c0ltYWdlU2VydmljZXMgPSBTZXJ2aWNlc0NvbnRyb2xsZXI6OnNoYXJlZCgpLmhhc0ltYWdlU2Vy
dmljZXMoKTsKKyAgICBwYXJhbWV0ZXJzLmhhc1NlbGVjdGlvblNlcnZpY2VzID0gU2VydmljZXND
b250cm9sbGVyOjpzaGFyZWQoKS5oYXNTZWxlY3Rpb25TZXJ2aWNlcygpOworICAgIHBhcmFtZXRl
cnMuaGFzUmljaENvbnRlbnRTZXJ2aWNlcyA9IFNlcnZpY2VzQ29udHJvbGxlcjo6c2hhcmVkKCku
aGFzUmljaENvbnRlbnRTZXJ2aWNlcygpOworICAgIFNlcnZpY2VzQ29udHJvbGxlcjo6c2hhcmVk
KCkucmVmcmVzaEV4aXN0aW5nU2VydmljZXMoKTsKKyNlbmRpZgorCisgICAgLy8gQWRkIGFueSBw
bGF0Zm9ybSBzcGVjaWZpYyBwYXJhbWV0ZXJzCisgICAgcGxhdGZvcm1Jbml0aWFsaXplV2ViUHJv
Y2VzcyhwYXJhbWV0ZXJzKTsKKworICAgIFJlZlB0cjxBUEk6Ok9iamVjdD4gaW5qZWN0ZWRCdW5k
bGVJbml0aWFsaXphdGlvblVzZXJEYXRhID0gbV9pbmplY3RlZEJ1bmRsZUNsaWVudC5nZXRJbmpl
Y3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGEodGhpcyk7CisgICAgaWYgKCFpbmplY3Rl
ZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGEpCisgICAgICAgIGluamVjdGVkQnVuZGxlSW5p
dGlhbGl6YXRpb25Vc2VyRGF0YSA9IG1faW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJE
YXRhOworICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkluaXRpYWxpemVX
ZWJQcm9jZXNzKHBhcmFtZXRlcnMsIFdlYkNvbnRleHRVc2VyTWVzc2FnZUVuY29kZXIoaW5qZWN0
ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhLmdldCgpLCBwcm9jZXNzKSksIDApOworCisj
aWYgUExBVEZPUk0oQ09DT0EpCisgICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vz
czo6U2V0UU9TKHdlYlByb2Nlc3NMYXRlbmN5UU9TKCksIHdlYlByb2Nlc3NUaHJvdWdocHV0UU9T
KCkpLCAwKTsKKyNlbmRpZgorI2lmIFBMQVRGT1JNKElPUykKKyAgICBjYWNoZVN0b3JhZ2UoKS5z
ZXREZWZhdWx0T3JpZ2luUXVvdGEoMjVVTEwgKiAxMDI0ICogMTAyNCk7CisjZW5kaWYKKworICAg
IGlmIChXZWJQcmVmZXJlbmNlczo6YW55UGFnZXNBcmVVc2luZ1ByaXZhdGVCcm93c2luZygpKQor
ICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpFbnN1cmVQcml2YXRl
QnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRDo6bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpKSwgMCk7
CisKKyAgICBtX3Byb2Nlc3Nlcy5hcHBlbmQocHJvY2Vzcy5wdHIoKSk7CisKKyAgICBpZiAobV9w
cm9jZXNzTW9kZWwgPT0gUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2VzcykgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBtX21lc3NhZ2VzVG9JbmplY3RlZEJ1bmRsZVBv
c3RlZFRvRW1wdHlDb250ZXh0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBzdGQ6OnBhaXI8
U3RyaW5nLCBSZWZQdHI8QVBJOjpPYmplY3Q+PiYgbWVzc2FnZSA9IG1fbWVzc2FnZXNUb0luamVj
dGVkQnVuZGxlUG9zdGVkVG9FbXB0eUNvbnRleHRbaV07CisKKyAgICAgICAgICAgIElQQzo6QXJn
dW1lbnRFbmNvZGVyIG1lc3NhZ2VEYXRhOworCisgICAgICAgICAgICBtZXNzYWdlRGF0YS5lbmNv
ZGUobWVzc2FnZS5maXJzdCk7CisgICAgICAgICAgICBtZXNzYWdlRGF0YS5lbmNvZGUoV2ViQ29u
dGV4dFVzZXJNZXNzYWdlRW5jb2RlcihtZXNzYWdlLnNlY29uZC5nZXQoKSwgcHJvY2VzcykpOwor
ICAgICAgICAgICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6UG9zdEluamVj
dGVkQnVuZGxlTWVzc2FnZShJUEM6OkRhdGFSZWZlcmVuY2UobWVzc2FnZURhdGEuYnVmZmVyKCks
IG1lc3NhZ2VEYXRhLmJ1ZmZlclNpemUoKSkpLCAwKTsKKyAgICAgICAgfQorICAgICAgICBtX21l
c3NhZ2VzVG9JbmplY3RlZEJ1bmRsZVBvc3RlZFRvRW1wdHlDb250ZXh0LmNsZWFyKCk7CisgICAg
fSBlbHNlCisgICAgICAgIEFTU0VSVChtX21lc3NhZ2VzVG9JbmplY3RlZEJ1bmRsZVBvc3RlZFRv
RW1wdHlDb250ZXh0LmlzRW1wdHkoKSk7CisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikK
KyAgICAvLyBJbml0aWFsaXplIHJlbW90ZSBpbnNwZWN0b3IgY29ubmVjdGlvbiBub3cgdGhhdCB3
ZSBoYXZlIGEgc3ViLXByb2Nlc3MgdGhhdCBpcyBob3N0aW5nIG9uZSBvZiBvdXIgd2ViIHZpZXdz
LgorICAgIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpzaGFyZWQoKTsgCisjZW5kaWYKKwor
ICAgIHJldHVybiBwcm9jZXNzOworfQorCit2b2lkIFdlYkNvbnRleHQ6Ondhcm1Jbml0aWFsUHJv
Y2VzcygpICAKK3sKKyAgICBpZiAobV9oYXZlSW5pdGlhbEVtcHR5UHJvY2VzcykgeworICAgICAg
ICBBU1NFUlQoIW1fcHJvY2Vzc2VzLmlzRW1wdHkoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobV9wcm9jZXNzZXMuc2l6ZSgpID49IG1fd2ViUHJvY2Vzc0NvdW50TGltaXQp
CisgICAgICAgIHJldHVybjsKKworICAgIGNyZWF0ZU5ld1dlYlByb2Nlc3MoKTsKKyAgICBtX2hh
dmVJbml0aWFsRW1wdHlQcm9jZXNzID0gdHJ1ZTsKK30KKwordm9pZCBXZWJDb250ZXh0OjplbmFi
bGVQcm9jZXNzVGVybWluYXRpb24oKQoreworICAgIG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxl
ZCA9IHRydWU7CisgICAgVmVjdG9yPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+PiBwcm9jZXNzZXMg
PSBtX3Byb2Nlc3NlczsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2Nlc3Nlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAoc2hvdWxkVGVybWluYXRlKHByb2Nlc3Nlc1tpXS5nZXQo
KSkpCisgICAgICAgICAgICBwcm9jZXNzZXNbaV0tPnRlcm1pbmF0ZSgpOworICAgIH0KK30KKwor
Ym9vbCBXZWJDb250ZXh0OjpzaG91bGRUZXJtaW5hdGUoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNz
KQoreworICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5jb250YWlucyhwcm9jZXNzKSk7CisKKyAgICBp
ZiAoIW1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZm9yIChjb25zdCBhdXRvJiBzdXBwbGVtZW50IDogbV9zdXBwbGVtZW50cy52YWx1ZXMo
KSkgeworICAgICAgICBpZiAoIXN1cHBsZW1lbnQtPnNob3VsZFRlcm1pbmF0ZShwcm9jZXNzKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBXZWJDb250ZXh0Ojpwcm9jZXNzV2lsbE9wZW5Db25uZWN0aW9uKFdlYlByb2Nlc3NQ
cm94eSogcHJvY2VzcykKK3sKKyAgICBtX3N0b3JhZ2VNYW5hZ2VyLT5wcm9jZXNzV2lsbE9wZW5D
b25uZWN0aW9uKHByb2Nlc3MpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OnByb2Nlc3NXaWxsQ2xv
c2VDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKK3sKKyAgICBtX3N0b3JhZ2VN
YW5hZ2VyLT5wcm9jZXNzV2lsbENsb3NlQ29ubmVjdGlvbihwcm9jZXNzKTsKK30KKwordm9pZCBX
ZWJDb250ZXh0OjphcHBsaWNhdGlvbldpbGxUZXJtaW5hdGUoKQoreworICAgIG1fc3RvcmFnZU1h
bmFnZXItPmFwcGxpY2F0aW9uV2lsbFRlcm1pbmF0ZSgpOworfQorCit2b2lkIFdlYkNvbnRleHQ6
OnByb2Nlc3NEaWRGaW5pc2hMYXVuY2hpbmcoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQorewor
ICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5jb250YWlucyhwcm9jZXNzKSk7CisKKyAgICBpZiAoIW1f
dmlzaXRlZExpbmtzUG9wdWxhdGVkKSB7CisgICAgICAgIHBvcHVsYXRlVmlzaXRlZExpbmtzKCk7
CisgICAgICAgIG1fdmlzaXRlZExpbmtzUG9wdWxhdGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICAv
LyBTb21ldGltZXMgdGhlIG1lbW9yeVNhbXBsZXIgZ2V0cyBpbml0aWFsaXplZCBhZnRlciBwcm9j
ZXNzIGluaXRpYWxpemF0aW9uIGhhcyBoYXBwZW5lZCBidXQgYmVmb3JlIHRoZSBwcm9jZXNzIGhh
cyBmaW5pc2hlZCBsYXVuY2hpbmcKKyAgICAvLyBzbyBjaGVjayBpZiBpdCBuZWVkcyB0byBiZSBz
dGFydGVkIGhlcmUKKyAgICBpZiAobV9tZW1vcnlTYW1wbGVyRW5hYmxlZCkgeworICAgICAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FtcGxlTG9nU2FuZGJveEhhbmRsZTsgICAgICAgIAor
ICAgICAgICBkb3VibGUgbm93ID0gV1RGOjpjdXJyZW50VGltZSgpOworICAgICAgICBTdHJpbmcg
c2FtcGxlTG9nRmlsZVBhdGggPSBTdHJpbmc6OmZvcm1hdCgiV2ViUHJvY2VzcyVsbHVwaWQlZCIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obm93KSwgcHJvY2Vzcy0+cHJvY2Vzc0lk
ZW50aWZpZXIoKSk7CisgICAgICAgIHNhbXBsZUxvZ0ZpbGVQYXRoID0gU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShzYW1wbGVMb2dGaWxlUGF0aCwgU2FuZGJv
eEV4dGVuc2lvbjo6UmVhZFdyaXRlLCBzYW1wbGVMb2dTYW5kYm94SGFuZGxlKTsKKyAgICAgICAg
CisgICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0YXJ0TWVtb3J5
U2FtcGxlcihzYW1wbGVMb2dTYW5kYm94SGFuZGxlLCBzYW1wbGVMb2dGaWxlUGF0aCwgbV9tZW1v
cnlTYW1wbGVySW50ZXJ2YWwpLCAwKTsKKyAgICB9CisKKyAgICBtX2Nvbm5lY3Rpb25DbGllbnQu
ZGlkQ3JlYXRlQ29ubmVjdGlvbih0aGlzLCBwcm9jZXNzLT53ZWJDb25uZWN0aW9uKCkpOworfQor
Cit2b2lkIFdlYkNvbnRleHQ6OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByb2Nlc3NQcm94eSogcHJv
Y2VzcykKK3sKKyAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFpbnMocHJvY2VzcykpOworCisg
ICAgaWYgKG1faGF2ZUluaXRpYWxFbXB0eVByb2Nlc3MgJiYgcHJvY2VzcyA9PSBtX3Byb2Nlc3Nl
cy5sYXN0KCkpCisgICAgICAgIG1faGF2ZUluaXRpYWxFbXB0eVByb2Nlc3MgPSBmYWxzZTsKKwor
ICAgIC8vIEZJWE1FIChNdWx0aS1XZWJQcm9jZXNzKTogPHJkYXI6Ly9wcm9ibGVtLzEyMjM5NzY1
PiBTb21lIG9mIHRoZSBpbnZhbGlkYXRpb24gY2FsbHMgYmVsb3cgYXJlIHN0aWxsIG5lY2Vzc2Fy
eSBpbiBtdWx0aS1wcm9jZXNzIG1vZGUsIGJ1dCB0aGV5IHNob3VsZCBvbmx5IGFmZmVjdCBkYXRh
IHN0cnVjdHVyZXMgcGVydGFpbmluZyB0byB0aGUgcHJvY2VzcyBiZWluZyBkaXNjb25uZWN0ZWQu
CisgICAgLy8gQ2xlYXJpbmcgZXZlcnl0aGluZyBjYXVzZXMgYXNzZXJ0aW9uIGZhaWx1cmVzLCBz
byBpdCdzIGxlc3MgdHJvdWJsZSB0byBza2lwIHRoYXQgZm9yIG5vdy4KKyAgICBpZiAobV9wcm9j
ZXNzTW9kZWwgIT0gUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2VzcykgeworICAgICAg
ICBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBwcm90ZWN0KHByb2Nlc3MpOworICAgICAgICBpZiAo
bV9wcm9jZXNzV2l0aFBhZ2VDYWNoZSA9PSBwcm9jZXNzKQorICAgICAgICAgICAgbV9wcm9jZXNz
V2l0aFBhZ2VDYWNoZSA9IDA7CisKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ29udGV4dFN1cHBs
ZW1lbnQqPihzdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5PigpKS0+cHJvY2Vz
c0RpZENsb3NlKHByb2Nlc3MpOworCisgICAgICAgIG1fcHJvY2Vzc2VzLnJlbW92ZShtX3Byb2Nl
c3Nlcy5maW5kKHByb2Nlc3MpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdlYkNv
bnRleHRTdXBwbGVtZW50TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3VwcGxlbWVudHMuYmVn
aW4oKTsKKyAgICBXZWJDb250ZXh0U3VwcGxlbWVudE1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV9zdXBwbGVtZW50cy5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICBpdC0+dmFsdWUtPnByb2Nlc3NEaWRDbG9zZShwcm9jZXNzKTsKKworICAgIC8vIFRoZSB2ZWN0
b3IgbWF5IGhhdmUgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHByb2Nlc3MgcHJveHksIHdoaWNoIGlu
IHR1cm4gbWF5IGhhdmUgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBjb250ZXh0LgorICAgIC8v
IFNpbmNlIHZlY3RvciBlbGVtZW50cyBhcmUgZGVzdHJveWVkIGluIHBsYWNlLCB3ZSB3b3VsZCBy
ZWN1cnNlIGludG8gV2ViUHJvY2Vzc1Byb3h5IGRlc3RydWN0b3IKKyAgICAvLyBpZiBpdCB3ZXJl
IGludm9rZWQgZnJvbSBWZWN0b3I6OnJlbW92ZSgpLiBSZWZQdHIgZGVsYXlzIGRlc3RydWN0aW9u
IHVudGlsIGl0J3Mgc2FmZS4KKyAgICBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBwcm90ZWN0KHBy
b2Nlc3MpOworICAgIGlmIChtX3Byb2Nlc3NXaXRoUGFnZUNhY2hlID09IHByb2Nlc3MpCisgICAg
ICAgIG1fcHJvY2Vzc1dpdGhQYWdlQ2FjaGUgPSAwOworICAgIG1fcHJvY2Vzc2VzLnJlbW92ZSht
X3Byb2Nlc3Nlcy5maW5kKHByb2Nlc3MpKTsKK30KKworV2ViUHJvY2Vzc1Byb3h5JiBXZWJDb250
ZXh0OjpjcmVhdGVOZXdXZWJQcm9jZXNzUmVzcGVjdGluZ1Byb2Nlc3NDb3VudExpbWl0KCkKK3sK
KyAgICBpZiAobV9wcm9jZXNzZXMuc2l6ZSgpIDwgbV93ZWJQcm9jZXNzQ291bnRMaW1pdCkKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZU5ld1dlYlByb2Nlc3MoKTsKKworICAgIC8vIENob29zZSB0aGUg
cHJvY2VzcyB3aXRoIGZld2VzdCBwYWdlcy4KKyAgICBhdXRvJiBwcm9jZXNzID0gKnN0ZDo6bWlu
X2VsZW1lbnQobV9wcm9jZXNzZXMuYmVnaW4oKSwgbV9wcm9jZXNzZXMuZW5kKCksIFtdKGNvbnN0
IFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+JiBhLCBjb25zdCBSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5
PiYgYikgeworICAgICAgICByZXR1cm4gYS0+cGFnZUNvdW50KCkgPCBiLT5wYWdlQ291bnQoKTsK
KyAgICB9KTsKKworICAgIHJldHVybiAqcHJvY2VzczsKK30KKworUGFzc1JlZlB0cjxXZWJQYWdl
UHJveHk+IFdlYkNvbnRleHQ6OmNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwg
V2ViUGFnZUNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICBpZiAoIWNvbmZpZ3Vy
YXRpb24ucGFnZUdyb3VwKQorICAgICAgICBjb25maWd1cmF0aW9uLnBhZ2VHcm91cCA9IG1fZGVm
YXVsdFBhZ2VHcm91cC5wdHIoKTsKKyAgICBpZiAoIWNvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXMp
CisgICAgICAgIGNvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXMgPSAmY29uZmlndXJhdGlvbi5wYWdl
R3JvdXAtPnByZWZlcmVuY2VzKCk7CisgICAgaWYgKCFjb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5r
UHJvdmlkZXIpCisgICAgICAgIGNvbmZpZ3VyYXRpb24udmlzaXRlZExpbmtQcm92aWRlciA9IG1f
dmlzaXRlZExpbmtQcm92aWRlci5nZXQoKTsKKyAgICBpZiAoIWNvbmZpZ3VyYXRpb24ud2Vic2l0
ZURhdGFTdG9yZSkgeworICAgICAgICBBU1NFUlQoIWNvbmZpZ3VyYXRpb24uc2Vzc2lvbklELmlz
VmFsaWQoKSk7CisgICAgICAgIGNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSA9IG1fd2Vi
c2l0ZURhdGFTdG9yZS5nZXQoKTsKKyAgICAgICAgY29uZmlndXJhdGlvbi5zZXNzaW9uSUQgPSBj
b25maWd1cmF0aW9uLnByZWZlcmVuY2VzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkgPyBTZXNz
aW9uSUQ6OmxlZ2FjeVByaXZhdGVTZXNzaW9uSUQoKSA6IFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpOworICAgIH0KKworICAgIFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3M7Cisg
ICAgaWYgKG1fcHJvY2Vzc01vZGVsID09IFByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nl
c3MpIHsKKyAgICAgICAgcHJvY2VzcyA9ICZlbnN1cmVTaGFyZWRXZWJQcm9jZXNzKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKG1faGF2ZUluaXRpYWxFbXB0eVByb2Nlc3MpIHsKKyAgICAg
ICAgICAgIHByb2Nlc3MgPSBtX3Byb2Nlc3Nlcy5sYXN0KCk7CisgICAgICAgICAgICBtX2hhdmVJ
bml0aWFsRW1wdHlQcm9jZXNzID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoY29uZmlndXJh
dGlvbi5yZWxhdGVkUGFnZSkgeworICAgICAgICAgICAgLy8gU2hhcmluZyBwcm9jZXNzZXMsIGUu
Zy4gd2hlbiBjcmVhdGluZyB0aGUgcGFnZSB2aWEgd2luZG93Lm9wZW4oKS4KKyAgICAgICAgICAg
IHByb2Nlc3MgPSAmY29uZmlndXJhdGlvbi5yZWxhdGVkUGFnZS0+cHJvY2VzcygpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIHByb2Nlc3MgPSAmY3JlYXRlTmV3V2ViUHJvY2Vzc1Jlc3Bl
Y3RpbmdQcm9jZXNzQ291bnRMaW1pdCgpOworICAgIH0KKworICAgIHJldHVybiBwcm9jZXNzLT5j
cmVhdGVXZWJQYWdlKHBhZ2VDbGllbnQsIFdURjo6bW92ZShjb25maWd1cmF0aW9uKSk7Cit9CisK
K0Rvd25sb2FkUHJveHkqIFdlYkNvbnRleHQ6OmRvd25sb2FkKFdlYlBhZ2VQcm94eSogaW5pdGlh
dGluZ1BhZ2UsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAgICBEb3dubG9h
ZFByb3h5KiBkb3dubG9hZFByb3h5ID0gY3JlYXRlRG93bmxvYWRQcm94eShyZXF1ZXN0KTsKKyAg
ICB1aW50NjRfdCBpbml0aWF0aW5nUGFnZUlEID0gaW5pdGlhdGluZ1BhZ2UgPyBpbml0aWF0aW5n
UGFnZS0+cGFnZUlEKCkgOiAwOworCisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICBp
ZiAodXNlc05ldHdvcmtQcm9jZXNzKCkgJiYgbmV0d29ya1Byb2Nlc3MoKSkgeworICAgICAgICAv
LyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiBSZXBsaWNhdGUgd2hhdGV2ZXIgRnJhbWVMb2FkZXI6
OnNldE9yaWdpbmFsVVJMRm9yRG93bmxvYWRSZXF1ZXN0IGRvZXMgd2l0aCB0aGUgcmVxdWVzdCBo
ZXJlLgorICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6RG93bmxvYWRSZXF1ZXN0KGRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKSwgcmVxdWVz
dCksIDApOworICAgICAgICByZXR1cm4gZG93bmxvYWRQcm94eTsKKyAgICB9CisjZW5kaWYKKwor
ICAgIG1fcHJvY2Vzc2VzWzBdLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpEb3dubG9hZFJl
cXVlc3QoZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpLCBpbml0aWF0aW5nUGFnZUlELCByZXF1
ZXN0KSwgMCk7CisgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7Cit9CisKK0Rvd25sb2FkUHJveHkq
IFdlYkNvbnRleHQ6OnJlc3VtZURvd25sb2FkKGNvbnN0IEFQSTo6RGF0YSogcmVzdW1lRGF0YSwg
Y29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHkg
PSBjcmVhdGVEb3dubG9hZFByb3h5KFJlc291cmNlUmVxdWVzdCgpKTsKKworICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOworICAgIGlmICghcGF0aC5p
c0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoLCBT
YW5kYm94RXh0ZW5zaW9uOjpSZWFkV3JpdGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpOworCisj
aWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkg
JiYgbmV0d29ya1Byb2Nlc3MoKSkgeworICAgICAgICBuZXR3b3JrUHJvY2VzcygpLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UmVzdW1lRG93bmxvYWQoZG93bmxvYWRQcm94eS0+ZG93
bmxvYWRJRCgpLCByZXN1bWVEYXRhLT5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRl
bnNpb25IYW5kbGUpLCAwKTsKKyAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CisgICAgfQor
I2VuZGlmCisKKyAgICBtX3Byb2Nlc3Nlc1swXS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6
UmVzdW1lRG93bmxvYWQoZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpLCByZXN1bWVEYXRhLT5k
YXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpLCAwKTsKKyAgICBy
ZXR1cm4gZG93bmxvYWRQcm94eTsKK30KKwordm9pZCBXZWJDb250ZXh0Ojpwb3N0TWVzc2FnZVRv
SW5qZWN0ZWRCdW5kbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgQVBJOjpPYmplY3QqIG1l
c3NhZ2VCb2R5KQoreworICAgIGlmIChtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
aWYgKG1fcHJvY2Vzc01vZGVsID09IFByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3Mp
CisgICAgICAgICAgICBtX21lc3NhZ2VzVG9JbmplY3RlZEJ1bmRsZVBvc3RlZFRvRW1wdHlDb250
ZXh0LmFwcGVuZChzdGQ6Om1ha2VfcGFpcihtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vz
c2VzKSB7CisgICAgICAgIC8vIEZJWE1FOiBSZXR1cm4gZWFybHkgaWYgdGhlIG1lc3NhZ2UgYm9k
eSBjb250YWlucyBhbnkgcmVmZXJlbmNlcyB0byBXS1BhZ2VSZWZzL1dLRnJhbWVSZWZzIGV0Yy4g
c2luY2UgdGhleSdyZSBsb2NhbCB0byBhIHByb2Nlc3MuCisgICAgICAgIElQQzo6QXJndW1lbnRF
bmNvZGVyIG1lc3NhZ2VEYXRhOworICAgICAgICBtZXNzYWdlRGF0YS5lbmNvZGUobWVzc2FnZU5h
bWUpOworICAgICAgICBtZXNzYWdlRGF0YS5lbmNvZGUoV2ViQ29udGV4dFVzZXJNZXNzYWdlRW5j
b2RlcihtZXNzYWdlQm9keSwgKnByb2Nlc3MuZ2V0KCkpKTsKKworICAgICAgICBwcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQb3N0SW5qZWN0ZWRCdW5kbGVNZXNzYWdlKElQQzo6
RGF0YVJlZmVyZW5jZShtZXNzYWdlRGF0YS5idWZmZXIoKSwgbWVzc2FnZURhdGEuYnVmZmVyU2l6
ZSgpKSksIDApOworICAgIH0KK30KKworLy8gSW5qZWN0ZWRCdW5kbGUgY2xpZW50CisKK3ZvaWQg
V2ViQ29udGV4dDo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlTmFtZSwgQVBJOjpPYmplY3QqIG1lc3NhZ2VCb2R5KQoreworICAgIG1faW5q
ZWN0ZWRCdW5kbGVDbGllbnQuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUodGhp
cywgbWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5KTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpkaWRS
ZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKGNvbnN0IFN0cmluZyYg
bWVzc2FnZU5hbWUsIEFQSTo6T2JqZWN0KiBtZXNzYWdlQm9keSwgUmVmUHRyPEFQSTo6T2JqZWN0
PiYgcmV0dXJuRGF0YSkKK3sKKyAgICBtX2luamVjdGVkQnVuZGxlQ2xpZW50LmRpZFJlY2VpdmVT
eW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUodGhpcywgbWVzc2FnZU5hbWUsIG1l
c3NhZ2VCb2R5LCByZXR1cm5EYXRhKTsKK30KKwordm9pZCBXZWJDb250ZXh0Ojpwb3B1bGF0ZVZp
c2l0ZWRMaW5rcygpCit7CisgICAgbV9oaXN0b3J5Q2xpZW50LT5wb3B1bGF0ZVZpc2l0ZWRMaW5r
cygqdGhpcyk7Cit9CisKK1dlYkNvbnRleHQ6OlN0YXRpc3RpY3MmIFdlYkNvbnRleHQ6OnN0YXRp
c3RpY3MoKQoreworICAgIHN0YXRpYyBTdGF0aXN0aWNzIHN0YXRpc3RpY3MgPSBTdGF0aXN0aWNz
KCk7CisKKyAgICByZXR1cm4gc3RhdGlzdGljczsKK30KKworI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQordm9pZCBXZWJDb250ZXh0OjpzZXRBZGRpdGlvbmFsUGx1Z2luc0RpcmVjdG9y
eShjb25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBkaXJlY3Rv
cmllczsKKyAgICBkaXJlY3Rvcmllcy5hcHBlbmQoZGlyZWN0b3J5KTsKKworICAgIG1fcGx1Z2lu
SW5mb1N0b3JlLnNldEFkZGl0aW9uYWxQbHVnaW5zRGlyZWN0b3JpZXMoZGlyZWN0b3JpZXMpOwor
fQorI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorCit2b2lkIFdlYkNvbnRl
eHQ6OnNldEFsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoKGJvb2wgYWx3YXlzVXNlQ29tcGxl
eFRleHQpCit7CisgICAgbV9hbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aCA9IGFsd2F5c1Vz
ZUNvbXBsZXhUZXh0OworICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vz
czo6U2V0QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGgoYWx3YXlzVXNlQ29tcGxleFRleHQp
KTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpzZXRTaG91bGRVc2VGb250U21vb3RoaW5nKGJvb2wg
dXNlRm9udFNtb290aGluZykKK3sKKyAgICBtX3Nob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSB1c2VG
b250U21vb3RoaW5nOworICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vz
czo6U2V0U2hvdWxkVXNlRm9udFNtb290aGluZyh1c2VGb250U21vb3RoaW5nKSk7Cit9CisKK3Zv
aWQgV2ViQ29udGV4dDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0VtcHR5RG9jdW1lbnQoY29uc3QgU3Ry
aW5nJiB1cmxTY2hlbWUpCit7CisgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzRW1wdHlEb2N1bWVu
dC5hZGQodXJsU2NoZW1lKTsKKyAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNFbXB0eURvY3VtZW50KHVybFNjaGVtZSkpOworfQor
Cit2b2lkIFdlYkNvbnRleHQ6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUoY29uc3QgU3RyaW5n
JiB1cmxTY2hlbWUpCit7CisgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzU2VjdXJlLmFkZCh1cmxT
Y2hlbWUpOworICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVn
aXN0ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpKTsKK30KKwordm9pZCBXZWJDb250ZXh0
OjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYg
dXJsU2NoZW1lKQoreworICAgIG1fc2NoZW1lc1RvU2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRl
bkZvci5hZGQodXJsU2NoZW1lKTsKKyAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6Oldl
YlByb2Nlc3M6OlNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUodXJsU2No
ZW1lKSk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6c2V0Q2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVz
dEV2YWx1YXRpb24oYm9vbCB2YWx1ZSkKK3sKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQor
ICAgIG1fY2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24gPSB2YWx1ZTsKKyAgICBp
ZiAobV91c2VzTmV0d29ya1Byb2Nlc3MgJiYgbV9uZXR3b3JrUHJvY2VzcykgeworICAgICAgICBt
X25ldHdvcmtQcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0Q2FuSGFu
ZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24odmFsdWUpLCAwKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyNlbmRpZgorfQorCit2
b2lkIFdlYkNvbnRleHQ6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmIHVy
bFNjaGVtZSkKK3sKKyAgICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbC5hZGQodXJsU2NoZW1l
KTsKKyAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVy
VVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpyZWdp
c3RlclVSTFNjaGVtZUFzTm9BY2Nlc3MoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCit7CisgICAg
bV9zY2hlbWVzVG9SZWdpc3RlckFzTm9BY2Nlc3MuYWRkKHVybFNjaGVtZSk7CisgICAgc2VuZFRv
QWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzTm9B
Y2Nlc3ModXJsU2NoZW1lKSk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6cmVnaXN0ZXJVUkxTY2hl
bWVBc0Rpc3BsYXlJc29sYXRlZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKK3sKKyAgICBtX3Nj
aGVtZXNUb1JlZ2lzdGVyQXNEaXNwbGF5SXNvbGF0ZWQuYWRkKHVybFNjaGVtZSk7CisgICAgc2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFz
RGlzcGxheUlzb2xhdGVkKHVybFNjaGVtZSkpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OnJlZ2lz
dGVyVVJMU2NoZW1lQXNDT1JTRW5hYmxlZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKK3sKKyAg
ICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNDT1JTRW5hYmxlZC5hZGQodXJsU2NoZW1lKTsKKyAgICBz
ZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1l
QXNDT1JTRW5hYmxlZCh1cmxTY2hlbWUpKTsKK30KKworSGFzaFNldDxTdHJpbmc+JiBXZWJDb250
ZXh0OjpnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQoreworICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZz4+IHNldDsKKyAgICByZXR1cm4g
c2V0OworfQorCit2b2lkIFdlYkNvbnRleHQ6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZp
bmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQoreworICAg
IGlmICghdXJsU2NoZW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgc2NoZW1lTG93
ZXIgPSB1cmxTY2hlbWUubG93ZXIoKTsKKyAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVBy
b3RvY29sSGFuZGxlcnMoKS5hZGQoc2NoZW1lTG93ZXIpOworICAgIGZvciAoYXV0byogY29udGV4
dCA6IGFsbENvbnRleHRzKCkpCisgICAgICAgIGNvbnRleHQtPnJlZ2lzdGVyU2NoZW1lRm9yQ3Vz
dG9tUHJvdG9jb2woc2NoZW1lTG93ZXIpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OnVucmVnaXN0
ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3Ry
aW5nJiB1cmxTY2hlbWUpCit7CisgICAgaWYgKCF1cmxTY2hlbWUpCisgICAgICAgIHJldHVybjsK
KworICAgIFN0cmluZyBzY2hlbWVMb3dlciA9IHVybFNjaGVtZS5sb3dlcigpOworICAgIGdsb2Jh
bFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJlbW92ZShzY2hlbWVMb3dl
cik7CisgICAgZm9yIChhdXRvKiBjb250ZXh0IDogYWxsQ29udGV4dHMoKSkKKyAgICAgICAgY29u
dGV4dC0+dW5yZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKHNjaGVtZUxvd2VyKTsKK30K
KworI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCit2b2lkIFdlYkNvbnRleHQ6OnJlZ2lz
dGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQor
eworICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0NhY2hlUGFydGl0aW9uZWQuYWRkKHVybFNjaGVt
ZSk7CisgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3Rl
clVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZCh1cmxTY2hlbWUpKTsKK30KKyNlbmRpZgorCit2
b2lkIFdlYkNvbnRleHQ6OnNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQorewor
ICAgIG1fY2FjaGVNb2RlbCA9IGNhY2hlTW9kZWw7CisgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRDYWNoZU1vZGVsKHN0YXRpY19jYXN0PHVpbnQzMl90Piht
X2NhY2hlTW9kZWwpKSk7CisKKyAgICAvLyBGSVhNRTogSW5mb3JtIHRoZSBOZXR3b3JrIFByb2Nl
c3MgaWYgaW4gdXNlLgorfQorCit2b2lkIFdlYkNvbnRleHQ6OnNldERlZmF1bHRSZXF1ZXN0VGlt
ZW91dEludGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpCit7CisgICAgc2VuZFRvQWxsUHJv
Y2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRl
cnZhbCh0aW1lb3V0SW50ZXJ2YWwpKTsKK30KKworRG93bmxvYWRQcm94eSogV2ViQ29udGV4dDo6
Y3JlYXRlRG93bmxvYWRQcm94eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7Cisj
aWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICBpZiAodXNlc05ldHdvcmtQcm9jZXNzKCkp
IHsKKyAgICAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgQVNTRVJUKG1fbmV0
d29ya1Byb2Nlc3MpOworICAgICAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy0+Y3JlYXRlRG93
bmxvYWRQcm94eShyZXF1ZXN0KTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBlbnN1cmVT
aGFyZWRXZWJQcm9jZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShyZXF1ZXN0KTsKK30KKwordm9p
ZCBXZWJDb250ZXh0OjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVz
c2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpNZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNlaXZlcikK
K3sKKyAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIobWVzc2FnZVJl
Y2VpdmVyTmFtZSwgbWVzc2FnZVJlY2VpdmVyKTsKK30KKwordm9pZCBXZWJDb250ZXh0OjphZGRN
ZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwg
dWludDY0X3QgZGVzdGluYXRpb25JRCwgSVBDOjpNZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNl
aXZlcikKK3sKKyAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIobWVz
c2FnZVJlY2VpdmVyTmFtZSwgZGVzdGluYXRpb25JRCwgbWVzc2FnZVJlY2VpdmVyKTsKK30KKwor
dm9pZCBXZWJDb250ZXh0OjpyZW1vdmVNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVu
Y2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCkKK3sKKyAgICBt
X21lc3NhZ2VSZWNlaXZlck1hcC5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIobWVzc2FnZVJlY2VpdmVy
TmFtZSwgZGVzdGluYXRpb25JRCk7Cit9CisKK2Jvb2wgV2ViQ29udGV4dDo6ZGlzcGF0Y2hNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVj
b2RlcikKK3sKKyAgICByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXAuZGlzcGF0Y2hNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpOworfQorCitib29sIFdlYkNvbnRleHQ6OmRpc3BhdGNoU3lu
Y01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBJUEM6Ok1lc3NhZ2VEZWNvZGVy
JiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNzYWdlRW5jb2Rlcj4mIHJlcGx5RW5j
b2RlcikKK3sKKyAgICByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXAuZGlzcGF0Y2hTeW5jTWVz
c2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOworfQorCit2b2lkIFdlYkNv
bnRleHQ6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgSVBD
OjpNZXNzYWdlRGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OldlYkNvbnRleHQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSkgeworICAgICAgICBkaWRSZWNlaXZlV2ViQ29udGV4dE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVj
b2Rlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gV2ViQ29udGV4dExlZ2FjeU1lc3NhZ2VzOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCkKKyAgICAgICAgJiYgZGVjb2Rlci5tZXNzYWdlTmFtZSgpID09IFdlYkNvbnRleHRM
ZWdhY3lNZXNzYWdlczo6cG9zdE1lc3NhZ2VNZXNzYWdlTmFtZSgpKSB7CisgICAgICAgIFN0cmlu
ZyBtZXNzYWdlTmFtZTsKKyAgICAgICAgUmVmUHRyPEFQSTo6T2JqZWN0PiBtZXNzYWdlQm9keTsK
KyAgICAgICAgV2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlQm9keURlY29kZXIo
bWVzc2FnZUJvZHksICpXZWJQcm9jZXNzUHJveHk6OmZyb21Db25uZWN0aW9uKGNvbm5lY3Rpb24p
KTsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXNzYWdlTmFtZSkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWVzc2FnZUJvZHlEZWNvZGVy
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBkaWRSZWNlaXZlTWVzc2FnZUZyb21J
bmplY3RlZEJ1bmRsZShtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgV2Vi
Q29udGV4dDo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlv
biwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVz
c2FnZUVuY29kZXI+JiByZXBseUVuY29kZXIpCit7CisgICAgaWYgKGRlY29kZXIubWVzc2FnZVJl
Y2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJDb250ZXh0OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCkpIHsKKyAgICAgICAgZGlkUmVjZWl2ZVN5bmNXZWJDb250ZXh0TWVzc2FnZShjb25uZWN0aW9u
LCBkZWNvZGVyLCByZXBseUVuY29kZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IFdlYkNvbnRleHRMZWdhY3lNZXNz
YWdlczo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpCisgICAgICAgICYmIGRlY29kZXIubWVzc2FnZU5h
bWUoKSA9PSBXZWJDb250ZXh0TGVnYWN5TWVzc2FnZXM6OnBvc3RTeW5jaHJvbm91c01lc3NhZ2VN
ZXNzYWdlTmFtZSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgZW5j
b2RlIHNvbWV0aGluZyBpbiB0aGUgY2FzZSB0aGF0IHRoZSBhcmd1bWVudHMgZG8gbm90IGRlY29k
ZSBjb3JyZWN0bHkuCisKKyAgICAgICAgV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzID0gV2ViUHJv
Y2Vzc1Byb3h5Ojpmcm9tQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKKworICAgICAgICBTdHJpbmcg
bWVzc2FnZU5hbWU7CisgICAgICAgIFJlZlB0cjxBUEk6Ok9iamVjdD4gbWVzc2FnZUJvZHk7Cisg
ICAgICAgIFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZUJvZHlEZWNvZGVyKG1l
c3NhZ2VCb2R5LCAqcHJvY2Vzcyk7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWVzc2Fn
ZU5hbWUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KG1lc3NhZ2VCb2R5RGVjb2RlcikpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVm
UHRyPEFQSTo6T2JqZWN0PiByZXR1cm5EYXRhOworICAgICAgICBkaWRSZWNlaXZlU3luY2hyb25v
dXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKG1lc3NhZ2VOYW1lLCBtZXNzYWdlQm9keS5nZXQo
KSwgcmV0dXJuRGF0YSk7CisgICAgICAgIHJlcGx5RW5jb2Rlci0+ZW5jb2RlKFdlYkNvbnRleHRV
c2VyTWVzc2FnZUVuY29kZXIocmV0dXJuRGF0YS5nZXQoKSwgKnByb2Nlc3MpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIFdl
YkNvbnRleHQ6OnNldEVuaGFuY2VkQWNjZXNzaWJpbGl0eShib29sIGZsYWcpCit7CisgICAgc2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRFbmhhbmNlZEFjY2Vzc2li
aWxpdHkoZmxhZykpOworfQorICAgIAordm9pZCBXZWJDb250ZXh0OjpzdGFydE1lbW9yeVNhbXBs
ZXIoY29uc3QgZG91YmxlIGludGVydmFsKQoreyAgICAKKyAgICAvLyBGb3IgbmV3IFdlYlByb2Nl
c3NlcyB3ZSB3aWxsIGFsc28gd2FudCB0byBzdGFydCB0aGUgTWVtb3J5IFNhbXBsZXIKKyAgICBt
X21lbW9yeVNhbXBsZXJFbmFibGVkID0gdHJ1ZTsKKyAgICBtX21lbW9yeVNhbXBsZXJJbnRlcnZh
bCA9IGludGVydmFsOworICAgIAorICAgIC8vIEZvciBVSVByb2Nlc3MKKyNpZiBFTkFCTEUoTUVN
T1JZX1NBTVBMRVIpCisgICAgV2ViTWVtb3J5U2FtcGxlcjo6c2hhcmVkKCktPnN0YXJ0KGludGVy
dmFsKTsKKyNlbmRpZgorICAgIAorICAgIC8vIEZvciBXZWJQcm9jZXNzCisgICAgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlIHNhbXBsZUxvZ1NhbmRib3hIYW5kbGU7ICAgIAorICAgIGRvdWJsZSBu
b3cgPSBXVEY6OmN1cnJlbnRUaW1lKCk7CisgICAgU3RyaW5nIHNhbXBsZUxvZ0ZpbGVQYXRoID0g
U3RyaW5nOjpmb3JtYXQoIldlYlByb2Nlc3MlbGx1Iiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
ZyBsb25nPihub3cpKTsKKyAgICBzYW1wbGVMb2dGaWxlUGF0aCA9IFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZUZvclRlbXBvcmFyeUZpbGUoc2FtcGxlTG9nRmlsZVBhdGgsIFNhbmRib3hF
eHRlbnNpb246OlJlYWRXcml0ZSwgc2FtcGxlTG9nU2FuZGJveEhhbmRsZSk7CisgICAgCisgICAg
c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdGFydE1lbW9yeVNhbXBs
ZXIoc2FtcGxlTG9nU2FuZGJveEhhbmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIGludGVydmFsKSk7
Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6c3RvcE1lbW9yeVNhbXBsZXIoKQoreyAgICAKKyAgICAv
LyBGb3IgV2ViUHJvY2VzcworICAgIG1fbWVtb3J5U2FtcGxlckVuYWJsZWQgPSBmYWxzZTsKKyAg
ICAKKyAgICAvLyBGb3IgVUlQcm9jZXNzCisjaWYgRU5BQkxFKE1FTU9SWV9TQU1QTEVSKQorICAg
IFdlYk1lbW9yeVNhbXBsZXI6OnNoYXJlZCgpLT5zdG9wKCk7CisjZW5kaWYKKworICAgIHNlbmRU
b0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3RvcE1lbW9yeVNhbXBsZXIoKSk7
Cit9CisKK1N0cmluZyBXZWJDb250ZXh0OjphcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkgY29u
c3QKK3sKKyAgICBpZiAoIW1fb3ZlcnJpZGVBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5LmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIG1fb3ZlcnJpZGVBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5
OworCisgICAgcmV0dXJuIHBsYXRmb3JtRGVmYXVsdEFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rvcnko
KTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpzZXRJY29uRGF0YWJhc2VQYXRoKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKK3sKKyAgICBtX292ZXJyaWRlSWNvbkRhdGFiYXNlUGF0aCA9IHBhdGg7CisgICAg
aWYgKCFtX292ZXJyaWRlSWNvbkRhdGFiYXNlUGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8g
VGhpcyBpbXBsaWNpdGx5IGVuYWJsZXMgdGhlIGRhdGFiYXNlIG9uIFVJIHByb2Nlc3Mgc2lkZS4K
KyAgICAgICAgbV9pY29uRGF0YWJhc2UtPnNldERhdGFiYXNlUGF0aChwYXRoKTsKKyAgICB9Cit9
CisKK1N0cmluZyBXZWJDb250ZXh0OjppY29uRGF0YWJhc2VQYXRoKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fb3ZlcnJpZGVJY29uRGF0YWJhc2VQYXRoLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4g
bV9vdmVycmlkZUljb25EYXRhYmFzZVBhdGg7CisKKyAgICByZXR1cm4gcGxhdGZvcm1EZWZhdWx0
SWNvbkRhdGFiYXNlUGF0aCgpOworfQorCitTdHJpbmcgV2ViQ29udGV4dDo6ZGlza0NhY2hlRGly
ZWN0b3J5KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fb3ZlcnJpZGVEaXNrQ2FjaGVEaXJlY3Rvcnku
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9vdmVycmlkZURpc2tDYWNoZURpcmVjdG9yeTsK
KworICAgIHJldHVybiBwbGF0Zm9ybURlZmF1bHREaXNrQ2FjaGVEaXJlY3RvcnkoKTsKK30KKwor
U3RyaW5nIFdlYkNvbnRleHQ6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdAoreworICAg
IGlmICghbV9vdmVycmlkZUNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gbV9vdmVycmlkZUNvb2tpZVN0b3JhZ2VEaXJlY3Rvcnk7CisKKyAgICByZXR1cm4g
cGxhdGZvcm1EZWZhdWx0Q29va2llU3RvcmFnZURpcmVjdG9yeSgpOworfQorCit2b2lkIFdlYkNv
bnRleHQ6OnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpCit7CisgICAgQVNTRVJUKG1fcHJvY2Vz
c2VzLmlzRW1wdHkoKSk7CisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICBBU1NFUlQo
IW1fbmV0d29ya1Byb2Nlc3MpOworCisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAg
IHJldHVybjsKKyNlbmRpZgorCisgICAgaWYgKCFtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uID0gdHJ1
ZTsKK30KKwordm9pZCBXZWJDb250ZXh0OjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZv
ckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5n
JiBob3N0KQoreworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisgICAgaWYgKG1fdXNlc05l
dHdvcmtQcm9jZXNzICYmIG1fbmV0d29ya1Byb2Nlc3MpIHsKKyAgICAgICAgbV9uZXR3b3JrUHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkFsbG93U3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhvc3QpLCAw
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorCisjaWYgVVNFKFNPVVApCisgICAg
bV9wcm9jZXNzZXNbMF0tPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkFsbG93U3BlY2lmaWNI
VFRQU0NlcnRpZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZS0+Y2VydGlmaWNhdGVJbmZvKCksIGhv
c3QpLCAwKTsKKyAgICByZXR1cm47CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjZXJ0aWZpY2F0
ZSk7CisgICAgVU5VU0VEX1BBUkFNKGhvc3QpOworI2VuZGlmCisKKyNpZiAhUExBVEZPUk0oSU9T
KQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViQ29udGV4
dDo6c2V0SFRUUFBpcGVsaW5pbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICBSZXNvdXJjZVJlcXVlc3Q6OnNldEhUVFBQaXBlbGluaW5nRW5hYmxlZChl
bmFibGVkKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOworI2VuZGlmCit9CisK
K2Jvb2wgV2ViQ29udGV4dDo6aHR0cFBpcGVsaW5pbmdFbmFibGVkKCkgY29uc3QKK3sKKyNpZiBQ
TEFURk9STShDT0NPQSkKKyAgICByZXR1cm4gUmVzb3VyY2VSZXF1ZXN0OjpodHRwUGlwZWxpbmlu
Z0VuYWJsZWQoKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQg
V2ViQ29udGV4dDo6Z2V0U3RhdGlzdGljcyh1aW50MzJfdCBzdGF0aXN0aWNzTWFzaywgc3RkOjpm
dW5jdGlvbjx2b2lkIChJbW11dGFibGVEaWN0aW9uYXJ5KiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+
IGNhbGxiYWNrRnVuY3Rpb24pCit7CisgICAgaWYgKCFzdGF0aXN0aWNzTWFzaykgeworICAgICAg
ICBjYWxsYmFja0Z1bmN0aW9uKG51bGxwdHIsIENhbGxiYWNrQmFzZTo6RXJyb3I6OlVua25vd24p
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPFN0YXRpc3RpY3NSZXF1ZXN0
PiByZXF1ZXN0ID0gU3RhdGlzdGljc1JlcXVlc3Q6OmNyZWF0ZShEaWN0aW9uYXJ5Q2FsbGJhY2s6
OmNyZWF0ZShXVEY6Om1vdmUoY2FsbGJhY2tGdW5jdGlvbikpKTsKKworICAgIGlmIChzdGF0aXN0
aWNzTWFzayAmIFN0YXRpc3RpY3NSZXF1ZXN0VHlwZVdlYkNvbnRlbnQpCisgICAgICAgIHJlcXVl
c3RXZWJDb250ZW50U3RhdGlzdGljcyhyZXF1ZXN0LmdldCgpKTsKKyAgICAKKyAgICBpZiAoc3Rh
dGlzdGljc01hc2sgJiBTdGF0aXN0aWNzUmVxdWVzdFR5cGVOZXR3b3JraW5nKQorICAgICAgICBy
ZXF1ZXN0TmV0d29ya2luZ1N0YXRpc3RpY3MocmVxdWVzdC5nZXQoKSk7Cit9CisKK3ZvaWQgV2Vi
Q29udGV4dDo6cmVxdWVzdFdlYkNvbnRlbnRTdGF0aXN0aWNzKFN0YXRpc3RpY3NSZXF1ZXN0KiBy
ZXF1ZXN0KQoreworICAgIGlmIChtX3Byb2Nlc3NNb2RlbCA9PSBQcm9jZXNzTW9kZWxTaGFyZWRT
ZWNvbmRhcnlQcm9jZXNzKSB7CisgICAgICAgIGlmIChtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICB1aW50NjRfdCByZXF1ZXN0SUQg
PSByZXF1ZXN0LT5hZGRPdXRzdGFuZGluZ1JlcXVlc3QoKTsKKyAgICAgICAgbV9zdGF0aXN0aWNz
UmVxdWVzdHMuc2V0KHJlcXVlc3RJRCwgcmVxdWVzdCk7CisgICAgICAgIG1fcHJvY2Vzc2VzWzBd
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpHZXRXZWJDb3JlU3RhdGlzdGljcyhyZXF1ZXN0
SUQpLCAwKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZJWE1FIChNdWx0aS1XZWJQcm9j
ZXNzKSA8cmRhcjovL3Byb2JsZW0vMTMyMDAwNTk+OiBNYWtlIGdldHRpbmcgc3RhdGlzdGljcyBm
cm9tIG11bHRpcGxlIFdlYlByb2Nlc3NlcyB3b3JrLgorICAgIH0KK30KKwordm9pZCBXZWJDb250
ZXh0OjpyZXF1ZXN0TmV0d29ya2luZ1N0YXRpc3RpY3MoU3RhdGlzdGljc1JlcXVlc3QqIHJlcXVl
c3QpCit7CisgICAgYm9vbCBuZXR3b3JrUHJvY2Vzc1VuYXZhaWxhYmxlOworI2lmIEVOQUJMRShO
RVRXT1JLX1BST0NFU1MpCisgICAgbmV0d29ya1Byb2Nlc3NVbmF2YWlsYWJsZSA9ICFtX3VzZXNO
ZXR3b3JrUHJvY2VzcyB8fCAhbV9uZXR3b3JrUHJvY2VzczsKKyNlbHNlCisgICAgbmV0d29ya1By
b2Nlc3NVbmF2YWlsYWJsZSA9IHRydWU7CisjZW5kaWYKKworICAgIGlmIChuZXR3b3JrUHJvY2Vz
c1VuYXZhaWxhYmxlKSB7CisgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBnZXQgTmV0d29y
a1Byb2Nlc3Mgc3RhdGlzdGljcyBidXQgdGhlIE5ldHdvcmtQcm9jZXNzIGlzIHVuYXZhaWxhYmxl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNT
KQorICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVlc3QtPmFkZE91dHN0YW5kaW5nUmVxdWVz
dCgpOworICAgIG1fc3RhdGlzdGljc1JlcXVlc3RzLnNldChyZXF1ZXN0SUQsIHJlcXVlc3QpOwor
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpHZXRO
ZXR3b3JrUHJvY2Vzc1N0YXRpc3RpY3MocmVxdWVzdElEKSwgMCk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShyZXF1ZXN0KTsKKyNlbmRpZgorfQorCisjaWYgIVBMQVRGT1JNKENPQ09BKQordm9p
ZCBXZWJDb250ZXh0OjpkdW1teShib29sJikKK3sKK30KKyNlbmRpZgorCit2b2lkIFdlYkNvbnRl
eHQ6OmRpZEdldFN0YXRpc3RpY3MoY29uc3QgU3RhdGlzdGljc0RhdGEmIHN0YXRpc3RpY3NEYXRh
LCB1aW50NjRfdCByZXF1ZXN0SUQpCit7CisgICAgUmVmUHRyPFN0YXRpc3RpY3NSZXF1ZXN0PiBy
ZXF1ZXN0ID0gbV9zdGF0aXN0aWNzUmVxdWVzdHMudGFrZShyZXF1ZXN0SUQpOworICAgIGlmICgh
cmVxdWVzdCkgeworICAgICAgICBMT0dfRVJST1IoIkNhbm5vdCByZXBvcnQgbmV0d29ya2luZyBz
dGF0aXN0aWNzLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmVxdWVzdC0+Y29t
cGxldGVkUmVxdWVzdChyZXF1ZXN0SUQsIHN0YXRpc3RpY3NEYXRhKTsKK30KKwordm9pZCBXZWJD
b250ZXh0OjpnYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzKCkKK3sKKyAgICBzZW5kVG9B
bGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlw
dE9iamVjdHMoKSk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6c2V0SmF2YVNjcmlwdEdhcmJhZ2VD
b2xsZWN0b3JUaW1lckVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1l
ckVuYWJsZWQoZmxhZykpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OmFkZFBsdWdJbkF1dG9TdGFy
dE9yaWdpbkhhc2goY29uc3QgU3RyaW5nJiBwYWdlT3JpZ2luLCB1bnNpZ25lZCBwbHVnSW5Pcmln
aW5IYXNoLCBTZXNzaW9uSUQgc2Vzc2lvbklEKQoreworICAgIG1fcGx1Z0luQXV0b1N0YXJ0UHJv
dmlkZXIuYWRkQXV0b1N0YXJ0T3JpZ2luSGFzaChwYWdlT3JpZ2luLCBwbHVnSW5PcmlnaW5IYXNo
LCBzZXNzaW9uSUQpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OnBsdWdJbkRpZFJlY2VpdmVVc2Vy
SW50ZXJhY3Rpb24odW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCwgU2Vzc2lvbklEIHNlc3Npb25J
RCkKK3sKKyAgICBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmRpZFJlY2VpdmVVc2VySW50ZXJh
Y3Rpb24ocGx1Z0luT3JpZ2luSGFzaCwgc2Vzc2lvbklEKTsKK30KKworUGFzc1JlZlB0cjxJbW11
dGFibGVEaWN0aW9uYXJ5PiBXZWJDb250ZXh0OjpwbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMo
KSBjb25zdAoreworICAgIHJldHVybiBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmF1dG9TdGFy
dE9yaWdpbnNUYWJsZUNvcHkoKTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpzZXRQbHVnSW5BdXRv
U3RhcnRPcmlnaW5IYXNoZXMoSW1tdXRhYmxlRGljdGlvbmFyeSYgZGljdGlvbmFyeSkKK3sKKyAg
ICBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLnNldEF1dG9TdGFydE9yaWdpbnNUYWJsZShkaWN0
aW9uYXJ5KTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpzZXRQbHVnSW5BdXRvU3RhcnRPcmlnaW5z
KEFQSTo6QXJyYXkmIGFycmF5KQoreworICAgIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuc2V0
QXV0b1N0YXJ0T3JpZ2luc0FycmF5KGFycmF5KTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpzZXRQ
bHVnSW5BdXRvU3RhcnRPcmlnaW5zRmlsdGVyaW5nT3V0RW50cmllc0FkZGVkQWZ0ZXJUaW1lKElt
bXV0YWJsZURpY3Rpb25hcnkmIGRpY3Rpb25hcnksIGRvdWJsZSB0aW1lKQoreworICAgIG1fcGx1
Z0luQXV0b1N0YXJ0UHJvdmlkZXIuc2V0QXV0b1N0YXJ0T3JpZ2luc0ZpbHRlcmluZ091dEVudHJp
ZXNBZGRlZEFmdGVyVGltZShkaWN0aW9uYXJ5LCB0aW1lKTsKK30KKwordm9pZCBXZWJDb250ZXh0
OjpyZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYgc2NoZW1lKQor
eworICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpDdXN0b21Qcm90b2NvbE1h
bmFnZXI6OlJlZ2lzdGVyU2NoZW1lKHNjaGVtZSkpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OnVu
cmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmIHNjaGVtZSkKK3sK
KyAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyOjpVbnJlZ2lzdGVyU2NoZW1lKHNjaGVtZSkpOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCit2b2lkIFdlYkNvbnRleHQ6OnBsdWdpbkluZm9TdG9yZURpZExvYWRQbHVn
aW5zKFBsdWdpbkluZm9TdG9yZSogc3RvcmUpCit7CisjaWZkZWYgTkRFQlVHCisgICAgVU5VU0VE
X1BBUkFNKHN0b3JlKTsKKyNlbmRpZgorICAgIEFTU0VSVChzdG9yZSA9PSAmbV9wbHVnaW5JbmZv
U3RvcmUpOworCisgICAgVmVjdG9yPFBsdWdpbk1vZHVsZUluZm8+IHBsdWdpbk1vZHVsZXMgPSBt
X3BsdWdpbkluZm9TdG9yZS5wbHVnaW5zKCk7CisKKyAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2Jq
ZWN0Pj4gcGx1Z2luczsKKyAgICBwbHVnaW5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGx1Z2lu
TW9kdWxlcy5zaXplKCkpOworCisgICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW5Nb2R1bGUgOiBw
bHVnaW5Nb2R1bGVzKSB7CisgICAgICAgIEltbXV0YWJsZURpY3Rpb25hcnk6Ok1hcFR5cGUgbWFw
OworICAgICAgICBtYXAuc2V0KEFTQ0lJTGl0ZXJhbCgicGF0aCIpLCBBUEk6OlN0cmluZzo6Y3Jl
YXRlKHBsdWdpbk1vZHVsZS5wYXRoKSk7CisgICAgICAgIG1hcC5zZXQoQVNDSUlMaXRlcmFsKCJu
YW1lIiksIEFQSTo6U3RyaW5nOjpjcmVhdGUocGx1Z2luTW9kdWxlLmluZm8ubmFtZSkpOworICAg
ICAgICBtYXAuc2V0KEFTQ0lJTGl0ZXJhbCgiZmlsZSIpLCBBUEk6OlN0cmluZzo6Y3JlYXRlKHBs
dWdpbk1vZHVsZS5pbmZvLmZpbGUpKTsKKyAgICAgICAgbWFwLnNldChBU0NJSUxpdGVyYWwoImRl
c2MiKSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVnaW5Nb2R1bGUuaW5mby5kZXNjKSk7CisKKyAg
ICAgICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IG1pbWVUeXBlczsKKyAgICAgICAgbWlt
ZVR5cGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGx1Z2luTW9kdWxlLmluZm8ubWltZXMuc2l6
ZSgpKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBtaW1lQ2xhc3NJbmZvIDogcGx1Z2luTW9k
dWxlLmluZm8ubWltZXMpCisgICAgICAgICAgICBtaW1lVHlwZXMudW5jaGVja2VkQXBwZW5kKEFQ
STo6U3RyaW5nOjpjcmVhdGUobWltZUNsYXNzSW5mby50eXBlKSk7CisgICAgICAgIG1hcC5zZXQo
QVNDSUlMaXRlcmFsKCJtaW1lcyIpLCBBUEk6OkFycmF5OjpjcmVhdGUoV1RGOjptb3ZlKG1pbWVU
eXBlcykpKTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICBtYXAuc2V0KEFTQ0lJTGl0
ZXJhbCgiYnVuZGxlSWQiKSwgQVBJOjpTdHJpbmc6OmNyZWF0ZShwbHVnaW5Nb2R1bGUuYnVuZGxl
SWRlbnRpZmllcikpOworICAgICAgICBtYXAuc2V0KEFTQ0lJTGl0ZXJhbCgidmVyc2lvbiIpLCBB
UEk6OlN0cmluZzo6Y3JlYXRlKHBsdWdpbk1vZHVsZS52ZXJzaW9uU3RyaW5nKSk7CisjZW5kaWYK
KworICAgICAgICBwbHVnaW5zLnVuY2hlY2tlZEFwcGVuZChJbW11dGFibGVEaWN0aW9uYXJ5Ojpj
cmVhdGUoV1RGOjptb3ZlKG1hcCkpKTsKKyAgICB9CisKKyAgICBtX2NsaWVudC5wbHVnSW5JbmZv
cm1hdGlvbkJlY2FtZUF2YWlsYWJsZSh0aGlzLCBBUEk6OkFycmF5OjpjcmVhdGUoV1RGOjptb3Zl
KHBsdWdpbnMpKS5nZXQoKSk7Cit9CisjZW5kaWYKKyAgICAKK3ZvaWQgV2ViQ29udGV4dDo6c2V0
TWVtb3J5Q2FjaGVEaXNhYmxlZChib29sIGRpc2FibGVkKQoreworICAgIG1fbWVtb3J5Q2FjaGVE
aXNhYmxlZCA9IGRpc2FibGVkOworICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2Vi
UHJvY2Vzczo6U2V0TWVtb3J5Q2FjaGVEaXNhYmxlZChkaXNhYmxlZCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAi
V2ViUHJvY2Vzc1Bvb2wuaCIKIAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiQVBJ
RG93bmxvYWRDbGllbnQuaCIKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlICJXS0NvbnRleHRQ
cml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXJQcm94eS5oIgog
I2luY2x1ZGUgIldlYkNvbnRleHRNZXNzYWdlS2luZHMuaCIKLSNpbmNsdWRlICJXZWJDb250ZXh0
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0U3VwcGxlbWVudC5oIgogI2luY2x1ZGUg
IldlYkNvbnRleHRVc2VyTWVzc2FnZUNvZGVycy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFn
ZXJQcm94eS5oIgpAQCAtNTEsMTMgKzUwLDE0IEBACiAjaW5jbHVkZSAiV2ViS2V5VmFsdWVTdG9y
YWdlTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYktpdDJJbml0aWFsaXplLmgiCiAjaW5jbHVkZSAi
V2ViTWVkaWFDYWNoZU1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUgIldlYk1lbW9yeVNhbXBsZXIu
aCIKICNpbmNsdWRlICJXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJX
ZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNp
bmNsdWRlICJXZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJQcmVmZXJl
bmNlcy5oIgotI2luY2x1ZGUgIldlYk1lbW9yeVNhbXBsZXIuaCIKICNpbmNsdWRlICJXZWJQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgi
CisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nl
c3NQcm94eS5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkuaCIKICNp
bmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCkBAIC0xMDYsMTcgKzEwNiwxOCBAQAogI2VuZGlm
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBjb25zdCBkb3VibGUgc2hhcmVkU2Vjb25kYXJ5
UHJvY2Vzc1NodXRkb3duVGltZW91dCA9IDYwOwogCi1ERUZJTkVfREVCVUdfT05MWV9HTE9CQUwo
V1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIsIHdlYkNvbnRleHRDb3VudGVyLCAoIldlYkNvbnRl
eHQiKSk7CitERUZJTkVfREVCVUdfT05MWV9HTE9CQUwoV1RGOjpSZWZDb3VudGVkTGVha0NvdW50
ZXIsIHByb2Nlc3NQb29sQ291bnRlciwgKCJXZWJQcm9jZXNzUG9vbCIpKTsKIAotdm9pZCBXZWJD
b250ZXh0OjphcHBseVBsYXRmb3JtU3BlY2lmaWNDb25maWd1cmF0aW9uRGVmYXVsdHMoV2ViQ29u
dGV4dENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCit2b2lkIFdlYlByb2Nlc3NQb29sOjph
cHBseVBsYXRmb3JtU3BlY2lmaWNDb25maWd1cmF0aW9uRGVmYXVsdHMoV2ViUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0
aW9uIHNob3VsZCBub3QgYmUgbmVlZGVkOyBhbGwgcG9ydHMgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0
IHRoZSBjb25maWd1cmF0aW9uIGhhcyB0aGUgcmlnaHQKLSAgICAvLyB2YWx1ZXMsIGFuZCB0aGVu
IHdlIHNob3VsZCBnZXQgcmlkIG9mIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZhdWx0cyBpbnNp
ZGUgV2ViQ29udGV4dC4KKyAgICAvLyB2YWx1ZXMsIGFuZCB0aGVuIHdlIHNob3VsZCBnZXQgcmlk
IG9mIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZWZhdWx0cyBpbnNpZGUgV2ViUHJvY2Vzc1Bvb2wu
CiAKICAgICBpZiAoIWNvbmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlRGlyZWN0b3J5KQogICAgICAg
ICBjb25maWd1cmF0aW9uLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IHBsYXRmb3JtRGVmYXVsdExv
Y2FsU3RvcmFnZURpcmVjdG9yeSgpOwpAQCAtMTM0LDIxICsxMzUsMjEgQEAgdm9pZCBXZWJDb250
ZXh0OjphcHBseVBsYXRmb3JtU3BlY2lmaWNDbwogICAgICAgICBjb25maWd1cmF0aW9uLm1lZGlh
S2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSBwbGF0Zm9ybURlZmF1bHRNZWRpYUtleXNTdG9yYWdlRGly
ZWN0b3J5KCk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViQ29udGV4dD4gV2ViQ29udGV4dDo6Y3JlYXRl
KFdlYkNvbnRleHRDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCitQYXNzUmVmUHRyPFdlYlBy
b2Nlc3NQb29sPiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKFdlYlByb2Nlc3NQb29sQ29uZmlndXJh
dGlvbiBjb25maWd1cmF0aW9uKQogewogICAgIEluaXRpYWxpemVXZWJLaXQyKCk7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBXZWJDb250ZXh0KFdURjo6bW92ZShjb25maWd1cmF0aW9uKSkpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViUHJvY2Vzc1Bvb2woV1RGOjptb3ZlKGNvbmZpZ3Vy
YXRpb24pKSk7CiB9CiAKLXN0YXRpYyBWZWN0b3I8V2ViQ29udGV4dCo+JiBjb250ZXh0cygpCitz
dGF0aWMgVmVjdG9yPFdlYlByb2Nlc3NQb29sKj4mIHByb2Nlc3NQb29scygpCiB7Ci0gICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxXZWJDb250ZXh0Kj4+IGNvbnRleHRzOwotICAgIHJl
dHVybiBjb250ZXh0czsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPFdlYlByb2Nl
c3NQb29sKj4+IHByb2Nlc3NQb29sczsKKyAgICByZXR1cm4gcHJvY2Vzc1Bvb2xzOwogfQogCi1j
b25zdCBWZWN0b3I8V2ViQ29udGV4dCo+JiBXZWJDb250ZXh0OjphbGxDb250ZXh0cygpCitjb25z
dCBWZWN0b3I8V2ViUHJvY2Vzc1Bvb2wqPiYgV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29s
cygpCiB7Ci0gICAgcmV0dXJuIGNvbnRleHRzKCk7CisgICAgcmV0dXJuIHByb2Nlc3NQb29scygp
OwogfQogCiBzdGF0aWMgV2Vic2l0ZURhdGFTdG9yZTo6Q29uZmlndXJhdGlvbiB3ZWJzaXRlRGF0
YVN0b3JlQ29uZmlndXJhdGlvbigpCkBAIC0xNTksNyArMTYwLDcgQEAgc3RhdGljIFdlYnNpdGVE
YXRhU3RvcmU6OkNvbmZpZ3VyYXRpb24gdwogICAgIHJldHVybiBjb25maWd1cmF0aW9uOwogfQog
Ci1XZWJDb250ZXh0OjpXZWJDb250ZXh0KFdlYkNvbnRleHRDb25maWd1cmF0aW9uIGNvbmZpZ3Vy
YXRpb24pCitXZWJQcm9jZXNzUG9vbDo6V2ViUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCiAgICAgOiBtX3Byb2Nlc3NNb2RlbChQcm9jZXNzTW9k
ZWxTaGFyZWRTZWNvbmRhcnlQcm9jZXNzKQogICAgICwgbV93ZWJQcm9jZXNzQ291bnRMaW1pdChV
SU5UX01BWCkKICAgICAsIG1faGF2ZUluaXRpYWxFbXB0eVByb2Nlc3MoZmFsc2UpCkBAIC0xOTks
NyArMjAwLDcgQEAgV2ViQ29udGV4dDo6V2ViQ29udGV4dChXZWJDb250ZXh0Q29uZmlndQogewog
ICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwogCi0gICAgYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpXZWJDb250ZXh0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKKyAgICBhZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksICp0aGlzKTsKICAgICBhZGRNZXNzYWdlUmVjZWl2ZXIoV2ViQ29udGV4dExlZ2FjeU1l
c3NhZ2VzOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIAogICAgIC8vIE5PVEU6IFRo
ZXNlIHN1Yi1vYmplY3RzIG11c3QgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVjZWl2
ZXJNYXAuLgpAQCAtMjI4LDcgKzIyOSw3IEBAIFdlYkNvbnRleHQ6OldlYkNvbnRleHQoV2ViQ29u
dGV4dENvbmZpZ3UKICAgICBhZGRTdXBwbGVtZW50PFdlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk+
KCk7CiAjZW5kaWYKIAotICAgIGNvbnRleHRzKCkuYXBwZW5kKHRoaXMpOworICAgIHByb2Nlc3NQ
b29scygpLmFwcGVuZCh0aGlzKTsKIAogICAgIGFkZExhbmd1YWdlQ2hhbmdlT2JzZXJ2ZXIodGhp
cywgbGFuZ3VhZ2VDaGFuZ2VkKTsKIApAQCAtMjQyLDIwICsyNDMsMjAgQEAgV2ViQ29udGV4dDo6
V2ViQ29udGV4dChXZWJDb250ZXh0Q29uZmlndQogI2VuZGlmCiAKICNpZm5kZWYgTkRFQlVHCi0g
ICAgd2ViQ29udGV4dENvdW50ZXIuaW5jcmVtZW50KCk7CisgICAgcHJvY2Vzc1Bvb2xDb3VudGVy
LmluY3JlbWVudCgpOwogI2VuZGlmCiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCi12b2lkIFdl
YkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0
Zm9ybUluaXRpYWxpemUoKQogewogfQogI2VuZGlmCiAKLVdlYkNvbnRleHQ6On5XZWJDb250ZXh0
KCkKK1dlYlByb2Nlc3NQb29sOjp+V2ViUHJvY2Vzc1Bvb2woKQogewotICAgIEFTU0VSVChjb250
ZXh0cygpLmZpbmQodGhpcykgIT0gbm90Rm91bmQpOwotICAgIGNvbnRleHRzKCkucmVtb3ZlKGNv
bnRleHRzKCkuZmluZCh0aGlzKSk7CisgICAgQVNTRVJUKHByb2Nlc3NQb29scygpLmZpbmQodGhp
cykgIT0gbm90Rm91bmQpOworICAgIHByb2Nlc3NQb29scygpLnJlbW92ZShwcm9jZXNzUG9vbHMo
KS5maW5kKHRoaXMpKTsKIAogICAgIHJlbW92ZUxhbmd1YWdlQ2hhbmdlT2JzZXJ2ZXIodGhpcyk7
CiAKQEAgLTI2NCwxOCArMjY1LDE4IEBAIFdlYkNvbnRleHQ6On5XZWJDb250ZXh0KCkKICAgICBX
ZWJDb250ZXh0U3VwcGxlbWVudE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N1cHBsZW1lbnRz
LmJlZ2luKCk7CiAgICAgV2ViQ29udGV4dFN1cHBsZW1lbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1fc3VwcGxlbWVudHMuZW5kKCk7CiAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBpdC0+dmFsdWUtPmNvbnRleHREZXN0cm95ZWQoKTsKLSAgICAgICAgaXQtPnZhbHVl
LT5jbGVhckNvbnRleHQoKTsKKyAgICAgICAgaXQtPnZhbHVlLT5wcm9jZXNzUG9vbERlc3Ryb3ll
ZCgpOworICAgICAgICBpdC0+dmFsdWUtPmNsZWFyUHJvY2Vzc1Bvb2woKTsKICAgICB9CiAKICAg
ICBtX2ljb25EYXRhYmFzZS0+aW52YWxpZGF0ZSgpOwotICAgIG1faWNvbkRhdGFiYXNlLT5jbGVh
ckNvbnRleHQoKTsKKyAgICBtX2ljb25EYXRhYmFzZS0+Y2xlYXJQcm9jZXNzUG9vbCgpOwogICAg
IFdlYkljb25EYXRhYmFzZSogcmF3SWNvbkRhdGFiYXNlID0gbV9pY29uRGF0YWJhc2UucmVsZWFz
ZSgpLmxlYWtSZWYoKTsKICAgICByYXdJY29uRGF0YWJhc2UtPmRlcmVmV2hlbkFwcHJvcHJpYXRl
KCk7CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBtX3BsdWdpblNpdGVE
YXRhTWFuYWdlci0+aW52YWxpZGF0ZSgpOwotICAgIG1fcGx1Z2luU2l0ZURhdGFNYW5hZ2VyLT5j
bGVhckNvbnRleHQoKTsKKyAgICBtX3BsdWdpblNpdGVEYXRhTWFuYWdlci0+Y2xlYXJQcm9jZXNz
UG9vbCgpOwogI2VuZGlmCiAKICAgICBpbnZhbGlkYXRlQ2FsbGJhY2tNYXAobV9kaWN0aW9uYXJ5
Q2FsbGJhY2tzLCBDYWxsYmFja0Jhc2U6OkVycm9yOjpPd25lcldhc0ludmFsaWRhdGVkKTsKQEAg
LTI4NywyNiArMjg4LDI2IEBAIFdlYkNvbnRleHQ6On5XZWJDb250ZXh0KCkKICNlbmRpZgogCiAj
aWZuZGVmIE5ERUJVRwotICAgIHdlYkNvbnRleHRDb3VudGVyLmRlY3JlbWVudCgpOworICAgIHBy
b2Nlc3NQb29sQ291bnRlci5kZWNyZW1lbnQoKTsKICNlbmRpZgogfQogCi12b2lkIFdlYkNvbnRl
eHQ6OmluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb250ZXh0Q2xpZW50QmFzZSogY2xpZW50KQor
dm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0NvbnRleHRDbGll
bnRCYXNlKiBjbGllbnQpCiB7CiAgICAgbV9jbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwogfQog
Ci12b2lkIFdlYkNvbnRleHQ6OmluaXRpYWxpemVJbmplY3RlZEJ1bmRsZUNsaWVudChjb25zdCBX
S0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudEJhc2UqIGNsaWVudCkKK3ZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmluaXRpYWxpemVJbmplY3RlZEJ1bmRsZUNsaWVudChjb25zdCBXS0NvbnRleHRJbmpl
Y3RlZEJ1bmRsZUNsaWVudEJhc2UqIGNsaWVudCkKIHsKICAgICBtX2luamVjdGVkQnVuZGxlQ2xp
ZW50LmluaXRpYWxpemUoY2xpZW50KTsKIH0KIAotdm9pZCBXZWJDb250ZXh0Ojppbml0aWFsaXpl
Q29ubmVjdGlvbkNsaWVudChjb25zdCBXS0NvbnRleHRDb25uZWN0aW9uQ2xpZW50QmFzZSogY2xp
ZW50KQordm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlhbGl6ZUNvbm5lY3Rpb25DbGllbnQoY29u
c3QgV0tDb250ZXh0Q29ubmVjdGlvbkNsaWVudEJhc2UqIGNsaWVudCkKIHsKICAgICBtX2Nvbm5l
Y3Rpb25DbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OnNl
dEhpc3RvcnlDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlD
bGllbnQ+IGhpc3RvcnlDbGllbnQpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRIaXN0b3J5Q2xp
ZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiBoaXN0
b3J5Q2xpZW50KQogewogICAgIGlmICghaGlzdG9yeUNsaWVudCkKICAgICAgICAgbV9oaXN0b3J5
Q2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50
PigpOwpAQCAtMzE0LDcgKzMxNSw3IEBAIHZvaWQgV2ViQ29udGV4dDo6c2V0SGlzdG9yeUNsaWVu
dChzdGQ6OnUKICAgICAgICAgbV9oaXN0b3J5Q2xpZW50ID0gV1RGOjptb3ZlKGhpc3RvcnlDbGll
bnQpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OnNldERvd25sb2FkQ2xpZW50KHN0ZDo6dW5pcXVl
X3B0cjxBUEk6OkRvd25sb2FkQ2xpZW50PiBkb3dubG9hZENsaWVudCkKK3ZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnNldERvd25sb2FkQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkRvd25sb2FkQ2xp
ZW50PiBkb3dubG9hZENsaWVudCkKIHsKICAgICBpZiAoIWRvd25sb2FkQ2xpZW50KQogICAgICAg
ICBtX2Rvd25sb2FkQ2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBUEk6OkRvd25sb2FkQ2xpZW50
PigpOwpAQCAtMzIyLDcgKzMyMyw3IEBAIHZvaWQgV2ViQ29udGV4dDo6c2V0RG93bmxvYWRDbGll
bnQoc3RkOjoKICAgICAgICAgbV9kb3dubG9hZENsaWVudCA9IFdURjo6bW92ZShkb3dubG9hZENs
aWVudCk7CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6c2V0UHJvY2Vzc01vZGVsKFByb2Nlc3NNb2Rl
bCBwcm9jZXNzTW9kZWwpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRQcm9jZXNzTW9kZWwoUHJv
Y2Vzc01vZGVsIHByb2Nlc3NNb2RlbCkKIHsKICAgICAvLyBHdWFyZCBhZ2FpbnN0IEFQSSBtaXN1
c2UuCiAgICAgaWYgKCFtX3Byb2Nlc3Nlcy5pc0VtcHR5KCkpCkBAIC0zMzMsNyArMzM0LDcgQEAg
dm9pZCBXZWJDb250ZXh0OjpzZXRQcm9jZXNzTW9kZWwoUHJvY2VzcwogICAgIG1fcHJvY2Vzc01v
ZGVsID0gcHJvY2Vzc01vZGVsOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OnNldE1heGltdW1OdW1i
ZXJPZlByb2Nlc3Nlcyh1bnNpZ25lZCBtYXhpbXVtTnVtYmVyT2ZQcm9jZXNzZXMpCit2b2lkIFdl
YlByb2Nlc3NQb29sOjpzZXRNYXhpbXVtTnVtYmVyT2ZQcm9jZXNzZXModW5zaWduZWQgbWF4aW11
bU51bWJlck9mUHJvY2Vzc2VzKQogewogICAgIC8vIEd1YXJkIGFnYWluc3QgQVBJIG1pc3VzZS4K
ICAgICBpZiAoIW1fcHJvY2Vzc2VzLmlzRW1wdHkoKSkKQEAgLTM0NSw3ICszNDYsNyBAQCB2b2lk
IFdlYkNvbnRleHQ6OnNldE1heGltdW1OdW1iZXJPZlByb2NlCiAgICAgICAgIG1fd2ViUHJvY2Vz
c0NvdW50TGltaXQgPSBtYXhpbXVtTnVtYmVyT2ZQcm9jZXNzZXM7CiB9CiAKLUlQQzo6Q29ubmVj
dGlvbiogV2ViQ29udGV4dDo6bmV0d29ya2luZ1Byb2Nlc3NDb25uZWN0aW9uKCkKK0lQQzo6Q29u
bmVjdGlvbiogV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtpbmdQcm9jZXNzQ29ubmVjdGlvbigpCiB7
CiAgICAgc3dpdGNoIChtX3Byb2Nlc3NNb2RlbCkgewogICAgIGNhc2UgUHJvY2Vzc01vZGVsU2hh
cmVkU2Vjb25kYXJ5UHJvY2VzczoKQEAgLTM2NiwxMiArMzY3LDEyIEBAIElQQzo6Q29ubmVjdGlv
biogV2ViQ29udGV4dDo6bmV0d29ya2luZ1AKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBXZWJD
b250ZXh0OjpsYW5ndWFnZUNoYW5nZWQodm9pZCogY29udGV4dCkKK3ZvaWQgV2ViUHJvY2Vzc1Bv
b2w6Omxhbmd1YWdlQ2hhbmdlZCh2b2lkKiBjb250ZXh0KQogewotICAgIHN0YXRpY19jYXN0PFdl
YkNvbnRleHQqPihjb250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CisgICAgc3RhdGljX2Nhc3Q8
V2ViUHJvY2Vzc1Bvb2wqPihjb250ZXh0KS0+bGFuZ3VhZ2VDaGFuZ2VkKCk7CiB9CiAKLXZvaWQg
V2ViQ29udGV4dDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omxhbmd1
YWdlQ2hhbmdlZCgpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
KCkpKTsKICNpZiBVU0UoU09VUCkgJiYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKQEAgLTM4MCwx
NyArMzgxLDE3IEBAIHZvaWQgV2ViQ29udGV4dDo6bGFuZ3VhZ2VDaGFuZ2VkKCkKICNlbmRpZgog
fQogCi12b2lkIFdlYkNvbnRleHQ6OmZ1bGxLZXlib2FyZEFjY2Vzc01vZGVDaGFuZ2VkKGJvb2wg
ZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlZCkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmZ1bGxLZXli
b2FyZEFjY2Vzc01vZGVDaGFuZ2VkKGJvb2wgZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlZCkKIHsK
ICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkZ1bGxLZXlib2Fy
ZEFjY2Vzc01vZGVDaGFuZ2VkKGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQpKTsKIH0KIAotdm9p
ZCBXZWJDb250ZXh0Ojp0ZXh0Q2hlY2tlclN0YXRlQ2hhbmdlZCgpCit2b2lkIFdlYlByb2Nlc3NQ
b29sOjp0ZXh0Q2hlY2tlclN0YXRlQ2hhbmdlZCgpCiB7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRUZXh0Q2hlY2tlclN0YXRlKFRleHRDaGVja2VyOjpz
dGF0ZSgpKSk7CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6c2V0VXNlc05ldHdvcmtQcm9jZXNzKGJv
b2wgdXNlc05ldHdvcmtQcm9jZXNzKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0VXNlc05ldHdv
cmtQcm9jZXNzKGJvb2wgdXNlc05ldHdvcmtQcm9jZXNzKQogewogI2lmIEVOQUJMRShORVRXT1JL
X1BST0NFU1MpCiAgICAgbV91c2VzTmV0d29ya1Byb2Nlc3MgPSB1c2VzTmV0d29ya1Byb2Nlc3M7
CkBAIC0zOTksNyArNDAwLDcgQEAgdm9pZCBXZWJDb250ZXh0OjpzZXRVc2VzTmV0d29ya1Byb2Nl
c3MoYgogI2VuZGlmCiB9CiAKLWJvb2wgV2ViQ29udGV4dDo6dXNlc05ldHdvcmtQcm9jZXNzKCkg
Y29uc3QKK2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6OnVzZXNOZXR3b3JrUHJvY2VzcygpIGNvbnN0CiB7
CiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKICAgICByZXR1cm4gbV91c2VzTmV0d29ya1By
b2Nlc3M7CkBAIC00MDksNyArNDEwLDcgQEAgYm9vbCBXZWJDb250ZXh0Ojp1c2VzTmV0d29ya1By
b2Nlc3MoKSBjbwogfQogCiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLXZvaWQgV2ViQ29u
dGV4dDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6ZW5zdXJl
TmV0d29ya1Byb2Nlc3MoKQogewogICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQogICAgICAgICBy
ZXR1cm47CkBAIC00NTUsNyArNDU2LDcgQEAgdm9pZCBXZWJDb250ZXh0OjplbnN1cmVOZXR3b3Jr
UHJvY2VzcygpCiAjZW5kaWYKIH0KIAotdm9pZCBXZWJDb250ZXh0OjpuZXR3b3JrUHJvY2Vzc0Ny
YXNoZWQoTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3NQcm94eSkKK3ZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5KiBu
ZXR3b3JrUHJvY2Vzc1Byb3h5KQogewogICAgIEFTU0VSVChtX25ldHdvcmtQcm9jZXNzKTsKICAg
ICBBU1NFUlQobmV0d29ya1Byb2Nlc3NQcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsK
QEAgLTQ3MCw3ICs0NzEsNyBAQCB2b2lkIFdlYkNvbnRleHQ6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hl
ZChOCiAgICAgbV9jbGllbnQubmV0d29ya1Byb2Nlc3NEaWRDcmFzaCh0aGlzKTsKIH0KIAotdm9p
ZCBXZWJDb250ZXh0OjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oUGFzc1JlZlB0cjxNZXNz
YWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5
ZWRSZXBseT4gcmVwbHkpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24oUGFzc1JlZlB0cjxNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseT4gcmVwbHkpCiB7CiAgICAgQVNTRVJUKHJl
cGx5KTsKIApAQCAtNDgyLDcgKzQ4Myw3IEBAIHZvaWQgV2ViQ29udGV4dDo6Z2V0TmV0d29ya1By
b2Nlc3NDb25uZWMKICNlbmRpZgogCiAjaWYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCi12b2lk
IFdlYkNvbnRleHQ6OmVuc3VyZURhdGFiYXNlUHJvY2VzcygpCit2b2lkIFdlYlByb2Nlc3NQb29s
OjplbnN1cmVEYXRhYmFzZVByb2Nlc3MoKQogewogICAgIGlmIChtX2RhdGFiYXNlUHJvY2VzcykK
ICAgICAgICAgcmV0dXJuOwpAQCAtNTAyLDcgKzUwMyw3IEBAIHZvaWQgV2ViQ29udGV4dDo6ZW5z
dXJlRGF0YWJhc2VQcm9jZXNzKCkKICAgICBtX2RhdGFiYXNlUHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6RGF0YWJhc2VQcm9jZXNzOjpJbml0aWFsaXplRGF0YWJhc2VQcm9jZXNzKHBhcmFtZXRlcnMp
LCAwKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0OjpnZXREYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9u
KFBhc3NSZWZQdHI8TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0RGF0YWJhc2VQcm9jZXNz
Q29ubmVjdGlvbjo6RGVsYXllZFJlcGx5PiByZXBseSkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omdl
dERhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb24oUGFzc1JlZlB0cjxNZXNzYWdlczo6V2ViUHJvY2Vz
c1Byb3h5OjpHZXREYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHk+IHJlcGx5
KQogewogICAgIEFTU0VSVChyZXBseSk7CiAKQEAgLTUxMSw3ICs1MTIsNyBAQCB2b2lkIFdlYkNv
bnRleHQ6OmdldERhdGFiYXNlUHJvY2Vzc0Nvbm5lCiAgICAgbV9kYXRhYmFzZVByb2Nlc3MtPmdl
dERhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb24ocmVwbHkpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6
OmRhdGFiYXNlUHJvY2Vzc0NyYXNoZWQoRGF0YWJhc2VQcm9jZXNzUHJveHkqIGRhdGFiYXNlUHJv
Y2Vzc1Byb3h5KQordm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGF0YWJhc2VQcm9jZXNzQ3Jhc2hlZChE
YXRhYmFzZVByb2Nlc3NQcm94eSogZGF0YWJhc2VQcm9jZXNzUHJveHkpCiB7CiAgICAgQVNTRVJU
KG1fZGF0YWJhc2VQcm9jZXNzKTsKICAgICBBU1NFUlQoZGF0YWJhc2VQcm9jZXNzUHJveHkgPT0g
bV9kYXRhYmFzZVByb2Nlc3MuZ2V0KCkpOwpAQCAtNTIzLDI4ICs1MjQsMjYgQEAgdm9pZCBXZWJD
b250ZXh0OjpkYXRhYmFzZVByb2Nlc3NDcmFzaGVkKAogfQogI2VuZGlmCiAKLXZvaWQgV2ViQ29u
dGV4dDo6d2lsbFN0YXJ0VXNpbmdQcml2YXRlQnJvd3NpbmcoKQordm9pZCBXZWJQcm9jZXNzUG9v
bDo6d2lsbFN0YXJ0VXNpbmdQcml2YXRlQnJvd3NpbmcoKQogewotICAgIGNvbnN0IFZlY3RvcjxX
ZWJDb250ZXh0Kj4mIGNvbnRleHRzID0gYWxsQ29udGV4dHMoKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMCwgY291bnQgPSBjb250ZXh0cy5zaXplKCk7IGkgPCBjb3VudDsgKytpKQotICAgICAgICBj
b250ZXh0c1tpXS0+c2V0QW55UGFnZUdyb3VwTWlnaHRIYXZlUHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZCh0cnVlKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkp
CisgICAgICAgIHByb2Nlc3NQb29sLT5zZXRBbnlQYWdlR3JvdXBNaWdodEhhdmVQcml2YXRlQnJv
d3NpbmdFbmFibGVkKHRydWUpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OndpbGxTdG9wVXNpbmdQ
cml2YXRlQnJvd3NpbmcoKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6d2lsbFN0b3BVc2luZ1ByaXZh
dGVCcm93c2luZygpCiB7Ci0gICAgY29uc3QgVmVjdG9yPFdlYkNvbnRleHQqPiYgY29udGV4dHMg
PSBhbGxDb250ZXh0cygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IGNvbnRleHRz
LnNpemUoKTsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgIGNvbnRleHRzW2ldLT5zZXRBbnlQYWdl
R3JvdXBNaWdodEhhdmVQcml2YXRlQnJvd3NpbmdFbmFibGVkKGZhbHNlKTsKKyAgICBmb3IgKGF1
dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29s
LT5zZXRBbnlQYWdlR3JvdXBNaWdodEhhdmVQcml2YXRlQnJvd3NpbmdFbmFibGVkKGZhbHNlKTsK
IH0KIAotdm9pZCBXZWJDb250ZXh0Ojp3aW5kb3dTZXJ2ZXJDb25uZWN0aW9uU3RhdGVDaGFuZ2Vk
KCkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OndpbmRvd1NlcnZlckNvbm5lY3Rpb25TdGF0ZUNoYW5n
ZWQoKQogewogICAgIHNpemVfdCBwcm9jZXNzQ291bnQgPSBtX3Byb2Nlc3Nlcy5zaXplKCk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9jZXNzQ291bnQ7ICsraSkKICAgICAgICAgbV9w
cm9jZXNzZXNbaV0tPndpbmRvd1NlcnZlckNvbm5lY3Rpb25TdGF0ZUNoYW5nZWQoKTsKIH0KIAot
dm9pZCBXZWJDb250ZXh0OjpzZXRBbnlQYWdlR3JvdXBNaWdodEhhdmVQcml2YXRlQnJvd3NpbmdF
bmFibGVkKGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnNldEFueVBhZ2VHcm91cE1pZ2h0SGF2ZVByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCBwcml2
YXRlQnJvd3NpbmdFbmFibGVkKQogewogICAgIG1faWNvbkRhdGFiYXNlLT5zZXRQcml2YXRlQnJv
d3NpbmdFbmFibGVkKHByaXZhdGVCcm93c2luZ0VuYWJsZWQpOwogCkBAIC01NjUsMTIgKzU2NCwx
MiBAQCB2b2lkIFdlYkNvbnRleHQ6OnNldEFueVBhZ2VHcm91cE1pZ2h0SGF2CiAKIHZvaWQgKCpz
X2ludmFsaWRNZXNzYWdlQ2FsbGJhY2spKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lKTsKIAotdm9p
ZCBXZWJDb250ZXh0OjpzZXRJbnZhbGlkTWVzc2FnZUNhbGxiYWNrKHZvaWQgKCppbnZhbGlkTWVz
c2FnZUNhbGxiYWNrKShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSkpCit2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXRJbnZhbGlkTWVzc2FnZUNhbGxiYWNrKHZvaWQgKCppbnZhbGlkTWVzc2FnZUNhbGxi
YWNrKShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSkpCiB7CiAgICAgc19pbnZhbGlkTWVzc2FnZUNh
bGxiYWNrID0gaW52YWxpZE1lc3NhZ2VDYWxsYmFjazsKIH0KIAotdm9pZCBXZWJDb250ZXh0Ojpk
aWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoY29uc3QgSVBDOjpTdHJpbmdSZWZlcmVuY2UmIG1lc3Nh
Z2VSZWNlaXZlck5hbWUsIGNvbnN0IElQQzo6U3RyaW5nUmVmZXJlbmNlJiBtZXNzYWdlTmFtZSkK
K3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShjb25zdCBJUEM6
OlN0cmluZ1JlZmVyZW5jZSYgbWVzc2FnZVJlY2VpdmVyTmFtZSwgY29uc3QgSVBDOjpTdHJpbmdS
ZWZlcmVuY2UmIG1lc3NhZ2VOYW1lKQogewogICAgIGlmICghc19pbnZhbGlkTWVzc2FnZUNhbGxi
YWNrKQogICAgICAgICByZXR1cm47CkBAIC01ODMsMTQgKzU4MiwxNCBAQCB2b2lkIFdlYkNvbnRl
eHQ6OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnCiAgICAgc19pbnZhbGlkTWVzc2FnZUNhbGxiYWNr
KHRvQVBJKEFQSTo6U3RyaW5nOjpjcmVhdGUobWVzc2FnZU5hbWVTdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCkpLmdldCgpKSk7CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6cHJvY2Vzc0RpZENhY2hlUGFn
ZShXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNz
RGlkQ2FjaGVQYWdlKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKIHsKICAgICBpZiAobV9wcm9j
ZXNzV2l0aFBhZ2VDYWNoZSAmJiBtX3Byb2Nlc3NXaXRoUGFnZUNhY2hlICE9IHByb2Nlc3MpCiAg
ICAgICAgIG1fcHJvY2Vzc1dpdGhQYWdlQ2FjaGUtPnJlbGVhc2VQYWdlQ2FjaGUoKTsKICAgICBt
X3Byb2Nlc3NXaXRoUGFnZUNhY2hlID0gcHJvY2VzczsKIH0KIAotV2ViUHJvY2Vzc1Byb3h5JiBX
ZWJDb250ZXh0OjplbnN1cmVTaGFyZWRXZWJQcm9jZXNzKCkKK1dlYlByb2Nlc3NQcm94eSYgV2Vi
UHJvY2Vzc1Bvb2w6OmVuc3VyZVNoYXJlZFdlYlByb2Nlc3MoKQogewogICAgIEFTU0VSVChtX3By
b2Nlc3NNb2RlbCA9PSBQcm9jZXNzTW9kZWxTaGFyZWRTZWNvbmRhcnlQcm9jZXNzKTsKICAgICBp
ZiAobV9wcm9jZXNzZXMuaXNFbXB0eSgpKQpAQCAtNTk4LDcgKzU5Nyw3IEBAIFdlYlByb2Nlc3NQ
cm94eSYgV2ViQ29udGV4dDo6ZW5zdXJlU2hhcmUKICAgICByZXR1cm4gKm1fcHJvY2Vzc2VzWzBd
OwogfQogCi1XZWJQcm9jZXNzUHJveHkmIFdlYkNvbnRleHQ6OmNyZWF0ZU5ld1dlYlByb2Nlc3Mo
KQorV2ViUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlTmV3V2ViUHJvY2Vzcygp
CiB7CiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKICAgICBpZiAobV91c2VzTmV0d29ya1By
b2Nlc3MpCkBAIC03NDIsNyArNzQxLDcgQEAgV2ViUHJvY2Vzc1Byb3h5JiBXZWJDb250ZXh0Ojpj
cmVhdGVOZXdXZQogICAgIHJldHVybiBwcm9jZXNzOwogfQogCi12b2lkIFdlYkNvbnRleHQ6Ondh
cm1Jbml0aWFsUHJvY2VzcygpICAKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6Ondhcm1Jbml0aWFsUHJv
Y2VzcygpICAKIHsKICAgICBpZiAobV9oYXZlSW5pdGlhbEVtcHR5UHJvY2VzcykgewogICAgICAg
ICBBU1NFUlQoIW1fcHJvY2Vzc2VzLmlzRW1wdHkoKSk7CkBAIC03NTYsNyArNzU1LDcgQEAgdm9p
ZCBXZWJDb250ZXh0Ojp3YXJtSW5pdGlhbFByb2Nlc3MoKSAgCiAgICAgbV9oYXZlSW5pdGlhbEVt
cHR5UHJvY2VzcyA9IHRydWU7CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6ZW5hYmxlUHJvY2Vzc1Rl
cm1pbmF0aW9uKCkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmVuYWJsZVByb2Nlc3NUZXJtaW5hdGlv
bigpCiB7CiAgICAgbV9wcm9jZXNzVGVybWluYXRpb25FbmFibGVkID0gdHJ1ZTsKICAgICBWZWN0
b3I8UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlcyA9IG1fcHJvY2Vzc2VzOwpAQCAt
NzY2LDcgKzc2NSw3IEBAIHZvaWQgV2ViQ29udGV4dDo6ZW5hYmxlUHJvY2Vzc1Rlcm1pbmF0aW8K
ICAgICB9CiB9CiAKLWJvb2wgV2ViQ29udGV4dDo6c2hvdWxkVGVybWluYXRlKFdlYlByb2Nlc3NQ
cm94eSogcHJvY2VzcykKK2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6OnNob3VsZFRlcm1pbmF0ZShXZWJQ
cm9jZXNzUHJveHkqIHByb2Nlc3MpCiB7CiAgICAgQVNTRVJUKG1fcHJvY2Vzc2VzLmNvbnRhaW5z
KHByb2Nlc3MpKTsKIApAQCAtNzgxLDIyICs3ODAsMjIgQEAgYm9vbCBXZWJDb250ZXh0OjpzaG91
bGRUZXJtaW5hdGUoV2ViUHJvYwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYkNvbnRl
eHQ6OnByb2Nlc3NXaWxsT3BlbkNvbm5lY3Rpb24oV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQor
dm9pZCBXZWJQcm9jZXNzUG9vbDo6cHJvY2Vzc1dpbGxPcGVuQ29ubmVjdGlvbihXZWJQcm9jZXNz
UHJveHkqIHByb2Nlc3MpCiB7CiAgICAgbV9zdG9yYWdlTWFuYWdlci0+cHJvY2Vzc1dpbGxPcGVu
Q29ubmVjdGlvbihwcm9jZXNzKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0Ojpwcm9jZXNzV2lsbENs
b3NlQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCit2b2lkIFdlYlByb2Nlc3NQ
b29sOjpwcm9jZXNzV2lsbENsb3NlQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3Mp
CiB7CiAgICAgbV9zdG9yYWdlTWFuYWdlci0+cHJvY2Vzc1dpbGxDbG9zZUNvbm5lY3Rpb24ocHJv
Y2Vzcyk7CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6YXBwbGljYXRpb25XaWxsVGVybWluYXRlKCkK
K3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmFwcGxpY2F0aW9uV2lsbFRlcm1pbmF0ZSgpCiB7CiAgICAg
bV9zdG9yYWdlTWFuYWdlci0+YXBwbGljYXRpb25XaWxsVGVybWluYXRlKCk7CiB9CiAKLXZvaWQg
V2ViQ29udGV4dDo6cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkqIHBy
b2Nlc3MpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpwcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdl
YlByb2Nlc3NQcm94eSogcHJvY2VzcykKIHsKICAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFp
bnMocHJvY2VzcykpOwogCkBAIC04MTksNyArODE4LDcgQEAgdm9pZCBXZWJDb250ZXh0Ojpwcm9j
ZXNzRGlkRmluaXNoTGF1bmNoaQogICAgIG1fY29ubmVjdGlvbkNsaWVudC5kaWRDcmVhdGVDb25u
ZWN0aW9uKHRoaXMsIHByb2Nlc3MtPndlYkNvbm5lY3Rpb24oKSk7CiB9CiAKLXZvaWQgV2ViQ29u
dGV4dDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQordm9pZCBX
ZWJQcm9jZXNzUG9vbDo6ZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNz
KQogewogICAgIEFTU0VSVChtX3Byb2Nlc3Nlcy5jb250YWlucyhwcm9jZXNzKSk7CiAKQEAgLTg1
Myw3ICs4NTIsNyBAQCB2b2lkIFdlYkNvbnRleHQ6OmRpc2Nvbm5lY3RQcm9jZXNzKFdlYlByCiAg
ICAgbV9wcm9jZXNzZXMucmVtb3ZlKG1fcHJvY2Vzc2VzLmZpbmQocHJvY2VzcykpOwogfQogCi1X
ZWJQcm9jZXNzUHJveHkmIFdlYkNvbnRleHQ6OmNyZWF0ZU5ld1dlYlByb2Nlc3NSZXNwZWN0aW5n
UHJvY2Vzc0NvdW50TGltaXQoKQorV2ViUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3Jl
YXRlTmV3V2ViUHJvY2Vzc1Jlc3BlY3RpbmdQcm9jZXNzQ291bnRMaW1pdCgpCiB7CiAgICAgaWYg
KG1fcHJvY2Vzc2VzLnNpemUoKSA8IG1fd2ViUHJvY2Vzc0NvdW50TGltaXQpCiAgICAgICAgIHJl
dHVybiBjcmVhdGVOZXdXZWJQcm9jZXNzKCk7CkBAIC04NjYsNyArODY1LDcgQEAgV2ViUHJvY2Vz
c1Byb3h5JiBXZWJDb250ZXh0OjpjcmVhdGVOZXdXZQogICAgIHJldHVybiAqcHJvY2VzczsKIH0K
IAotUGFzc1JlZlB0cjxXZWJQYWdlUHJveHk+IFdlYkNvbnRleHQ6OmNyZWF0ZVdlYlBhZ2UoUGFn
ZUNsaWVudCYgcGFnZUNsaWVudCwgV2ViUGFnZUNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikK
K1Bhc3NSZWZQdHI8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlV2ViUGFnZShQ
YWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBXZWJQYWdlQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
KQogewogICAgIGlmICghY29uZmlndXJhdGlvbi5wYWdlR3JvdXApCiAgICAgICAgIGNvbmZpZ3Vy
YXRpb24ucGFnZUdyb3VwID0gbV9kZWZhdWx0UGFnZUdyb3VwLnB0cigpOwpAQCAtODk3LDcgKzg5
Niw3IEBAIFBhc3NSZWZQdHI8V2ViUGFnZVByb3h5PiBXZWJDb250ZXh0OjpjcmUKICAgICByZXR1
cm4gcHJvY2Vzcy0+Y3JlYXRlV2ViUGFnZShwYWdlQ2xpZW50LCBXVEY6Om1vdmUoY29uZmlndXJh
dGlvbikpOwogfQogCi1Eb3dubG9hZFByb3h5KiBXZWJDb250ZXh0Ojpkb3dubG9hZChXZWJQYWdl
UHJveHkqIGluaXRpYXRpbmdQYWdlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCitE
b3dubG9hZFByb3h5KiBXZWJQcm9jZXNzUG9vbDo6ZG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0
aWF0aW5nUGFnZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIERvd25s
b2FkUHJveHkqIGRvd25sb2FkUHJveHkgPSBjcmVhdGVEb3dubG9hZFByb3h5KHJlcXVlc3QpOwog
ICAgIHVpbnQ2NF90IGluaXRpYXRpbmdQYWdlSUQgPSBpbml0aWF0aW5nUGFnZSA/IGluaXRpYXRp
bmdQYWdlLT5wYWdlSUQoKSA6IDA7CkBAIC05MTQsNyArOTEzLDcgQEAgRG93bmxvYWRQcm94eSog
V2ViQ29udGV4dDo6ZG93bmxvYWQoV2ViUAogICAgIHJldHVybiBkb3dubG9hZFByb3h5OwogfQog
Ci1Eb3dubG9hZFByb3h5KiBXZWJDb250ZXh0OjpyZXN1bWVEb3dubG9hZChjb25zdCBBUEk6OkRh
dGEqIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgcGF0aCkKK0Rvd25sb2FkUHJveHkqIFdlYlBy
b2Nlc3NQb29sOjpyZXN1bWVEb3dubG9hZChjb25zdCBBUEk6OkRhdGEqIHJlc3VtZURhdGEsIGNv
bnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5ID0g
Y3JlYXRlRG93bmxvYWRQcm94eShSZXNvdXJjZVJlcXVlc3QoKSk7CiAKQEAgLTkzMyw3ICs5MzIs
NyBAQCBEb3dubG9hZFByb3h5KiBXZWJDb250ZXh0OjpyZXN1bWVEb3dubG9hCiAgICAgcmV0dXJu
IGRvd25sb2FkUHJveHk7CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6cG9zdE1lc3NhZ2VUb0luamVj
dGVkQnVuZGxlKGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIEFQSTo6T2JqZWN0KiBtZXNzYWdl
Qm9keSkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShj
b25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBBUEk6Ok9iamVjdCogbWVzc2FnZUJvZHkpCiB7CiAg
ICAgaWYgKG1fcHJvY2Vzc2VzLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAobV9wcm9jZXNzTW9k
ZWwgPT0gUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2VzcykKQEAgLTk1MywyMiArOTUy
LDIyIEBAIHZvaWQgV2ViQ29udGV4dDo6cG9zdE1lc3NhZ2VUb0luamVjdGVkQnUKIAogLy8gSW5q
ZWN0ZWRCdW5kbGUgY2xpZW50CiAKLXZvaWQgV2ViQ29udGV4dDo6ZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tSW5qZWN0ZWRCdW5kbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgQVBJOjpPYmplY3Qq
IG1lc3NhZ2VCb2R5KQordm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9t
SW5qZWN0ZWRCdW5kbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgQVBJOjpPYmplY3QqIG1l
c3NhZ2VCb2R5KQogewogICAgIG1faW5qZWN0ZWRCdW5kbGVDbGllbnQuZGlkUmVjZWl2ZU1lc3Nh
Z2VGcm9tSW5qZWN0ZWRCdW5kbGUodGhpcywgbWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5KTsKIH0K
IAotdm9pZCBXZWJDb250ZXh0OjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVj
dGVkQnVuZGxlKGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIEFQSTo6T2JqZWN0KiBtZXNzYWdl
Qm9keSwgUmVmUHRyPEFQSTo6T2JqZWN0PiYgcmV0dXJuRGF0YSkKK3ZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlTmFtZSwgQVBJOjpPYmplY3QqIG1lc3NhZ2VCb2R5LCBSZWZQdHI8QVBJ
OjpPYmplY3Q+JiByZXR1cm5EYXRhKQogewogICAgIG1faW5qZWN0ZWRCdW5kbGVDbGllbnQuZGlk
UmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSh0aGlzLCBtZXNzYWdl
TmFtZSwgbWVzc2FnZUJvZHksIHJldHVybkRhdGEpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OnBv
cHVsYXRlVmlzaXRlZExpbmtzKCkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBvcHVsYXRlVmlzaXRl
ZExpbmtzKCkKIHsKICAgICBtX2hpc3RvcnlDbGllbnQtPnBvcHVsYXRlVmlzaXRlZExpbmtzKCp0
aGlzKTsKIH0KIAotV2ViQ29udGV4dDo6U3RhdGlzdGljcyYgV2ViQ29udGV4dDo6c3RhdGlzdGlj
cygpCitXZWJQcm9jZXNzUG9vbDo6U3RhdGlzdGljcyYgV2ViUHJvY2Vzc1Bvb2w6OnN0YXRpc3Rp
Y3MoKQogewogICAgIHN0YXRpYyBTdGF0aXN0aWNzIHN0YXRpc3RpY3MgPSBTdGF0aXN0aWNzKCk7
CiAKQEAgLTk3Niw3ICs5NzUsNyBAQCBXZWJDb250ZXh0OjpTdGF0aXN0aWNzJiBXZWJDb250ZXh0
OjpzdGF0CiB9CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLXZvaWQgV2ViQ29u
dGV4dDo6c2V0QWRkaXRpb25hbFBsdWdpbnNEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3Rv
cnkpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBZGRpdGlvbmFsUGx1Z2luc0RpcmVjdG9yeShj
b25zdCBTdHJpbmcmIGRpcmVjdG9yeSkKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBkaXJlY3Rvcmll
czsKICAgICBkaXJlY3Rvcmllcy5hcHBlbmQoZGlyZWN0b3J5KTsKQEAgLTk4NSwzNyArOTg0LDM3
IEBAIHZvaWQgV2ViQ29udGV4dDo6c2V0QWRkaXRpb25hbFBsdWdpbnNEaXIKIH0KICNlbmRpZiAv
LyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIAotdm9pZCBXZWJDb250ZXh0OjpzZXRBbHdh
eXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aChib29sIGFsd2F5c1VzZUNvbXBsZXhUZXh0KQordm9p
ZCBXZWJQcm9jZXNzUG9vbDo6c2V0QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGgoYm9vbCBh
bHdheXNVc2VDb21wbGV4VGV4dCkKIHsKICAgICBtX2Fsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQ
YXRoID0gYWx3YXlzVXNlQ29tcGxleFRleHQ7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzOjpTZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aChhbHdheXNV
c2VDb21wbGV4VGV4dCkpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OnNldFNob3VsZFVzZUZvbnRT
bW9vdGhpbmcoYm9vbCB1c2VGb250U21vb3RoaW5nKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0
U2hvdWxkVXNlRm9udFNtb290aGluZyhib29sIHVzZUZvbnRTbW9vdGhpbmcpCiB7CiAgICAgbV9z
aG91bGRVc2VGb250U21vb3RoaW5nID0gdXNlRm9udFNtb290aGluZzsKICAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFNob3VsZFVzZUZvbnRTbW9vdGhpbmco
dXNlRm9udFNtb290aGluZykpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OnJlZ2lzdGVyVVJMU2No
ZW1lQXNFbXB0eURvY3VtZW50KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQordm9pZCBXZWJQcm9j
ZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0VtcHR5RG9jdW1lbnQoY29uc3QgU3RyaW5nJiB1
cmxTY2hlbWUpCiB7CiAgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzRW1wdHlEb2N1bWVudC5hZGQo
dXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlJlZ2lzdGVyVVJMU2NoZW1lQXNFbXB0eURvY3VtZW50KHVybFNjaGVtZSkpOwogfQogCi12b2lk
IFdlYkNvbnRleHQ6OnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUoY29uc3QgU3RyaW5nJiB1cmxT
Y2hlbWUpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKGNv
bnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJBc1NlY3Vy
ZS5hZGQodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7CiB9CiAKLXZvaWQg
V2ViQ29udGV4dDo6c2V0RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShjb25z
dCBTdHJpbmcmIHVybFNjaGVtZSkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldERvbWFpblJlbGF4
YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCiB7CiAg
ICAgbV9zY2hlbWVzVG9TZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yLmFkZCh1cmxTY2hl
bWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0RG9t
YWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZSh1cmxTY2hlbWUpKTsKIH0KIAotdm9p
ZCBXZWJDb250ZXh0OjpzZXRDYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhbHVhdGlvbihib29s
IHZhbHVlKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Q2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVz
dEV2YWx1YXRpb24oYm9vbCB2YWx1ZSkKIHsKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQog
ICAgIG1fY2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24gPSB2YWx1ZTsKQEAgLTEw
MjgsNjcgKzEwMjcsNjcgQEAgdm9pZCBXZWJDb250ZXh0OjpzZXRDYW5IYW5kbGVIVFRQU1NlcnZl
cgogI2VuZGlmCiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2Fs
KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJV
UkxTY2hlbWVBc0xvY2FsKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIG1fc2NoZW1l
c1RvUmVnaXN0ZXJBc0xvY2FsLmFkZCh1cmxTY2hlbWUpOwogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVt
ZSkpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyhj
b25zdCBTdHJpbmcmIHVybFNjaGVtZSkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJM
U2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBtX3NjaGVt
ZXNUb1JlZ2lzdGVyQXNOb0FjY2Vzcy5hZGQodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1
cmxTY2hlbWUpKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0OjpyZWdpc3RlclVSTFNjaGVtZUFzRGlz
cGxheUlzb2xhdGVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQordm9pZCBXZWJQcm9jZXNzUG9v
bDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3BsYXlJc29sYXRlZChjb25zdCBTdHJpbmcmIHVybFNj
aGVtZSkKIHsKICAgICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNEaXNwbGF5SXNvbGF0ZWQuYWRkKHVy
bFNjaGVtZSk7CiAgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpS
ZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKHVybFNjaGVtZSkpOwogfQogCi12b2lk
IFdlYkNvbnRleHQ6OnJlZ2lzdGVyVVJMU2NoZW1lQXNDT1JTRW5hYmxlZChjb25zdCBTdHJpbmcm
IHVybFNjaGVtZSkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNDT1JT
RW5hYmxlZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKIHsKICAgICBtX3NjaGVtZXNUb1JlZ2lz
dGVyQXNDT1JTRW5hYmxlZC5hZGQodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMo
TWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNDT1JTRW5hYmxlZCh1cmxT
Y2hlbWUpKTsKIH0KIAotSGFzaFNldDxTdHJpbmc+JiBXZWJDb250ZXh0OjpnbG9iYWxVUkxTY2hl
bWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQorSGFzaFNldDxTdHJpbmc+JiBXZWJQcm9j
ZXNzUG9vbDo6Z2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0b21Qcm90b2NvbEhhbmRsZXJzKCkKIHsK
ICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxTdHJpbmc+PiBzZXQ7CiAgICAgcmV0
dXJuIHNldDsKIH0KIAotdm9pZCBXZWJDb250ZXh0OjpyZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFz
SGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKK3Zv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Q
cm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQogewogICAgIGlmICghdXJs
U2NoZW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgc2NoZW1lTG93ZXIgPSB1cmxT
Y2hlbWUubG93ZXIoKTsKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFu
ZGxlcnMoKS5hZGQoc2NoZW1lTG93ZXIpOwotICAgIGZvciAoYXV0byogY29udGV4dCA6IGFsbENv
bnRleHRzKCkpCi0gICAgICAgIGNvbnRleHQtPnJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9tUHJvdG9j
b2woc2NoZW1lTG93ZXIpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNz
UG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9tUHJv
dG9jb2woc2NoZW1lTG93ZXIpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OnVucmVnaXN0ZXJHbG9i
YWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5nJiB1
cmxTY2hlbWUpCit2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1l
QXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQog
ewogICAgIGlmICghdXJsU2NoZW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcgc2No
ZW1lTG93ZXIgPSB1cmxTY2hlbWUubG93ZXIoKTsKICAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1
c3RvbVByb3RvY29sSGFuZGxlcnMoKS5yZW1vdmUoc2NoZW1lTG93ZXIpOwotICAgIGZvciAoYXV0
byogY29udGV4dCA6IGFsbENvbnRleHRzKCkpCi0gICAgICAgIGNvbnRleHQtPnVucmVnaXN0ZXJT
Y2hlbWVGb3JDdXN0b21Qcm90b2NvbChzY2hlbWVMb3dlcik7CisgICAgZm9yIChhdXRvKiBwcm9j
ZXNzUG9vbCA6IGFsbFByb2Nlc3NQb29scygpKQorICAgICAgICBwcm9jZXNzUG9vbC0+dW5yZWdp
c3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKHNjaGVtZUxvd2VyKTsKIH0KIAogI2lmIEVOQUJM
RShDQUNIRV9QQVJUSVRJT05JTkcpCi12b2lkIFdlYkNvbnRleHQ6OnJlZ2lzdGVyVVJMU2NoZW1l
QXNDYWNoZVBhcnRpdGlvbmVkKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQordm9pZCBXZWJQcm9j
ZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQoY29uc3QgU3RyaW5n
JiB1cmxTY2hlbWUpCiB7CiAgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzQ2FjaGVQYXJ0aXRpb25l
ZC5hZGQodXJsU2NoZW1lKTsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKHVybFNjaGVtZSkpOwog
fQogI2VuZGlmCiAKLXZvaWQgV2ViQ29udGV4dDo6c2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNh
Y2hlTW9kZWwpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwg
Y2FjaGVNb2RlbCkKIHsKICAgICBtX2NhY2hlTW9kZWwgPSBjYWNoZU1vZGVsOwogICAgIHNlbmRU
b0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChzdGF0aWNf
Y2FzdDx1aW50MzJfdD4obV9jYWNoZU1vZGVsKSkpOwpAQCAtMTA5NiwxMiArMTA5NSwxMiBAQCB2
b2lkIFdlYkNvbnRleHQ6OnNldENhY2hlTW9kZWwoQ2FjaGVNb2RlCiAgICAgLy8gRklYTUU6IElu
Zm9ybSB0aGUgTmV0d29yayBQcm9jZXNzIGlmIGluIHVzZS4KIH0KIAotdm9pZCBXZWJDb250ZXh0
OjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUgdGltZW91dEludGVydmFs
KQordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwo
ZG91YmxlIHRpbWVvdXRJbnRlcnZhbCkKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OlNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKHRpbWVvdXRJ
bnRlcnZhbCkpOwogfQogCi1Eb3dubG9hZFByb3h5KiBXZWJDb250ZXh0OjpjcmVhdGVEb3dubG9h
ZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK0Rvd25sb2FkUHJveHkqIFdl
YlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFByb3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKIHsKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogICAgIGlmICh1c2VzTmV0
d29ya1Byb2Nlc3MoKSkgewpAQCAtMTExNCwzNSArMTExMywzNSBAQCBEb3dubG9hZFByb3h5KiBX
ZWJDb250ZXh0OjpjcmVhdGVEb3dubG9hCiAgICAgcmV0dXJuIGVuc3VyZVNoYXJlZFdlYlByb2Nl
c3MoKS5jcmVhdGVEb3dubG9hZFByb3h5KHJlcXVlc3QpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6
OmFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJO
YW1lLCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQordm9pZCBXZWJQcm9j
ZXNzUG9vbDo6YWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VS
ZWNlaXZlck5hbWUsIElQQzo6TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVjZWl2ZXIpCiB7CiAg
ICAgbV9tZXNzYWdlUmVjZWl2ZXJNYXAuYWRkTWVzc2FnZVJlY2VpdmVyKG1lc3NhZ2VSZWNlaXZl
ck5hbWUsIG1lc3NhZ2VSZWNlaXZlcik7CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6YWRkTWVzc2Fn
ZVJlY2VpdmVyKElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIHVpbnQ2
NF90IGRlc3RpbmF0aW9uSUQsIElQQzo6TWVzc2FnZVJlY2VpdmVyJiBtZXNzYWdlUmVjZWl2ZXIp
Cit2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZl
cmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNlaXZlcikKIHsKICAgICBtX21lc3NhZ2VSZWNlaXZl
ck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIobWVzc2FnZVJlY2VpdmVyTmFtZSwgZGVzdGluYXRpb25J
RCwgbWVzc2FnZVJlY2VpdmVyKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0OjpyZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgdWludDY0
X3QgZGVzdGluYXRpb25JRCkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZU1lc3NhZ2VSZWNl
aXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCB1aW50NjRfdCBk
ZXN0aW5hdGlvbklEKQogewogICAgIG1fbWVzc2FnZVJlY2VpdmVyTWFwLnJlbW92ZU1lc3NhZ2VS
ZWNlaXZlcihtZXNzYWdlUmVjZWl2ZXJOYW1lLCBkZXN0aW5hdGlvbklEKTsKIH0KIAotYm9vbCBX
ZWJDb250ZXh0OjpkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBJ
UEM6Ok1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyKQorYm9vbCBXZWJQcm9jZXNzUG9vbDo6ZGlzcGF0
Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2Rl
ciYgZGVjb2RlcikKIHsKICAgICByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXAuZGlzcGF0Y2hN
ZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCi1ib29sIFdlYkNvbnRleHQ6OmRpc3Bh
dGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBJUEM6Ok1lc3NhZ2VE
ZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNzYWdlRW5jb2Rlcj4mIHJl
cGx5RW5jb2RlcikKK2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyLCBz
dGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNzYWdlRW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKIHsKICAg
ICByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXAuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OmRpZFJl
Y2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVj
b2RlciYgZGVjb2RlcikKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZFJlY2VpdmVNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2RlcikK
IHsKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6Oldl
YkNvbnRleHQ6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewotICAgICAgICBkaWRSZWNlaXZlV2Vi
Q29udGV4dE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CisgICAgaWYgKGRlY29kZXIubWVz
c2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpKSB7CisgICAgICAgIGRpZFJlY2VpdmVXZWJQcm9jZXNzUG9vbE1lc3NhZ2Uo
Y29ubmVjdGlvbiwgZGVjb2Rlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTExNjMs
MTAgKzExNjIsMTAgQEAgdm9pZCBXZWJDb250ZXh0OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6Ogog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OmRpZFJlY2Vp
dmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIElQQzo6TWVzc2FnZURl
Y29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYgcmVw
bHlFbmNvZGVyKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2Rlciwg
c3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+JiByZXBseUVuY29kZXIpCiB7Ci0g
ICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJDb250
ZXh0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKLSAgICAgICAgZGlkUmVjZWl2ZVN5bmNXZWJD
b250ZXh0TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOworICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bv
b2w6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgeworICAgICAgICBkaWRSZWNlaXZlU3luY1dlYlBy
b2Nlc3NQb29sTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMTkzLDEyICsxMTkyLDEyIEBAIHZvaWQgV2ViQ29u
dGV4dDo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKEkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KIAotdm9pZCBXZWJDb250ZXh0OjpzZXRFbmhhbmNlZEFjY2Vzc2liaWxpdHkoYm9vbCBmbGFn
KQordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0RW5oYW5jZWRBY2Nlc3NpYmlsaXR5KGJvb2wgZmxh
ZykKIHsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldEVu
aGFuY2VkQWNjZXNzaWJpbGl0eShmbGFnKSk7CiB9CiAgICAgCi12b2lkIFdlYkNvbnRleHQ6OnN0
YXJ0TWVtb3J5U2FtcGxlcihjb25zdCBkb3VibGUgaW50ZXJ2YWwpCit2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzdGFydE1lbW9yeVNhbXBsZXIoY29uc3QgZG91YmxlIGludGVydmFsKQogeyAgICAKICAg
ICAvLyBGb3IgbmV3IFdlYlByb2Nlc3NlcyB3ZSB3aWxsIGFsc28gd2FudCB0byBzdGFydCB0aGUg
TWVtb3J5IFNhbXBsZXIKICAgICBtX21lbW9yeVNhbXBsZXJFbmFibGVkID0gdHJ1ZTsKQEAgLTEy
MTgsNyArMTIxNyw3IEBAIHZvaWQgV2ViQ29udGV4dDo6c3RhcnRNZW1vcnlTYW1wbGVyKGNvbnMK
ICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0YXJ0TWVtb3J5
U2FtcGxlcihzYW1wbGVMb2dTYW5kYm94SGFuZGxlLCBzYW1wbGVMb2dGaWxlUGF0aCwgaW50ZXJ2
YWwpKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0OjpzdG9wTWVtb3J5U2FtcGxlcigpCit2b2lkIFdl
YlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiB7ICAgIAogICAgIC8vIEZvciBXZWJQ
cm9jZXNzCiAgICAgbV9tZW1vcnlTYW1wbGVyRW5hYmxlZCA9IGZhbHNlOwpAQCAtMTIzMSw3ICsx
MjMwLDcgQEAgdm9pZCBXZWJDb250ZXh0OjpzdG9wTWVtb3J5U2FtcGxlcigpCiAgICAgc2VuZFRv
QWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsK
IH0KIAotU3RyaW5nIFdlYkNvbnRleHQ6OmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoKSBjb25z
dAorU3RyaW5nIFdlYlByb2Nlc3NQb29sOjphcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkgY29u
c3QKIHsKICAgICBpZiAoIW1fb3ZlcnJpZGVBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIG1fb3ZlcnJpZGVBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5
OwpAQCAtMTIzOSw3ICsxMjM4LDcgQEAgU3RyaW5nIFdlYkNvbnRleHQ6OmFwcGxpY2F0aW9uQ2Fj
aGVEaXJlYwogICAgIHJldHVybiBwbGF0Zm9ybURlZmF1bHRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0
b3J5KCk7CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6c2V0SWNvbkRhdGFiYXNlUGF0aChjb25zdCBT
dHJpbmcmIHBhdGgpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRJY29uRGF0YWJhc2VQYXRoKGNv
bnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBtX292ZXJyaWRlSWNvbkRhdGFiYXNlUGF0aCA9IHBh
dGg7CiAgICAgaWYgKCFtX292ZXJyaWRlSWNvbkRhdGFiYXNlUGF0aC5pc0VtcHR5KCkpIHsKQEAg
LTEyNDgsNyArMTI0Nyw3IEBAIHZvaWQgV2ViQ29udGV4dDo6c2V0SWNvbkRhdGFiYXNlUGF0aChj
b24KICAgICB9CiB9CiAKLVN0cmluZyBXZWJDb250ZXh0OjppY29uRGF0YWJhc2VQYXRoKCkgY29u
c3QKK1N0cmluZyBXZWJQcm9jZXNzUG9vbDo6aWNvbkRhdGFiYXNlUGF0aCgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX292ZXJyaWRlSWNvbkRhdGFiYXNlUGF0aC5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIG1fb3ZlcnJpZGVJY29uRGF0YWJhc2VQYXRoOwpAQCAtMTI1Niw3ICsxMjU1LDcgQEAgU3Ry
aW5nIFdlYkNvbnRleHQ6Omljb25EYXRhYmFzZVBhdGgoKSBjbwogICAgIHJldHVybiBwbGF0Zm9y
bURlZmF1bHRJY29uRGF0YWJhc2VQYXRoKCk7CiB9CiAKLVN0cmluZyBXZWJDb250ZXh0OjpkaXNr
Q2FjaGVEaXJlY3RvcnkoKSBjb25zdAorU3RyaW5nIFdlYlByb2Nlc3NQb29sOjpkaXNrQ2FjaGVE
aXJlY3RvcnkoKSBjb25zdAogewogICAgIGlmICghbV9vdmVycmlkZURpc2tDYWNoZURpcmVjdG9y
eS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBtX292ZXJyaWRlRGlza0NhY2hlRGlyZWN0b3J5
OwpAQCAtMTI2NCw3ICsxMjYzLDcgQEAgU3RyaW5nIFdlYkNvbnRleHQ6OmRpc2tDYWNoZURpcmVj
dG9yeSgpIAogICAgIHJldHVybiBwbGF0Zm9ybURlZmF1bHREaXNrQ2FjaGVEaXJlY3RvcnkoKTsK
IH0KIAotU3RyaW5nIFdlYkNvbnRleHQ6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdAor
U3RyaW5nIFdlYlByb2Nlc3NQb29sOjpjb29raWVTdG9yYWdlRGlyZWN0b3J5KCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fb3ZlcnJpZGVDb29raWVTdG9yYWdlRGlyZWN0b3J5LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIG1fb3ZlcnJpZGVDb29raWVTdG9yYWdlRGlyZWN0b3J5OwpAQCAtMTI3Miw3
ICsxMjcxLDcgQEAgU3RyaW5nIFdlYkNvbnRleHQ6OmNvb2tpZVN0b3JhZ2VEaXJlY3RvcgogICAg
IHJldHVybiBwbGF0Zm9ybURlZmF1bHRDb29raWVTdG9yYWdlRGlyZWN0b3J5KCk7CiB9CiAKLXZv
aWQgV2ViQ29udGV4dDo6dXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKCkKK3ZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbigpCiB7CiAgICAgQVNTRVJUKG1fcHJvY2Vz
c2VzLmlzRW1wdHkoKSk7CiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKQEAgLTEyODgsNyAr
MTI4Nyw3IEBAIHZvaWQgV2ViQ29udGV4dDo6dXNlVGVzdGluZ05ldHdvcmtTZXNzaW8KICAgICBt
X3Nob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiA9IHRydWU7CiB9CiAKLXZvaWQgV2ViQ29u
dGV4dDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNlcnRp
ZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKK3ZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJD
ZXJ0aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAjaWYg
RU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKICAgICBpZiAobV91c2VzTmV0d29ya1Byb2Nlc3MgJiYg
bV9uZXR3b3JrUHJvY2VzcykgewpAQCAtMTMxMCw3ICsxMzA5LDcgQEAgdm9pZCBXZWJDb250ZXh0
OjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6
c2V0SFRUUFBpcGVsaW5pbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNldEhUVFBQaXBlbGluaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgUmVzb3VyY2VSZXF1ZXN0OjpzZXRIVFRQUGlwZWxpbmluZ0VuYWJsZWQo
ZW5hYmxlZCk7CkBAIC0xMzE5LDcgKzEzMTgsNyBAQCB2b2lkIFdlYkNvbnRleHQ6OnNldEhUVFBQ
aXBlbGluaW5nRW5hYmxlCiAjZW5kaWYKIH0KIAotYm9vbCBXZWJDb250ZXh0OjpodHRwUGlwZWxp
bmluZ0VuYWJsZWQoKSBjb25zdAorYm9vbCBXZWJQcm9jZXNzUG9vbDo6aHR0cFBpcGVsaW5pbmdF
bmFibGVkKCkgY29uc3QKIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICByZXR1cm4gUmVzb3Vy
Y2VSZXF1ZXN0OjpodHRwUGlwZWxpbmluZ0VuYWJsZWQoKTsKQEAgLTEzMjgsNyArMTMyNyw3IEBA
IGJvb2wgV2ViQ29udGV4dDo6aHR0cFBpcGVsaW5pbmdFbmFibGVkKCkKICNlbmRpZgogfQogCi12
b2lkIFdlYkNvbnRleHQ6OmdldFN0YXRpc3RpY3ModWludDMyX3Qgc3RhdGlzdGljc01hc2ssIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoSW1tdXRhYmxlRGljdGlvbmFyeSosIENhbGxiYWNrQmFzZTo6RXJy
b3IpPiBjYWxsYmFja0Z1bmN0aW9uKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0U3RhdGlzdGlj
cyh1aW50MzJfdCBzdGF0aXN0aWNzTWFzaywgc3RkOjpmdW5jdGlvbjx2b2lkIChJbW11dGFibGVE
aWN0aW9uYXJ5KiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+IGNhbGxiYWNrRnVuY3Rpb24pCiB7CiAg
ICAgaWYgKCFzdGF0aXN0aWNzTWFzaykgewogICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKG51bGxw
dHIsIENhbGxiYWNrQmFzZTo6RXJyb3I6OlVua25vd24pOwpAQCAtMTM0NCw3ICsxMzQzLDcgQEAg
dm9pZCBXZWJDb250ZXh0OjpnZXRTdGF0aXN0aWNzKHVpbnQzMl90IAogICAgICAgICByZXF1ZXN0
TmV0d29ya2luZ1N0YXRpc3RpY3MocmVxdWVzdC5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViQ29udGV4
dDo6cmVxdWVzdFdlYkNvbnRlbnRTdGF0aXN0aWNzKFN0YXRpc3RpY3NSZXF1ZXN0KiByZXF1ZXN0
KQordm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVxdWVzdFdlYkNvbnRlbnRTdGF0aXN0aWNzKFN0YXRp
c3RpY3NSZXF1ZXN0KiByZXF1ZXN0KQogewogICAgIGlmIChtX3Byb2Nlc3NNb2RlbCA9PSBQcm9j
ZXNzTW9kZWxTaGFyZWRTZWNvbmRhcnlQcm9jZXNzKSB7CiAgICAgICAgIGlmIChtX3Byb2Nlc3Nl
cy5pc0VtcHR5KCkpCkBAIC0xMzU5LDcgKzEzNTgsNyBAQCB2b2lkIFdlYkNvbnRleHQ6OnJlcXVl
c3RXZWJDb250ZW50U3RhdGlzCiAgICAgfQogfQogCi12b2lkIFdlYkNvbnRleHQ6OnJlcXVlc3RO
ZXR3b3JraW5nU3RhdGlzdGljcyhTdGF0aXN0aWNzUmVxdWVzdCogcmVxdWVzdCkKK3ZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnJlcXVlc3ROZXR3b3JraW5nU3RhdGlzdGljcyhTdGF0aXN0aWNzUmVxdWVz
dCogcmVxdWVzdCkKIHsKICAgICBib29sIG5ldHdvcmtQcm9jZXNzVW5hdmFpbGFibGU7CiAjaWYg
RU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKQEAgLTEzODMsMTIgKzEzODIsMTIgQEAgdm9pZCBXZWJD
b250ZXh0OjpyZXF1ZXN0TmV0d29ya2luZ1N0YXRpcwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09B
KQotdm9pZCBXZWJDb250ZXh0OjpkdW1teShib29sJikKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmR1
bW15KGJvb2wmKQogewogfQogI2VuZGlmCiAKLXZvaWQgV2ViQ29udGV4dDo6ZGlkR2V0U3RhdGlz
dGljcyhjb25zdCBTdGF0aXN0aWNzRGF0YSYgc3RhdGlzdGljc0RhdGEsIHVpbnQ2NF90IHJlcXVl
c3RJRCkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZEdldFN0YXRpc3RpY3MoY29uc3QgU3RhdGlz
dGljc0RhdGEmIHN0YXRpc3RpY3NEYXRhLCB1aW50NjRfdCByZXF1ZXN0SUQpCiB7CiAgICAgUmVm
UHRyPFN0YXRpc3RpY3NSZXF1ZXN0PiByZXF1ZXN0ID0gbV9zdGF0aXN0aWNzUmVxdWVzdHMudGFr
ZShyZXF1ZXN0SUQpOwogICAgIGlmICghcmVxdWVzdCkgewpAQCAtMTM5OSw1OCArMTM5OCw1OCBA
QCB2b2lkIFdlYkNvbnRleHQ6OmRpZEdldFN0YXRpc3RpY3MoY29uc3QgCiAgICAgcmVxdWVzdC0+
Y29tcGxldGVkUmVxdWVzdChyZXF1ZXN0SUQsIHN0YXRpc3RpY3NEYXRhKTsKIH0KIAotdm9pZCBX
ZWJDb250ZXh0OjpnYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzKCkKK3ZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHMoKQogewogICAgIHNlbmRU
b0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6R2FyYmFnZUNvbGxlY3RKYXZhU2Ny
aXB0T2JqZWN0cygpKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0OjpzZXRKYXZhU2NyaXB0R2FyYmFn
ZUNvbGxlY3RvclRpbWVyRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpz
ZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChib29sIGZsYWcpCiB7CiAg
ICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRKYXZhU2NyaXB0
R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChmbGFnKSk7CiB9CiAKLXZvaWQgV2ViQ29udGV4
dDo6YWRkUGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaChjb25zdCBTdHJpbmcmIHBhZ2VPcmlnaW4s
IHVuc2lnbmVkIHBsdWdJbk9yaWdpbkhhc2gsIFNlc3Npb25JRCBzZXNzaW9uSUQpCit2b2lkIFdl
YlByb2Nlc3NQb29sOjphZGRQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoKGNvbnN0IFN0cmluZyYg
cGFnZU9yaWdpbiwgdW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCwgU2Vzc2lvbklEIHNlc3Npb25J
RCkKIHsKICAgICBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmFkZEF1dG9TdGFydE9yaWdpbkhh
c2gocGFnZU9yaWdpbiwgcGx1Z0luT3JpZ2luSGFzaCwgc2Vzc2lvbklEKTsKIH0KIAotdm9pZCBX
ZWJDb250ZXh0OjpwbHVnSW5EaWRSZWNlaXZlVXNlckludGVyYWN0aW9uKHVuc2lnbmVkIHBsdWdJ
bk9yaWdpbkhhc2gsIFNlc3Npb25JRCBzZXNzaW9uSUQpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpw
bHVnSW5EaWRSZWNlaXZlVXNlckludGVyYWN0aW9uKHVuc2lnbmVkIHBsdWdJbk9yaWdpbkhhc2gs
IFNlc3Npb25JRCBzZXNzaW9uSUQpCiB7CiAgICAgbV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlci5k
aWRSZWNlaXZlVXNlckludGVyYWN0aW9uKHBsdWdJbk9yaWdpbkhhc2gsIHNlc3Npb25JRCk7CiB9
CiAKLVBhc3NSZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFyeT4gV2ViQ29udGV4dDo6cGx1Z0luQXV0
b1N0YXJ0T3JpZ2luSGFzaGVzKCkgY29uc3QKK1Bhc3NSZWZQdHI8SW1tdXRhYmxlRGljdGlvbmFy
eT4gV2ViUHJvY2Vzc1Bvb2w6OnBsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2hlcygpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuYXV0b1N0YXJ0T3JpZ2luc1Rh
YmxlQ29weSgpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OnNldFBsdWdJbkF1dG9TdGFydE9yaWdp
bkhhc2hlcyhJbW11dGFibGVEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5KQordm9pZCBXZWJQcm9jZXNz
UG9vbDo6c2V0UGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzKEltbXV0YWJsZURpY3Rpb25hcnkm
IGRpY3Rpb25hcnkpCiB7CiAgICAgbV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlci5zZXRBdXRvU3Rh
cnRPcmlnaW5zVGFibGUoZGljdGlvbmFyeSk7CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6c2V0UGx1
Z0luQXV0b1N0YXJ0T3JpZ2lucyhBUEk6OkFycmF5JiBhcnJheSkKK3ZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNldFBsdWdJbkF1dG9TdGFydE9yaWdpbnMoQVBJOjpBcnJheSYgYXJyYXkpCiB7CiAgICAg
bV9wbHVnSW5BdXRvU3RhcnRQcm92aWRlci5zZXRBdXRvU3RhcnRPcmlnaW5zQXJyYXkoYXJyYXkp
OwogfQogCi12b2lkIFdlYkNvbnRleHQ6OnNldFBsdWdJbkF1dG9TdGFydE9yaWdpbnNGaWx0ZXJp
bmdPdXRFbnRyaWVzQWRkZWRBZnRlclRpbWUoSW1tdXRhYmxlRGljdGlvbmFyeSYgZGljdGlvbmFy
eSwgZG91YmxlIHRpbWUpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRQbHVnSW5BdXRvU3RhcnRP
cmlnaW5zRmlsdGVyaW5nT3V0RW50cmllc0FkZGVkQWZ0ZXJUaW1lKEltbXV0YWJsZURpY3Rpb25h
cnkmIGRpY3Rpb25hcnksIGRvdWJsZSB0aW1lKQogewogICAgIG1fcGx1Z0luQXV0b1N0YXJ0UHJv
dmlkZXIuc2V0QXV0b1N0YXJ0T3JpZ2luc0ZpbHRlcmluZ091dEVudHJpZXNBZGRlZEFmdGVyVGlt
ZShkaWN0aW9uYXJ5LCB0aW1lKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0OjpyZWdpc3RlclNjaGVt
ZUZvckN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYgc2NoZW1lKQordm9pZCBXZWJQcm9jZXNz
UG9vbDo6cmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbChjb25zdCBTdHJpbmcmIHNjaGVt
ZSkKIHsKICAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6Q3VzdG9tUHJvdG9j
b2xNYW5hZ2VyOjpSZWdpc3RlclNjaGVtZShzY2hlbWUpKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0
Ojp1bnJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2woY29uc3QgU3RyaW5nJiBzY2hlbWUp
Cit2b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyU2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2wo
Y29uc3QgU3RyaW5nJiBzY2hlbWUpCiB7CiAgICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6OkN1c3RvbVByb3RvY29sTWFuYWdlcjo6VW5yZWdpc3RlclNjaGVtZShzY2hlbWUpKTsK
IH0KIAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotdm9pZCBXZWJDb250ZXh0Ojpw
bHVnaW5JbmZvU3RvcmVEaWRMb2FkUGx1Z2lucyhQbHVnaW5JbmZvU3RvcmUqIHN0b3JlKQordm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cGx1Z2luSW5mb1N0b3JlRGlkTG9hZFBsdWdpbnMoUGx1Z2luSW5m
b1N0b3JlKiBzdG9yZSkKIHsKICNpZmRlZiBOREVCVUcKICAgICBVTlVTRURfUEFSQU0oc3RvcmUp
OwpAQCAtMTQ4Nyw3ICsxNDg2LDcgQEAgdm9pZCBXZWJDb250ZXh0OjpwbHVnaW5JbmZvU3RvcmVE
aWRMb2FkUAogfQogI2VuZGlmCiAgICAgCi12b2lkIFdlYkNvbnRleHQ6OnNldE1lbW9yeUNhY2hl
RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldE1lbW9yeUNh
Y2hlRGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKIHsKICAgICBtX21lbW9yeUNhY2hlRGlzYWJsZWQg
PSBkaXNhYmxlZDsKICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6
OlNldE1lbW9yeUNhY2hlRGlzYWJsZWQoZGlzYWJsZWQpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCShyZXZpc2lvbiAxNzc2MzYpCShmcm9tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0Lmg6MTc3NjM2KQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
OTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkNvbnRleHRf
aAorI2RlZmluZSBXZWJDb250ZXh0X2gKKworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1
ZGUgIkRvd25sb2FkUHJveHlNYXAuaCIKKyNpbmNsdWRlICJHZW5lcmljQ2FsbGJhY2suaCIKKyNp
bmNsdWRlICJJbW11dGFibGVEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVy
LmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCisjaW5jbHVkZSAiUGx1Z0luQXV0
b1N0YXJ0UHJvdmlkZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5JbmZvU3RvcmUuaCIKKyNpbmNsdWRl
ICJQcm9jZXNzTW9kZWwuaCIKKyNpbmNsdWRlICJQcm9jZXNzVGhyb3R0bGVyLmgiCisjaW5jbHVk
ZSAiU3RhdGlzdGljc1JlcXVlc3QuaCIKKyNpbmNsdWRlICJTdG9yYWdlTWFuYWdlci5oIgorI2lu
Y2x1ZGUgIlZpc2l0ZWRMaW5rUHJvdmlkZXIuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0Q2xpZW50
LmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dENvbm5lY3Rpb25DbGllbnQuaCIKKyNpbmNsdWRlICJX
ZWJDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUHJv
eHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0xpbmtIYXNoLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9T
ZXNzaW9uSUQuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQorI2luY2x1ZGUgIkRh
dGFiYXNlUHJvY2Vzc1Byb3h5LmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShORVRXT1JLX1BST0NF
U1MpCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NQcm94eS5oIgorI2VuZGlmCisKKyNpZiBQTEFU
Rk9STShDT0NPQSkKK09CSkNfQ0xBU1MgTlNNdXRhYmxlRGljdGlvbmFyeTsKK09CSkNfQ0xBU1Mg
TlNPYmplY3Q7CitPQkpDX0NMQVNTIE5TU3RyaW5nOworI2VuZGlmCisKK25hbWVzcGFjZSBBUEkg
eworY2xhc3MgRG93bmxvYWRDbGllbnQ7CitjbGFzcyBMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVu
dDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIERvd25sb2FkUHJveHk7CitjbGFz
cyBXZWJDb250ZXh0U3VwcGxlbWVudDsKK2NsYXNzIFdlYkljb25EYXRhYmFzZTsKK2NsYXNzIFdl
YlBhZ2VHcm91cDsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKK3N0cnVjdCBTdGF0aXN0aWNzRGF0YTsK
K3N0cnVjdCBXZWJQYWdlQ29uZmlndXJhdGlvbjsKK3N0cnVjdCBXZWJQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzOworICAgIAordHlwZWRlZiBHZW5lcmljQ2FsbGJhY2s8SW1tdXRhYmxlRGljdGlv
bmFyeSo+IERpY3Rpb25hcnlDYWxsYmFjazsKKworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1Mp
CitzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM7CisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKENPQ09BKQoraW50IG5ldHdvcmtQcm9jZXNzTGF0ZW5jeVFPUygpOworaW50IG5l
dHdvcmtQcm9jZXNzVGhyb3VnaHB1dFFPUygpOworaW50IHdlYlByb2Nlc3NMYXRlbmN5UU9TKCk7
CitpbnQgd2ViUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKTsKKyNlbmRpZgorCitzdHJ1Y3QgV2ViQ29u
dGV4dENvbmZpZ3VyYXRpb24geworICAgIFN0cmluZyBpbmplY3RlZEJ1bmRsZVBhdGg7CisgICAg
U3RyaW5nIGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKKyAgICBTdHJpbmcgd2ViU1FMRGF0YWJhc2VE
aXJlY3Rvcnk7CisgICAgU3RyaW5nIGluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5OworICAgIFN0
cmluZyBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5OworfTsKKworY2xhc3MgV2ViQ29udGV4dCA6
IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OkNvbnRleHQ+LCBwcml2
YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CisgICAgLCBwcml2YXRlIFBsdWdpbkluZm9TdG9yZUNsaWVudAorI2VuZGlmCisgICAgeworcHVi
bGljOgorICAgIHN0YXRpYyB2b2lkIGFwcGx5UGxhdGZvcm1TcGVjaWZpY0NvbmZpZ3VyYXRpb25E
ZWZhdWx0cyhXZWJDb250ZXh0Q29uZmlndXJhdGlvbiYpOworCisgICAgV2ViQ29udGV4dChXZWJD
b250ZXh0Q29uZmlndXJhdGlvbik7CisgICAgICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YkNvbnRleHQ+IGNyZWF0ZShXZWJDb250ZXh0Q29uZmlndXJhdGlvbik7CisgICAgdmlydHVhbCB+
V2ViQ29udGV4dCgpOworCisgICAgc3RhdGljIGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0Kj4mIGFs
bENvbnRleHRzKCk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBUKiBzdXBwbGVt
ZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4obV9zdXBwbGVtZW50
cy5nZXQoVDo6c3VwcGxlbWVudE5hbWUoKSkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgorICAgIHZvaWQgYWRkU3VwcGxlbWVudCgpCisgICAgeworICAgICAgICBtX3N1cHBs
ZW1lbnRzLmFkZChUOjpzdXBwbGVtZW50TmFtZSgpLCBUOjpjcmVhdGUodGhpcykpOworICAgIH0K
KworICAgIHZvaWQgYWRkTWVzc2FnZVJlY2VpdmVyKElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3Nh
Z2VSZWNlaXZlck5hbWUsIElQQzo6TWVzc2FnZVJlY2VpdmVyJik7CisgICAgdm9pZCBhZGRNZXNz
YWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgdWlu
dDY0X3QgZGVzdGluYXRpb25JRCwgSVBDOjpNZXNzYWdlUmVjZWl2ZXImKTsKKyAgICB2b2lkIHJl
bW92ZU1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJO
YW1lLCB1aW50NjRfdCBkZXN0aW5hdGlvbklEKTsKKworICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURlY29kZXImKTsKKyAgICBib29sIGRpc3Bh
dGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiwgSVBDOjpNZXNzYWdlRGVjb2RlciYsIHN0
ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYpOworCisgICAgdm9pZCBpbml0aWFs
aXplQ2xpZW50KGNvbnN0IFdLQ29udGV4dENsaWVudEJhc2UqKTsKKyAgICB2b2lkIGluaXRpYWxp
emVJbmplY3RlZEJ1bmRsZUNsaWVudChjb25zdCBXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVu
dEJhc2UqKTsKKyAgICB2b2lkIGluaXRpYWxpemVDb25uZWN0aW9uQ2xpZW50KGNvbnN0IFdLQ29u
dGV4dENvbm5lY3Rpb25DbGllbnRCYXNlKik7CisgICAgdm9pZCBzZXRIaXN0b3J5Q2xpZW50KHN0
ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50Pik7CisgICAgdm9p
ZCBzZXREb3dubG9hZENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpEb3dubG9hZENsaWVudD4p
OworCisgICAgdm9pZCBzZXRQcm9jZXNzTW9kZWwoUHJvY2Vzc01vZGVsKTsgLy8gQ2FuIG9ubHkg
YmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIHByb2Nlc3NlcyBydW5uaW5nLgorICAgIFByb2Nl
c3NNb2RlbCBwcm9jZXNzTW9kZWwoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nlc3NNb2RlbDsgfQor
CisgICAgdm9pZCBzZXRNYXhpbXVtTnVtYmVyT2ZQcm9jZXNzZXModW5zaWduZWQpOyAvLyBDYW4g
b25seSBiZSBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gcHJvY2Vzc2VzIHJ1bm5pbmcuCisgICAg
dW5zaWduZWQgbWF4aW11bU51bWJlck9mUHJvY2Vzc2VzKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQ
cm9jZXNzQ291bnRMaW1pdDsgfQorCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxXZWJQcm9jZXNz
UHJveHk+PiYgcHJvY2Vzc2VzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZXM7IH0KKworICAg
IC8vIFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJy
ZW50IHByb2Nlc3MgbW9kZWwuIFRoZSBjb25uZWN0aW9uIG11c3QgYmUgbm9uLW51bGwuCisgICAg
SVBDOjpDb25uZWN0aW9uKiBuZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3Nh
Z2UpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2VuZFRvQWxsUHJvY2Vzc2VzUmVs
YXVuY2hpbmdUaGVtSWZOZWNlc3NhcnkoY29uc3QgVCYgbWVzc2FnZSk7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9PbmVQcm9jZXNzKFQmJiBtZXNzYWdlKTsKKworICAgIC8v
IFNlbmRzIHRoZSBtZXNzYWdlIHRvIFdlYlByb2Nlc3Mgb3IgTmV0d29ya1Byb2Nlc3MgYXMgYXBw
cm9wb3JpYXRlIGZvciBjdXJyZW50IHByb2Nlc3MgbW9kZWwuCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSk7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5n
SWZOZWNlc3NhcnkoVCYmIG1lc3NhZ2UpOworCisgICAgLy8gU2VuZHMgdGhlIG1lc3NhZ2UgdG8g
V2ViUHJvY2VzcyBvciBEYXRhYmFzZVByb2Nlc3MgYXMgYXBwcm9wb3JpYXRlIGZvciBjdXJyZW50
IHByb2Nlc3MgbW9kZWwuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBzZW5kVG9EYXRh
YmFzZVByb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKTsKKworICAgIHZv
aWQgcHJvY2Vzc1dpbGxPcGVuQ29ubmVjdGlvbihXZWJQcm9jZXNzUHJveHkqKTsKKyAgICB2b2lk
IHByb2Nlc3NXaWxsQ2xvc2VDb25uZWN0aW9uKFdlYlByb2Nlc3NQcm94eSopOworICAgIHZvaWQg
cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkqKTsKKworICAgIHZvaWQg
YXBwbGljYXRpb25XaWxsVGVybWluYXRlKCk7CisgICAgLy8gRGlzY29ubmVjdCB0aGUgcHJvY2Vz
cyBmcm9tIHRoZSBjb250ZXh0LgorICAgIHZvaWQgZGlzY29ubmVjdFByb2Nlc3MoV2ViUHJvY2Vz
c1Byb3h5Kik7CisKKyAgICBTdG9yYWdlTWFuYWdlciYgc3RvcmFnZU1hbmFnZXIoKSBjb25zdCB7
IHJldHVybiAqbV9zdG9yYWdlTWFuYWdlcjsgfQorCisgICAgUGFzc1JlZlB0cjxXZWJQYWdlUHJv
eHk+IGNyZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIFdlYlBhZ2VDb25maWd1cmF0aW9uKTsKKwor
ICAgIGNvbnN0IFN0cmluZyYgaW5qZWN0ZWRCdW5kbGVQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9p
bmplY3RlZEJ1bmRsZVBhdGg7IH0KKworICAgIERvd25sb2FkUHJveHkqIGRvd25sb2FkKFdlYlBh
Z2VQcm94eSogaW5pdGlhdGluZ1BhZ2UsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYp
OworICAgIERvd25sb2FkUHJveHkqIHJlc3VtZURvd25sb2FkKGNvbnN0IEFQSTo6RGF0YSogcmVz
dW1lRGF0YSwgY29uc3QgU3RyaW5nJiBwYXRoKTsKKworICAgIHZvaWQgc2V0SW5qZWN0ZWRCdW5k
bGVJbml0aWFsaXphdGlvblVzZXJEYXRhKFBhc3NSZWZQdHI8QVBJOjpPYmplY3Q+IHVzZXJEYXRh
KSB7IG1faW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhID0gdXNlckRhdGE7IH0K
KworICAgIHZvaWQgcG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKGNvbnN0IFN0cmluZyYsIEFQ
STo6T2JqZWN0Kik7CisKKyAgICAvLyBJbmplY3RlZEJ1bmRsZSBjbGllbnQKKyAgICB2b2lkIGRp
ZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKGNvbnN0IFN0cmluZyYsIEFQSTo6T2Jq
ZWN0Kik7CisgICAgdm9pZCBkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKGNvbnN0IFN0cmluZyYsIEFQSTo6T2JqZWN0KiwgUmVmUHRyPEFQSTo6T2JqZWN0PiYg
cmV0dXJuRGF0YSk7CisKKyAgICB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtzKCk7CisKKyNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICB2b2lkIHNldEFkZGl0aW9uYWxQbHVnaW5z
RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOworCisgICAgUGx1Z2luSW5mb1N0b3JlJiBwbHVnaW5J
bmZvU3RvcmUoKSB7IHJldHVybiBtX3BsdWdpbkluZm9TdG9yZTsgfQorI2VuZGlmCisKKyAgICB2
b2lkIHNldEFsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoKGJvb2wpOworICAgIHZvaWQgc2V0
U2hvdWxkVXNlRm9udFNtb290aGluZyhib29sKTsKKyAgICAKKyAgICB2b2lkIHJlZ2lzdGVyVVJM
U2NoZW1lQXNFbXB0eURvY3VtZW50KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcmVnaXN0ZXJV
UkxTY2hlbWVBc1NlY3VyZShjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldERvbWFpblJlbGF4
YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRD
YW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhbHVhdGlvbihib29sKTsKKyAgICB2b2lkIHJlZ2lz
dGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHJlZ2lzdGVyVVJM
U2NoZW1lQXNOb0FjY2Vzcyhjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHJlZ2lzdGVyVVJMU2No
ZW1lQXNEaXNwbGF5SXNvbGF0ZWQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCByZWdpc3RlclVS
TFNjaGVtZUFzQ09SU0VuYWJsZWQoY29uc3QgU3RyaW5nJik7CisjaWYgRU5BQkxFKENBQ0hFX1BB
UlRJVElPTklORykKKyAgICB2b2lkIHJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVk
KGNvbnN0IFN0cmluZyYpOworI2VuZGlmCisKKyAgICBWaXNpdGVkTGlua1Byb3ZpZGVyJiB2aXNp
dGVkTGlua1Byb3ZpZGVyKCkgeyByZXR1cm4gKm1fdmlzaXRlZExpbmtQcm92aWRlcjsgfQorCisg
ICAgLy8gTWVzc2FnZVJlY2VpdmVyLgorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24qLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qLCBJUEM6
Ok1lc3NhZ2VEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+Jikg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCk7CisgICAgQ2Fj
aGVNb2RlbCBjYWNoZU1vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZU1vZGVsOyB9CisKKyAg
ICB2b2lkIHNldERlZmF1bHRSZXF1ZXN0VGltZW91dEludGVydmFsKGRvdWJsZSk7CisKKyAgICB2
b2lkIHN0YXJ0TWVtb3J5U2FtcGxlcihjb25zdCBkb3VibGUgaW50ZXJ2YWwpOworICAgIHZvaWQg
c3RvcE1lbW9yeVNhbXBsZXIoKTsKKworI2lmIFVTRShTT1VQKQorICAgIHZvaWQgc2V0SW5pdGlh
bEhUVFBDb29raWVBY2NlcHRQb2xpY3koSFRUUENvb2tpZUFjY2VwdFBvbGljeSBwb2xpY3kpIHsg
bV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeSA9IHBvbGljeTsgfQorI2VuZGlmCisgICAg
dm9pZCBzZXRFbmhhbmNlZEFjY2Vzc2liaWxpdHkoYm9vbCk7CisgICAgCisgICAgLy8gRG93bmxv
YWRzLgorICAgIERvd25sb2FkUHJveHkqIGNyZWF0ZURvd25sb2FkUHJveHkoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgQVBJOjpEb3dubG9hZENsaWVudCYgZG93bmxvYWRD
bGllbnQoKSB7IHJldHVybiAqbV9kb3dubG9hZENsaWVudDsgfQorCisgICAgQVBJOjpMZWdhY3lD
b250ZXh0SGlzdG9yeUNsaWVudCYgaGlzdG9yeUNsaWVudCgpIHsgcmV0dXJuICptX2hpc3RvcnlD
bGllbnQ7IH0KKyAgICBXZWJDb250ZXh0Q2xpZW50JiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVu
dDsgfQorCisgICAgV2ViSWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UoKSBjb25zdCB7IHJldHVy
biBtX2ljb25EYXRhYmFzZS5nZXQoKTsgfQorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQorICAgIFdlYlBsdWdpblNpdGVEYXRhTWFuYWdlciogcGx1Z2luU2l0ZURhdGFNYW5hZ2VyKCkg
Y29uc3QgeyByZXR1cm4gbV9wbHVnaW5TaXRlRGF0YU1hbmFnZXIuZ2V0KCk7IH0KKyNlbmRpZgor
CisgICAgc3RydWN0IFN0YXRpc3RpY3MgeworICAgICAgICB1bnNpZ25lZCB3a1ZpZXdDb3VudDsK
KyAgICAgICAgdW5zaWduZWQgd2tQYWdlQ291bnQ7CisgICAgICAgIHVuc2lnbmVkIHdrRnJhbWVD
b3VudDsKKyAgICB9OworICAgIHN0YXRpYyBTdGF0aXN0aWNzJiBzdGF0aXN0aWNzKCk7ICAgIAor
CisgICAgdm9pZCBzZXRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGly
KSB7IG1fb3ZlcnJpZGVBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5ID0gZGlyOyB9CisgICAgdm9p
ZCBzZXRJY29uRGF0YWJhc2VQYXRoKGNvbnN0IFN0cmluZyYpOworICAgIFN0cmluZyBpY29uRGF0
YWJhc2VQYXRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXREaXNrQ2FjaGVEaXJlY3RvcnkoY29uc3Qg
U3RyaW5nJiBkaXIpIHsgbV9vdmVycmlkZURpc2tDYWNoZURpcmVjdG9yeSA9IGRpcjsgfQorICAg
IHZvaWQgc2V0Q29va2llU3RvcmFnZURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGRpcikgeyBtX292
ZXJyaWRlQ29va2llU3RvcmFnZURpcmVjdG9yeSA9IGRpcjsgfQorCisgICAgdm9pZCB1c2VUZXN0
aW5nTmV0d29ya1Nlc3Npb24oKTsKKworICAgIHZvaWQgYWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlm
aWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNlcnRpZmljYXRlSW5mbyosIGNvbnN0IFN0cmluZyYgaG9z
dCk7CisKKyAgICBXZWJQcm9jZXNzUHJveHkmIGVuc3VyZVNoYXJlZFdlYlByb2Nlc3MoKTsKKyAg
ICBXZWJQcm9jZXNzUHJveHkmIGNyZWF0ZU5ld1dlYlByb2Nlc3NSZXNwZWN0aW5nUHJvY2Vzc0Nv
dW50TGltaXQoKTsgLy8gV2lsbCByZXR1cm4gYW4gZXhpc3Rpbmcgb25lIGlmIGxpbWl0IGlzIG1l
dC4KKyAgICB2b2lkIHdhcm1Jbml0aWFsUHJvY2VzcygpOworCisgICAgYm9vbCBzaG91bGRUZXJt
aW5hdGUoV2ViUHJvY2Vzc1Byb3h5Kik7CisKKyAgICB2b2lkIGRpc2FibGVQcm9jZXNzVGVybWlu
YXRpb24oKSB7IG1fcHJvY2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZCA9IGZhbHNlOyB9CisgICAgdm9p
ZCBlbmFibGVQcm9jZXNzVGVybWluYXRpb24oKTsKKworICAgIC8vIERlZmF1bHRzIHRvIGZhbHNl
LgorICAgIHZvaWQgc2V0SFRUUFBpcGVsaW5pbmdFbmFibGVkKGJvb2wpOworICAgIGJvb2wgaHR0
cFBpcGVsaW5pbmdFbmFibGVkKCkgY29uc3Q7CisKKyAgICB2b2lkIGdldFN0YXRpc3RpY3ModWlu
dDMyX3Qgc3RhdGlzdGljc01hc2ssIHN0ZDo6ZnVuY3Rpb248dm9pZCAoSW1tdXRhYmxlRGljdGlv
bmFyeSosIENhbGxiYWNrQmFzZTo6RXJyb3IpPik7CisgICAgCisgICAgdm9pZCBnYXJiYWdlQ29s
bGVjdEphdmFTY3JpcHRPYmplY3RzKCk7CisgICAgdm9pZCBzZXRKYXZhU2NyaXB0R2FyYmFnZUNv
bGxlY3RvclRpbWVyRW5hYmxlZChib29sIGZsYWcpOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgc3RhdGljIGJvb2wgb21pdFBERlN1cHBvcnQoKTsKKyNlbmRpZgorCisgICAgdm9pZCBmdWxs
S2V5Ym9hcmRBY2Nlc3NNb2RlQ2hhbmdlZChib29sIGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQp
OworCisgICAgdm9pZCB0ZXh0Q2hlY2tlclN0YXRlQ2hhbmdlZCgpOworCisgICAgUGFzc1JlZlB0
cjxJbW11dGFibGVEaWN0aW9uYXJ5PiBwbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKSBjb25z
dDsKKyAgICB2b2lkIHNldFBsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2hlcyhJbW11dGFibGVEaWN0
aW9uYXJ5Jik7CisgICAgdm9pZCBzZXRQbHVnSW5BdXRvU3RhcnRPcmlnaW5zKEFQSTo6QXJyYXkm
KTsKKyAgICB2b2lkIHNldFBsdWdJbkF1dG9TdGFydE9yaWdpbnNGaWx0ZXJpbmdPdXRFbnRyaWVz
QWRkZWRBZnRlclRpbWUoSW1tdXRhYmxlRGljdGlvbmFyeSYsIGRvdWJsZSB0aW1lKTsKKworICAg
IC8vIE5ldHdvcmsgUHJvY2VzcyBNYW5hZ2VtZW50CisKKyAgICB2b2lkIHNldFVzZXNOZXR3b3Jr
UHJvY2Vzcyhib29sKTsKKyAgICBib29sIHVzZXNOZXR3b3JrUHJvY2VzcygpIGNvbnN0OworCisj
aWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICB2b2lkIGVuc3VyZU5ldHdvcmtQcm9jZXNz
KCk7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eSogbmV0d29ya1Byb2Nlc3MoKSB7IHJldHVybiBt
X25ldHdvcmtQcm9jZXNzLmdldCgpOyB9CisgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNoZWQo
TmV0d29ya1Byb2Nlc3NQcm94eSopOworCisgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc0Nvbm5l
Y3Rpb24oUGFzc1JlZlB0cjxNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXROZXR3b3JrUHJv
Y2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseT4pOworI2VuZGlmCisKKyNpZiBFTkFCTEUoREFU
QUJBU0VfUFJPQ0VTUykKKyAgICB2b2lkIGVuc3VyZURhdGFiYXNlUHJvY2VzcygpOworICAgIHZv
aWQgZ2V0RGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbihQYXNzUmVmUHRyPE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzUHJveHk6OkdldERhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseT4p
OworICAgIHZvaWQgZGF0YWJhc2VQcm9jZXNzQ3Jhc2hlZChEYXRhYmFzZVByb2Nlc3NQcm94eSop
OworI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29sIHByb2Nlc3NTdXBwcmVz
c2lvbkVuYWJsZWQoKSBjb25zdDsKKyNlbmRpZgorCisgICAgdm9pZCB3aW5kb3dTZXJ2ZXJDb25u
ZWN0aW9uU3RhdGVDaGFuZ2VkKCk7CisKKyAgICBzdGF0aWMgdm9pZCB3aWxsU3RhcnRVc2luZ1By
aXZhdGVCcm93c2luZygpOworICAgIHN0YXRpYyB2b2lkIHdpbGxTdG9wVXNpbmdQcml2YXRlQnJv
d3NpbmcoKTsKKworICAgIHN0YXRpYyBib29sIGlzRXBoZW1lcmFsU2Vzc2lvbihXZWJDb3JlOjpT
ZXNzaW9uSUQpOworCisjaWYgVVNFKFNPVVApCisgICAgdm9pZCBzZXRJZ25vcmVUTFNFcnJvcnMo
Ym9vbCk7CisgICAgYm9vbCBpZ25vcmVUTFNFcnJvcnMoKSBjb25zdCB7IHJldHVybiBtX2lnbm9y
ZVRMU0Vycm9yczsgfQorI2VuZGlmCisKKyAgICBzdGF0aWMgdm9pZCBzZXRJbnZhbGlkTWVzc2Fn
ZUNhbGxiYWNrKHZvaWQgKCopKFdLU3RyaW5nUmVmKSk7CisgICAgc3RhdGljIHZvaWQgZGlkUmVj
ZWl2ZUludmFsaWRNZXNzYWdlKGNvbnN0IElQQzo6U3RyaW5nUmVmZXJlbmNlJiBtZXNzYWdlUmVj
ZWl2ZXJOYW1lLCBjb25zdCBJUEM6OlN0cmluZ1JlZmVyZW5jZSYgbWVzc2FnZU5hbWUpOworCisg
ICAgdm9pZCBwcm9jZXNzRGlkQ2FjaGVQYWdlKFdlYlByb2Nlc3NQcm94eSopOworCisgICAgYm9v
bCBpc1VSTEtub3duSFNUU0hvc3QoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGJvb2wgcHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCkgY29uc3Q7CisgICAgdm9pZCByZXNldEhTVFNIb3N0cygpOworCisg
ICAgdm9pZCByZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYpOwor
ICAgIHZvaWQgdW5yZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYp
OworCisgICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiYgZ2xvYmFsVVJMU2NoZW1lc1dpdGhDdXN0
b21Qcm90b2NvbEhhbmRsZXJzKCk7CisgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJHbG9iYWxVUkxT
Y2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3QgU3RyaW5nJik7CisgICAg
c3RhdGljIHZvaWQgdW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVtZUFzSGF2aW5nQ3VzdG9tUHJvdG9j
b2xIYW5kbGVycyhjb25zdCBTdHJpbmcmKTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZv
aWQgdXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKTsKKworICAgIE5TTXV0YWJsZURpY3Rp
b25hcnkgKmVuc3VyZUJ1bmRsZVBhcmFtZXRlcnMoKTsKKyAgICBOU011dGFibGVEaWN0aW9uYXJ5
ICpidW5kbGVQYXJhbWV0ZXJzKCkgeyByZXR1cm4gbV9idW5kbGVQYXJhbWV0ZXJzLmdldCgpOyB9
CisjZWxzZQorICAgIHZvaWQgdXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKSBjb25zdCB7
IH0KKyNlbmRpZgorCisgICAgdm9pZCBzZXRNZW1vcnlDYWNoZURpc2FibGVkKGJvb2wpOworCisg
ICAgVXNlck9ic2VydmFibGVQYWdlVG9rZW4gdXNlck9ic2VydmFibGVQYWdlQ291bnQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdXNlck9ic2VydmFibGVQYWdlQ291bnRlci50b2tlbjxVc2Vy
T2JzZXJ2YWJsZVBhZ2VUb2tlblR5cGU+KCk7CisgICAgfQorCisgICAgUHJvY2Vzc1N1cHByZXNz
aW9uRGlzYWJsZWRUb2tlbiBwcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudCgp
CisgICAgeworICAgICAgICByZXR1cm4gbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBh
Z2VDb3VudGVyLnRva2VuPFByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW5UeXBlPigpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOworCisgICAg
dm9pZCBwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMmKTsKKyAgICB2b2lkIHBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKTsKKworICAgIFdl
YlByb2Nlc3NQcm94eSYgY3JlYXRlTmV3V2ViUHJvY2VzcygpOworCisgICAgdm9pZCByZXF1ZXN0
V2ViQ29udGVudFN0YXRpc3RpY3MoU3RhdGlzdGljc1JlcXVlc3QqKTsKKyAgICB2b2lkIHJlcXVl
c3ROZXR3b3JraW5nU3RhdGlzdGljcyhTdGF0aXN0aWNzUmVxdWVzdCopOworCisjaWYgRU5BQkxF
KE5FVFdPUktfUFJPQ0VTUykKKyAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CisjZW5kaWYKKworI2lmIFBM
QVRGT1JNKElPUykKKyAgICB2b2lkIHdyaXRlV2ViQ29udGVudFRvUGFzdGVib2FyZChjb25zdCBX
ZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCYpOworICAgIHZvaWQgd3JpdGVJbWFnZVRvUGFz
dGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UmKTsKKyAgICB2b2lkIHdyaXRl
U3RyaW5nVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0
cmluZyYpOworICAgIHZvaWQgcmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBXVEY6OlN0cmluZyYpOworICAgIHZvaWQg
cmVhZFVSTEZyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmRUeXBlLCBTdHJpbmcmKTsKKyAgICB2b2lkIHJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZCh1
aW50NjRfdCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgU2hhcmVkTWVtb3J5
OjpIYW5kbGUmLCB1aW50NjRfdCYgc2l6ZSk7CisgICAgdm9pZCBnZXRQYXN0ZWJvYXJkSXRlbXND
b3VudCh1aW50NjRfdCYgaXRlbXNDb3VudCk7CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkK
KyAgICB2b2lkIGdldFBhc3RlYm9hcmRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzKTsKKyAgICB2b2lkIGdldFBhc3RlYm9h
cmRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZFR5cGUsIFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMpOworICAgIHZv
aWQgZ2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgU3RyaW5nJik7CisgICAgdm9pZCBnZXRQ
YXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYsIHVpbnQ2NF90
JiBzaXplKTsKKyAgICB2b2lkIHBhc3RlYm9hcmRDb3B5KGNvbnN0IFN0cmluZyYgZnJvbVBhc3Rl
Ym9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291
bnQpOworICAgIHZvaWQgZ2V0UGFzdGVib2FyZENoYW5nZUNvdW50KGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIHVpbnQ2NF90JiBjaGFuZ2VDb3VudCk7CisgICAgdm9pZCBnZXRQYXN0ZWJv
YXJkVW5pcXVlTmFtZShTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKKyAgICB2b2lkIGdldFBhc3Rl
Ym9hcmRDb2xvcihjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBXZWJDb3JlOjpDb2xvciYp
OworICAgIHZvaWQgZ2V0UGFzdGVib2FyZFVSTChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
LCBXVEY6OlN0cmluZyYpOworICAgIHZvaWQgYWRkUGFzdGVib2FyZFR5cGVzKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMs
IHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCk7CisgICAgdm9pZCBzZXRQYXN0ZWJvYXJkVHlwZXMo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3Rl
Ym9hcmRUeXBlcywgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KTsKKyAgICB2b2lkIHNldFBhc3Rl
Ym9hcmRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMs
IHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCk7CisgICAgdm9pZCBzZXRQYXN0ZWJvYXJkU3RyaW5n
Rm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmRUeXBlLCBjb25zdCBTdHJpbmcmLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpOworICAg
IHZvaWQgc2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpI
YW5kbGUmLCB1aW50NjRfdCBzaXplLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpOworI2VuZGlm
CisKKyNpZiAhUExBVEZPUk0oQ09DT0EpCisgICAgLy8gRklYTUU6IFRoaXMgYSBkdW1teSBtZXNz
YWdlLCB0byBhdm9pZCBicmVha2luZyB0aGUgYnVpbGQgZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0
IHJlcXVpcmUKKyAgICAvLyBhbnkgc3luY2hyb25vdXMgbWVzc2FnZXMsIGFuZCBzaG91bGQgYmUg
cmVtb3ZlZCB3aGVuIDxyZGFyOi8vcHJvYmxlbS84Nzc1MTE1PiBpcyBmaXhlZC4KKyAgICB2b2lk
IGR1bW15KGJvb2wmKTsKKyNlbmRpZgorCisgICAgdm9pZCBkaWRHZXRTdGF0aXN0aWNzKGNvbnN0
IFN0YXRpc3RpY3NEYXRhJiwgdWludDY0X3QgY2FsbGJhY2tJRCk7CisKKyAgICAvLyBJbXBsZW1l
bnRlZCBpbiBnZW5lcmF0ZWQgV2ViQ29udGV4dE1lc3NhZ2VSZWNlaXZlci5jcHAKKyAgICB2b2lk
IGRpZFJlY2VpdmVXZWJDb250ZXh0TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qLCBJUEM6Ok1lc3Nh
Z2VEZWNvZGVyJik7CisgICAgdm9pZCBkaWRSZWNlaXZlU3luY1dlYkNvbnRleHRNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiosIElQQzo6TWVzc2FnZURlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBD
OjpNZXNzYWdlRW5jb2Rlcj4mKTsKKworICAgIHN0YXRpYyB2b2lkIGxhbmd1YWdlQ2hhbmdlZCh2
b2lkKiBjb250ZXh0KTsKKyAgICB2b2lkIGxhbmd1YWdlQ2hhbmdlZCgpOworCisgICAgU3RyaW5n
IGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoKSBjb25zdDsKKyAgICBTdHJpbmcgcGxhdGZvcm1E
ZWZhdWx0QXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgpIGNvbnN0OworCisgICAgU3RyaW5nIHBs
YXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgoKSBjb25zdDsKKworICAgIHN0YXRpYyBTdHJp
bmcgcGxhdGZvcm1EZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgc3RhdGljIFN0
cmluZyBwbGF0Zm9ybURlZmF1bHRJbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeSgpOworICAgIHN0
YXRpYyBTdHJpbmcgcGxhdGZvcm1EZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoKTsKKyAg
ICBzdGF0aWMgU3RyaW5nIHBsYXRmb3JtRGVmYXVsdE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnko
KTsKKworICAgIFN0cmluZyBkaXNrQ2FjaGVEaXJlY3RvcnkoKSBjb25zdDsKKyAgICBTdHJpbmcg
cGxhdGZvcm1EZWZhdWx0RGlza0NhY2hlRGlyZWN0b3J5KCkgY29uc3Q7CisKKyAgICBTdHJpbmcg
Y29va2llU3RvcmFnZURpcmVjdG9yeSgpIGNvbnN0OworICAgIFN0cmluZyBwbGF0Zm9ybURlZmF1
bHRDb29raWVTdG9yYWdlRGlyZWN0b3J5KCkgY29uc3Q7CisKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgU3RyaW5nIG9wZW5HTENhY2hlRGlyZWN0b3J5KCkgY29uc3Q7CisgICAgU3RyaW5nIHBhcmVu
dEJ1bmRsZURpcmVjdG9yeSgpIGNvbnN0OworICAgIFN0cmluZyBuZXR3b3JraW5nSFNUU0RhdGFi
YXNlUGF0aCgpIGNvbnN0OworICAgIFN0cmluZyB3ZWJDb250ZW50SFNUU0RhdGFiYXNlUGF0aCgp
IGNvbnN0OworICAgIFN0cmluZyBjb250YWluZXJUZW1wb3JhcnlEaXJlY3RvcnkoKSBjb25zdDsK
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgdm9pZCByZWdpc3Rlck5vdGlmaWNh
dGlvbk9ic2VydmVycygpOworICAgIHZvaWQgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVy
cygpOworI2VuZGlmCisKKyAgICB2b2lkIGFkZFBsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2goY29u
c3QgU3RyaW5nJiBwYWdlT3JpZ2luLCB1bnNpZ25lZCBwbHVnSW5PcmlnaW5IYXNoLCBXZWJDb3Jl
OjpTZXNzaW9uSUQpOworICAgIHZvaWQgcGx1Z0luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbih1
bnNpZ25lZCBwbHVnSW5PcmlnaW5IYXNoLCBXZWJDb3JlOjpTZXNzaW9uSUQpOworCisgICAgdm9p
ZCBzZXRBbnlQYWdlR3JvdXBNaWdodEhhdmVQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wpOwor
CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgLy8gUGx1Z2luSW5mb1N0b3Jl
Q2xpZW50OgorICAgIHZpcnR1YWwgdm9pZCBwbHVnaW5JbmZvU3RvcmVEaWRMb2FkUGx1Z2lucyhQ
bHVnaW5JbmZvU3RvcmUqKSBvdmVycmlkZTsKKyNlbmRpZgorCisgICAgSVBDOjpNZXNzYWdlUmVj
ZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CisKKyAgICBQcm9jZXNzTW9kZWwgbV9wcm9j
ZXNzTW9kZWw7CisgICAgdW5zaWduZWQgbV93ZWJQcm9jZXNzQ291bnRMaW1pdDsgLy8gVGhlIGxp
bWl0IGhhcyBubyBlZmZlY3Qgd2hlbiBwcm9jZXNzIG1vZGVsIGlzIFByb2Nlc3NNb2RlbFNoYXJl
ZFNlY29uZGFyeVByb2Nlc3MuCisgICAgCisgICAgVmVjdG9yPFJlZlB0cjxXZWJQcm9jZXNzUHJv
eHk+PiBtX3Byb2Nlc3NlczsKKyAgICBib29sIG1faGF2ZUluaXRpYWxFbXB0eVByb2Nlc3M7CisK
KyAgICBXZWJQcm9jZXNzUHJveHkqIG1fcHJvY2Vzc1dpdGhQYWdlQ2FjaGU7CisKKyAgICBSZWY8
V2ViUGFnZUdyb3VwPiBtX2RlZmF1bHRQYWdlR3JvdXA7CisKKyAgICBSZWZQdHI8QVBJOjpPYmpl
Y3Q+IG1faW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhOworICAgIFN0cmluZyBt
X2luamVjdGVkQnVuZGxlUGF0aDsKKyAgICBXZWJDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQg
bV9pbmplY3RlZEJ1bmRsZUNsaWVudDsKKworICAgIFdlYkNvbnRleHRDbGllbnQgbV9jbGllbnQ7
CisgICAgV2ViQ29udGV4dENvbm5lY3Rpb25DbGllbnQgbV9jb25uZWN0aW9uQ2xpZW50OworICAg
IHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkRvd25sb2FkQ2xpZW50PiBtX2Rvd25sb2FkQ2xpZW50Owor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiBtX2hp
c3RvcnlDbGllbnQ7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBQbHVn
aW5JbmZvU3RvcmUgbV9wbHVnaW5JbmZvU3RvcmU7CisjZW5kaWYKKyAgICBSZWZQdHI8VmlzaXRl
ZExpbmtQcm92aWRlcj4gbV92aXNpdGVkTGlua1Byb3ZpZGVyOworICAgIGJvb2wgbV92aXNpdGVk
TGlua3NQb3B1bGF0ZWQ7CisKKyAgICBQbHVnSW5BdXRvU3RhcnRQcm92aWRlciBtX3BsdWdJbkF1
dG9TdGFydFByb3ZpZGVyOworICAgICAgICAKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9zY2hlbWVz
VG9SZWdpc3RlckFzRW1wdHlEb2N1bWVudDsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9zY2hlbWVz
VG9SZWdpc3RlckFzU2VjdXJlOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3NjaGVtZXNUb1NldERv
bWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3I7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fc2NoZW1l
c1RvUmVnaXN0ZXJBc0xvY2FsOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3NjaGVtZXNUb1JlZ2lz
dGVyQXNOb0FjY2VzczsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9zY2hlbWVzVG9SZWdpc3RlckFz
RGlzcGxheUlzb2xhdGVkOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3NjaGVtZXNUb1JlZ2lzdGVy
QXNDT1JTRW5hYmxlZDsKKyNpZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQorICAgIEhhc2hT
ZXQ8U3RyaW5nPiBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNDYWNoZVBhcnRpdGlvbmVkOworI2VuZGlm
CisKKyAgICBib29sIG1fYWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGg7CisgICAgYm9vbCBt
X3Nob3VsZFVzZUZvbnRTbW9vdGhpbmc7CisKKyAgICAvLyBNZXNzYWdlcyB0aGF0IHdlcmUgcG9z
dGVkIGJlZm9yZSBhbnkgcGFnZXMgd2VyZSBjcmVhdGVkLgorICAgIC8vIFRoZSBjbGllbnQgc2hv
dWxkIHVzZSBpbml0aWFsaXphdGlvbiBtZXNzYWdlcyBpbnN0ZWFkLCBzbyB0aGF0IGEgcmVzdGFy
dGVkIHByb2Nlc3Mgd291bGQgZ2V0IHRoZSBzYW1lIHN0YXRlLgorICAgIFZlY3RvcjxzdGQ6OnBh
aXI8U3RyaW5nLCBSZWZQdHI8QVBJOjpPYmplY3Q+Pj4gbV9tZXNzYWdlc1RvSW5qZWN0ZWRCdW5k
bGVQb3N0ZWRUb0VtcHR5Q29udGV4dDsKKworICAgIENhY2hlTW9kZWwgbV9jYWNoZU1vZGVsOwor
CisgICAgYm9vbCBtX21lbW9yeVNhbXBsZXJFbmFibGVkOworICAgIGRvdWJsZSBtX21lbW9yeVNh
bXBsZXJJbnRlcnZhbDsKKworICAgIFJlZlB0cjxXZWJJY29uRGF0YWJhc2U+IG1faWNvbkRhdGFi
YXNlOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIFJlZlB0cjxXZWJQbHVn
aW5TaXRlRGF0YU1hbmFnZXI+IG1fcGx1Z2luU2l0ZURhdGFNYW5hZ2VyOworI2VuZGlmCisKKyAg
ICBSZWZQdHI8V2Vic2l0ZURhdGFTdG9yZT4gbV93ZWJzaXRlRGF0YVN0b3JlOworICAgIFJlZlB0
cjxTdG9yYWdlTWFuYWdlcj4gbV9zdG9yYWdlTWFuYWdlcjsKKworICAgIHR5cGVkZWYgSGFzaE1h
cDxjb25zdCBjaGFyKiwgUmVmUHRyPFdlYkNvbnRleHRTdXBwbGVtZW50PiwgUHRySGFzaDxjb25z
dCBjaGFyKj4+IFdlYkNvbnRleHRTdXBwbGVtZW50TWFwOworICAgIFdlYkNvbnRleHRTdXBwbGVt
ZW50TWFwIG1fc3VwcGxlbWVudHM7CisKKyNpZiBVU0UoU09VUCkKKyAgICBIVFRQQ29va2llQWNj
ZXB0UG9saWN5IG1faW5pdGlhbEhUVFBDb29raWVBY2NlcHRQb2xpY3k7CisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKE1BQykKKyAgICBSZXRhaW5QdHI8TlNPYmplY3Q+IG1fZW5oYW5jZWRBY2Nlc3Np
YmlsaXR5T2JzZXJ2ZXI7CisgICAgUmV0YWluUHRyPE5TT2JqZWN0PiBtX2F1dG9tYXRpY1RleHRS
ZXBsYWNlbWVudE5vdGlmaWNhdGlvbk9ic2VydmVyOworICAgIFJldGFpblB0cjxOU09iamVjdD4g
bV9hdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25Ob3RpZmljYXRpb25PYnNlcnZlcjsKKyNpZiBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyAgICBSZXRhaW5QdHI8TlNP
YmplY3Q+IG1fYXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25Ob3RpZmljYXRpb25PYnNlcnZlcjsK
KyAgICBSZXRhaW5QdHI8TlNPYmplY3Q+IG1fYXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbk5vdGlm
aWNhdGlvbk9ic2VydmVyOworI2VuZGlmCisjZW5kaWYKKworICAgIFN0cmluZyBtX292ZXJyaWRl
QXBwbGljYXRpb25DYWNoZURpcmVjdG9yeTsKKyAgICBTdHJpbmcgbV9vdmVycmlkZUljb25EYXRh
YmFzZVBhdGg7CisgICAgU3RyaW5nIG1fb3ZlcnJpZGVEaXNrQ2FjaGVEaXJlY3Rvcnk7CisgICAg
U3RyaW5nIG1fb3ZlcnJpZGVDb29raWVTdG9yYWdlRGlyZWN0b3J5OworCisgICAgU3RyaW5nIG1f
d2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnk7CisgICAgU3RyaW5nIG1faW5kZXhlZERCRGF0YWJhc2VE
aXJlY3Rvcnk7CisgICAgU3RyaW5nIG1fbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeTsKKworICAg
IGJvb2wgbV9zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nlc3Npb247CisKKyAgICBib29sIG1fcHJv
Y2Vzc1Rlcm1pbmF0aW9uRW5hYmxlZDsKKworI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCisg
ICAgYm9vbCBtX2NhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uOworICAgIGJvb2wg
bV91c2VzTmV0d29ya1Byb2Nlc3M7CisgICAgUmVmUHRyPE5ldHdvcmtQcm9jZXNzUHJveHk+IG1f
bmV0d29ya1Byb2Nlc3M7CisjZW5kaWYKKworI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQor
ICAgIFJlZlB0cjxEYXRhYmFzZVByb2Nlc3NQcm94eT4gbV9kYXRhYmFzZVByb2Nlc3M7CisjZW5k
aWYKKyAgICAKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8RGljdGlvbmFyeUNhbGxiYWNr
Pj4gbV9kaWN0aW9uYXJ5Q2FsbGJhY2tzOworICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxT
dGF0aXN0aWNzUmVxdWVzdD4+IG1fc3RhdGlzdGljc1JlcXVlc3RzOworCisjaWYgVVNFKFNPVVAp
CisgICAgYm9vbCBtX2lnbm9yZVRMU0Vycm9yczsKKyNlbmRpZgorCisgICAgYm9vbCBtX21lbW9y
eUNhY2hlRGlzYWJsZWQ7CisKKyAgICBSZWZDb3VudGVyIG1fdXNlck9ic2VydmFibGVQYWdlQ291
bnRlcjsKKyAgICBSZWZDb3VudGVyIG1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdl
Q291bnRlcjsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFJldGFpblB0cjxOU011dGFibGVE
aWN0aW9uYXJ5PiBtX2J1bmRsZVBhcmFtZXRlcnM7CisgICAgUHJvY2Vzc1N1cHByZXNzaW9uRGlz
YWJsZWRUb2tlbiBtX3BsdWdpblByb2Nlc3NNYW5hZ2VyUHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJs
ZWRUb2tlbjsKKyNlbmRpZgorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgV2ViQ29u
dGV4dDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCit7CisgICAgc3dpdGNo
IChtX3Byb2Nlc3NNb2RlbCkgeworICAgIGNhc2UgUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5
UHJvY2VzczoKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorICAgICAgICBpZiAobV91c2Vz
TmV0d29ya1Byb2Nlc3MpIHsKKyAgICAgICAgICAgIGlmIChtX25ldHdvcmtQcm9jZXNzICYmIG1f
bmV0d29ya1Byb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCisgICAgICAgICAgICAgICAgbV9uZXR3
b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgaWYgKCFtX3Byb2Nlc3Nlcy5p
c0VtcHR5KCkgJiYgbV9wcm9jZXNzZXNbMF0tPmNhblNlbmRNZXNzYWdlKCkpCisgICAgICAgICAg
ICBtX3Byb2Nlc3Nlc1swXS0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBQcm9jZXNzTW9kZWxNdWx0aXBsZVNlY29uZGFyeVByb2Nl
c3NlczoKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorICAgICAgICBpZiAobV9uZXR3b3Jr
UHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5TZW5kTWVzc2FnZSgpKQorICAgICAgICAg
ICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwor
ICAgICAgICByZXR1cm47CisjZWxzZQorICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQg
V2ViQ29udGV4dDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5
KFQmJiBtZXNzYWdlKQoreworICAgIHN3aXRjaCAobV9wcm9jZXNzTW9kZWwpIHsKKyAgICBjYXNl
IFByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3M6CisjaWYgRU5BQkxFKE5FVFdPUktf
UFJPQ0VTUykKKyAgICAgICAgaWYgKG1fdXNlc05ldHdvcmtQcm9jZXNzKSB7CisgICAgICAgICAg
ICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+
c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgZW5zdXJlU2hhcmVkV2ViUHJvY2VzcygpOworICAg
ICAgICBtX3Byb2Nlc3Nlc1swXS0+c2VuZChzdGQ6OmZvcndhcmQ8VD4obWVzc2FnZSksIDApOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm9jZXNzTW9kZWxNdWx0aXBsZVNlY29uZGFyeVBy
b2Nlc3NlczoKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorICAgICAgICBlbnN1cmVOZXR3
b3JrUHJvY2VzcygpOworICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kKHN0ZDo6Zm9yd2Fy
ZDxUPihtZXNzYWdlKSwgMCk7CisgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgICAgIGJyZWFr
OworI2VuZGlmCisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgordm9pZCBXZWJDb250ZXh0OjpzZW5kVG9EYXRhYmFzZVByb2Nlc3NSZWxh
dW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKQoreworI2lmIEVOQUJMRShEQVRBQkFTRV9Q
Uk9DRVNTKQorICAgIGVuc3VyZURhdGFiYXNlUHJvY2VzcygpOworICAgIG1fZGF0YWJhc2VQcm9j
ZXNzLT5zZW5kKHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CisjZWxzZQorICAgIHNlbmRU
b0FsbFByb2Nlc3Nlc1JlbGF1bmNoaW5nVGhlbUlmTmVjZXNzYXJ5KHN0ZDo6Zm9yd2FyZDxUPiht
ZXNzYWdlKSk7CisjZW5kaWYKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgV2ViQ29u
dGV4dDo6c2VuZFRvQWxsUHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3NhZ2UpCit7CisgICAgc2l6ZV90
IHByb2Nlc3NDb3VudCA9IG1fcHJvY2Vzc2VzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHByb2Nlc3NDb3VudDsgKytpKSB7CisgICAgICAgIFdlYlByb2Nlc3NQcm94eSogcHJv
Y2VzcyA9IG1fcHJvY2Vzc2VzW2ldLmdldCgpOworICAgICAgICBpZiAocHJvY2Vzcy0+Y2FuU2Vu
ZE1lc3NhZ2UoKSkKKyAgICAgICAgICAgIHByb2Nlc3MtPnNlbmQoVChtZXNzYWdlKSwgMCk7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBXZWJDb250ZXh0OjpzZW5kVG9B
bGxQcm9jZXNzZXNSZWxhdW5jaGluZ1RoZW1JZk5lY2Vzc2FyeShjb25zdCBUJiBtZXNzYWdlKQor
eworLy8gRklYTUUgKE11bHRpLVdlYlByb2Nlc3MpOiBXZWJDb250ZXh0IGRvZXNuJ3QgdHJhY2sg
cHJvY2Vzc2VzIHRoYXQgaGF2ZSBleGl0ZWQsIHNvIGl0IGNhbm5vdCByZWxhdW5jaCB0aGVzZS4g
UGVyaGFwcyB0aGlzIGZ1bmN0aW9uYWxpdHkgd29uJ3QgYmUgbmVlZGVkIGluIHRoaXMgbW9kZS4K
KyAgICBpZiAobV9wcm9jZXNzTW9kZWwgPT0gUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJv
Y2VzcykKKyAgICAgICAgZW5zdXJlU2hhcmVkV2ViUHJvY2VzcygpOworICAgIHNlbmRUb0FsbFBy
b2Nlc3NlcyhtZXNzYWdlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgV2ViQ29u
dGV4dDo6c2VuZFRvT25lUHJvY2VzcyhUJiYgbWVzc2FnZSkKK3sKKyAgICBpZiAobV9wcm9jZXNz
TW9kZWwgPT0gUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2VzcykKKyAgICAgICAgZW5z
dXJlU2hhcmVkV2ViUHJvY2VzcygpOworCisgICAgYm9vbCBtZXNzYWdlU2VudCA9IGZhbHNlOwor
ICAgIHNpemVfdCBwcm9jZXNzQ291bnQgPSBtX3Byb2Nlc3Nlcy5zaXplKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwcm9jZXNzQ291bnQ7ICsraSkgeworICAgICAgICBXZWJQcm9jZXNz
UHJveHkqIHByb2Nlc3MgPSBtX3Byb2Nlc3Nlc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKHByb2Nl
c3MtPmNhblNlbmRNZXNzYWdlKCkpIHsKKyAgICAgICAgICAgIHByb2Nlc3MtPnNlbmQoc3RkOjpm
b3J3YXJkPFQ+KG1lc3NhZ2UpLCAwKTsKKyAgICAgICAgICAgIG1lc3NhZ2VTZW50ID0gdHJ1ZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFtZXNzYWdl
U2VudCAmJiBtX3Byb2Nlc3NNb2RlbCA9PSBQcm9jZXNzTW9kZWxNdWx0aXBsZVNlY29uZGFyeVBy
b2Nlc3NlcykgeworICAgICAgICB3YXJtSW5pdGlhbFByb2Nlc3MoKTsKKyAgICAgICAgUmVmUHRy
PFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzcyA9IG1fcHJvY2Vzc2VzLmxhc3QoKTsKKyAgICAgICAg
aWYgKHByb2Nlc3MtPmNhblNlbmRNZXNzYWdlKCkpCisgICAgICAgICAgICBwcm9jZXNzLT5zZW5k
KHN0ZDo6Zm9yd2FyZDxUPihtZXNzYWdlKSwgMCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkNvbnRleHRfaApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsy
Myw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRl
ZiBXZWJDb250ZXh0X2gKLSNkZWZpbmUgV2ViQ29udGV4dF9oCisjaWZuZGVmIFdlYlByb2Nlc3NQ
b29sX2gKKyNkZWZpbmUgV2ViUHJvY2Vzc1Bvb2xfaAogCiAjaW5jbHVkZSAiQVBJT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiRG93bmxvYWRQcm94eU1hcC5oIgpAQCAtOTcsNyArOTcsNyBAQCBpbnQgd2Vi
UHJvY2Vzc0xhdGVuY3lRT1MoKTsKIGludCB3ZWJQcm9jZXNzVGhyb3VnaHB1dFFPUygpOwogI2Vu
ZGlmCiAKLXN0cnVjdCBXZWJDb250ZXh0Q29uZmlndXJhdGlvbiB7CitzdHJ1Y3QgV2ViUHJvY2Vz
c1Bvb2xDb25maWd1cmF0aW9uIHsKICAgICBTdHJpbmcgaW5qZWN0ZWRCdW5kbGVQYXRoOwogICAg
IFN0cmluZyBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgU3RyaW5nIHdlYlNRTERhdGFiYXNl
RGlyZWN0b3J5OwpAQCAtMTA1LDIwICsxMDUsMjAgQEAgc3RydWN0IFdlYkNvbnRleHRDb25maWd1
cmF0aW9uIHsKICAgICBTdHJpbmcgbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeTsKIH07CiAKLWNs
YXNzIFdlYkNvbnRleHQgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBl
OjpDb250ZXh0PiwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorY2xhc3MgV2ViUHJvY2Vz
c1Bvb2wgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpQcm9jZXNz
UG9vbD4sIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIKICNpZiBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKICAgICAsIHByaXZhdGUgUGx1Z2luSW5mb1N0b3JlQ2xpZW50CiAjZW5kaWYK
ICAgICB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlQbGF0Zm9ybVNwZWNpZmljQ29u
ZmlndXJhdGlvbkRlZmF1bHRzKFdlYkNvbnRleHRDb25maWd1cmF0aW9uJik7CisgICAgc3RhdGlj
IHZvaWQgYXBwbHlQbGF0Zm9ybVNwZWNpZmljQ29uZmlndXJhdGlvbkRlZmF1bHRzKFdlYlByb2Nl
c3NQb29sQ29uZmlndXJhdGlvbiYpOwogCi0gICAgV2ViQ29udGV4dChXZWJDb250ZXh0Q29uZmln
dXJhdGlvbik7CisgICAgV2ViUHJvY2Vzc1Bvb2woV2ViUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9u
KTsKICAgICAgICAgCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ29udGV4dD4gY3JlYXRlKFdl
YkNvbnRleHRDb25maWd1cmF0aW9uKTsKLSAgICB2aXJ0dWFsIH5XZWJDb250ZXh0KCk7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+IGNyZWF0ZShXZWJQcm9jZXNzUG9vbENv
bmZpZ3VyYXRpb24pOworICAgIHZpcnR1YWwgfldlYlByb2Nlc3NQb29sKCk7CiAKLSAgICBzdGF0
aWMgY29uc3QgVmVjdG9yPFdlYkNvbnRleHQqPiYgYWxsQ29udGV4dHMoKTsKKyAgICBzdGF0aWMg
Y29uc3QgVmVjdG9yPFdlYlByb2Nlc3NQb29sKj4mIGFsbFByb2Nlc3NQb29scygpOwogCiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgVCogc3VwcGxlbWVudCgpCkBAIC00MTQsOSArNDE0
LDkgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlkR2V0U3RhdGlzdGljcyhjb25zdCBTdGF0aXN0
aWNzRGF0YSYsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogCi0gICAgLy8gSW1wbGVtZW50ZWQgaW4g
Z2VuZXJhdGVkIFdlYkNvbnRleHRNZXNzYWdlUmVjZWl2ZXIuY3BwCi0gICAgdm9pZCBkaWRSZWNl
aXZlV2ViQ29udGV4dE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiwgSVBDOjpNZXNzYWdlRGVjb2Rl
ciYpOwotICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNXZWJDb250ZXh0TWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24qLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2Fn
ZUVuY29kZXI+Jik7CisgICAgLy8gSW1wbGVtZW50ZWQgaW4gZ2VuZXJhdGVkIFdlYlByb2Nlc3NQ
b29sTWVzc2FnZVJlY2VpdmVyLmNwcAorICAgIHZvaWQgZGlkUmVjZWl2ZVdlYlByb2Nlc3NQb29s
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CisgICAgdm9p
ZCBkaWRSZWNlaXZlU3luY1dlYlByb2Nlc3NQb29sTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qLCBJ
UEM6Ok1lc3NhZ2VEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+
Jik7CiAKICAgICBzdGF0aWMgdm9pZCBsYW5ndWFnZUNoYW5nZWQodm9pZCogY29udGV4dCk7CiAg
ICAgdm9pZCBsYW5ndWFnZUNoYW5nZWQoKTsKQEAgLTU3OSw3ICs1NzksNyBAQCBwcml2YXRlOgog
fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2ViQ29udGV4dDo6c2VuZFRvTmV0d29y
a2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9OZXR3
b3JraW5nUHJvY2VzcyhUJiYgbWVzc2FnZSkKIHsKICAgICBzd2l0Y2ggKG1fcHJvY2Vzc01vZGVs
KSB7CiAgICAgY2FzZSBQcm9jZXNzTW9kZWxTaGFyZWRTZWNvbmRhcnlQcm9jZXNzOgpAQCAtNjA2
LDcgKzYwNiw3IEBAIHZvaWQgV2ViQ29udGV4dDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2ViQ29udGV4dDo6c2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKQordm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KFQm
JiBtZXNzYWdlKQogewogICAgIHN3aXRjaCAobV9wcm9jZXNzTW9kZWwpIHsKICAgICBjYXNlIFBy
b2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3M6CkBAIC02MzMsNyArNjMzLDcgQEAgdm9p
ZCBXZWJDb250ZXh0OjpzZW5kVG9OZXR3b3JraW5nUHJvY2VzcwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotdm9pZCBXZWJDb250ZXh0OjpzZW5kVG9EYXRhYmFzZVByb2Nlc3NSZWxhdW5jaGlu
Z0lmTmVjZXNzYXJ5KFQmJiBtZXNzYWdlKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvRGF0
YWJhc2VQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShUJiYgbWVzc2FnZSkKIHsKICNpZiBF
TkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKICAgICBlbnN1cmVEYXRhYmFzZVByb2Nlc3MoKTsKQEAg
LTY0NCw3ICs2NDQsNyBAQCB2b2lkIFdlYkNvbnRleHQ6OnNlbmRUb0RhdGFiYXNlUHJvY2Vzc1Jl
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYkNvbnRleHQ6OnNlbmRUb0FsbFBy
b2Nlc3Nlcyhjb25zdCBUJiBtZXNzYWdlKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2VuZFRvQWxs
UHJvY2Vzc2VzKGNvbnN0IFQmIG1lc3NhZ2UpCiB7CiAgICAgc2l6ZV90IHByb2Nlc3NDb3VudCA9
IG1fcHJvY2Vzc2VzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2Nlc3ND
b3VudDsgKytpKSB7CkBAIC02NTUsMTYgKzY1NSwxNiBAQCB2b2lkIFdlYkNvbnRleHQ6OnNlbmRU
b0FsbFByb2Nlc3Nlcyhjb25zCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFdlYkNv
bnRleHQ6OnNlbmRUb0FsbFByb2Nlc3Nlc1JlbGF1bmNoaW5nVGhlbUlmTmVjZXNzYXJ5KGNvbnN0
IFQmIG1lc3NhZ2UpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZW5kVG9BbGxQcm9jZXNzZXNSZWxh
dW5jaGluZ1RoZW1JZk5lY2Vzc2FyeShjb25zdCBUJiBtZXNzYWdlKQogewotLy8gRklYTUUgKE11
bHRpLVdlYlByb2Nlc3MpOiBXZWJDb250ZXh0IGRvZXNuJ3QgdHJhY2sgcHJvY2Vzc2VzIHRoYXQg
aGF2ZSBleGl0ZWQsIHNvIGl0IGNhbm5vdCByZWxhdW5jaCB0aGVzZS4gUGVyaGFwcyB0aGlzIGZ1
bmN0aW9uYWxpdHkgd29uJ3QgYmUgbmVlZGVkIGluIHRoaXMgbW9kZS4KKyAgICAvLyBGSVhNRSAo
TXVsdGktV2ViUHJvY2Vzcyk6IFdlYlByb2Nlc3NQb29sIGRvZXNuJ3QgdHJhY2sgcHJvY2Vzc2Vz
IHRoYXQgaGF2ZSBleGl0ZWQsIHNvIGl0IGNhbm5vdCByZWxhdW5jaCB0aGVzZS4gUGVyaGFwcyB0
aGlzIGZ1bmN0aW9uYWxpdHkgd29uJ3QgYmUgbmVlZGVkIGluIHRoaXMgbW9kZS4KICAgICBpZiAo
bV9wcm9jZXNzTW9kZWwgPT0gUHJvY2Vzc01vZGVsU2hhcmVkU2Vjb25kYXJ5UHJvY2VzcykKICAg
ICAgICAgZW5zdXJlU2hhcmVkV2ViUHJvY2VzcygpOwogICAgIHNlbmRUb0FsbFByb2Nlc3Nlcyht
ZXNzYWdlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgV2ViQ29udGV4dDo6c2Vu
ZFRvT25lUHJvY2VzcyhUJiYgbWVzc2FnZSkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmRUb09u
ZVByb2Nlc3MoVCYmIG1lc3NhZ2UpCiB7CiAgICAgaWYgKG1fcHJvY2Vzc01vZGVsID09IFByb2Nl
c3NNb2RlbFNoYXJlZFNlY29uZGFyeVByb2Nlc3MpCiAgICAgICAgIGVuc3VyZVNoYXJlZFdlYlBy
b2Nlc3MoKTsKQEAgLTY5MCw0ICs2OTAsNCBAQCB2b2lkIFdlYkNvbnRleHQ6OnNlbmRUb09uZVBy
b2Nlc3MoVCYmIG1lCiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYgLy8gV2ViQ29u
dGV4dF9oCisjZW5kaWYgLy8gVUlQcm9jZXNzUG9vbF9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAx
Nzc2MzUpCShmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0Lm1lc3NhZ2Vz
LmluOjE3NzYzNSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5t
ZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisjIENvcHlyaWdodCAo
QykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisj
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21lc3NhZ2VzIC0+IFdlYkNvbnRleHQgTGVnYWN5
UmVjZWl2ZXIgeworCisgICAgRGlkR2V0U3RhdGlzdGljcyhzdHJ1Y3QgV2ViS2l0OjpTdGF0aXN0
aWNzRGF0YSBzdGF0aXN0aWNzRGF0YSwgdWludDY0X3QgY2FsbGJhY2tJRCkKKworI2lmIFBMQVRG
T1JNKElPUykKKyAgICBXcml0ZVdlYkNvbnRlbnRUb1Bhc3RlYm9hcmQoc3RydWN0IFdlYkNvcmU6
OlBhc3RlYm9hcmRXZWJDb250ZW50IGNvbnRlbnQpCisgICAgV3JpdGVJbWFnZVRvUGFzdGVib2Fy
ZChzdHJ1Y3QgV2ViQ29yZTo6UGFzdGVib2FyZEltYWdlIHBhc3RlYm9hcmRJbWFnZSkKKyAgICBX
cml0ZVN0cmluZ1RvUGFzdGVib2FyZChTdHJpbmcgcGFzdGVib2FyZFR5cGUsIFN0cmluZyB0ZXh0
KSAKKyAgICBSZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5kZXgsIFN0cmluZyBw
YXN0ZWJvYXJkVHlwZSkgLT4gKFN0cmluZyBzdHJpbmcpCisgICAgUmVhZFVSTEZyb21QYXN0ZWJv
YXJkKHVpbnQ2NF90IGluZGV4LCBTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChTdHJpbmcgc3Ry
aW5nKQorICAgIFJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZCh1aW50NjRfdCBpbmRleCwgU3RyaW5n
IHBhc3RlYm9hcmRUeXBlKSAtPiAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGUs
IHVpbnQ2NF90IHNpemUpCisgICAgR2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKSAtPiAodWludDY0
X3QgaXRlbXNDb3VudCkKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgIyBQYXN0
ZWJvYXJkIG1lc3NhZ2VzLgorICAgIEdldFBhc3RlYm9hcmRUeXBlcyhTdHJpbmcgcGFzdGVib2Fy
ZE5hbWUpIC0+IChWZWN0b3I8U3RyaW5nPiB0eXBlcykKKyAgICBHZXRQYXN0ZWJvYXJkUGF0aG5h
bWVzRm9yVHlwZShTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFN0cmluZyBwYXN0ZWJvYXJkVHlwZSkg
LT4gKFZlY3RvcjxTdHJpbmc+IHBhdGhuYW1lcykKKyAgICBHZXRQYXN0ZWJvYXJkU3RyaW5nRm9y
VHlwZShTdHJpbmcgcGFzdGVib2FyZE5hbWUsIFN0cmluZyBwYXN0ZWJvYXJkVHlwZSkgLT4gKFN0
cmluZyBzdHJpbmcpCisgICAgR2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoU3RyaW5nIHBhc3Rl
Ym9hcmROYW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUpIC0+IChXZWJLaXQ6OlNoYXJlZE1lbW9y
eTo6SGFuZGxlIGhhbmRsZSwgdWludDY0X3Qgc2l6ZSkKKyAgICBQYXN0ZWJvYXJkQ29weShTdHJp
bmcgZnJvbVBhc3RlYm9hcmQsIFN0cmluZyB0b1Bhc3RlYm9hcmQpIC0+ICh1aW50NjRfdCBjaGFu
Z2VDb3VudCkKKyAgICBHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQoU3RyaW5nIHBhc3RlYm9hcmRO
YW1lKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQpCisgICAgR2V0UGFzdGVib2FyZFVuaXF1ZU5h
bWUoKSAtPiAoU3RyaW5nIHBhc3RlYm9hcmROYW1lKQorICAgIEdldFBhc3RlYm9hcmRDb2xvcihT
dHJpbmcgcGFzdGVib2FyZE5hbWUpIC0+IChXZWJDb3JlOjpDb2xvciBjb2xvcikKKyAgICBHZXRQ
YXN0ZWJvYXJkVVJMKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSkgLT4gKFN0cmluZyB1cmxTdHJpbmcp
CisgICAgQWRkUGFzdGVib2FyZFR5cGVzKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgVmVjdG9yPFN0
cmluZz4gcGFzdGVib2FyZFR5cGVzKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQpCisgICAgU2V0
UGFzdGVib2FyZFR5cGVzKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwgVmVjdG9yPFN0cmluZz4gcGFz
dGVib2FyZFR5cGVzKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQpCisgICAgU2V0UGFzdGVib2Fy
ZFBhdGhuYW1lc0ZvclR5cGUoU3RyaW5nIHBhc3RlYm9hcmROYW1lLCBTdHJpbmcgcGFzdGVib2Fy
ZFR5cGUsIFZlY3RvcjxTdHJpbmc+IHBhdGhuYW1lcykgLT4gKHVpbnQ2NF90IGNoYW5nZUNvdW50
KQorICAgIFNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKFN0cmluZyBwYXN0ZWJvYXJkTmFtZSwg
U3RyaW5nIHBhc3RlYm9hcmRUeXBlLCBTdHJpbmcgc3RyaW5nKSAtPiAodWludDY0X3QgY2hhbmdl
Q291bnQpCisgICAgU2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoU3RyaW5nIHBhc3RlYm9hcmRO
YW1lLCBTdHJpbmcgcGFzdGVib2FyZFR5cGUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUg
aGFuZGxlLCB1aW50NjRfdCBzaXplKSAtPiAodWludDY0X3QgY2hhbmdlQ291bnQpCisjZW5kaWYK
KworI2lmICFQTEFURk9STShDT0NPQSkKKyAgICAvLyBGSVhNRTogVGhpcyBhIGR1bW15IG1lc3Nh
Z2UsIHRvIGF2b2lkIGJyZWFraW5nIHRoZSBidWlsZCBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3Qg
cmVxdWlyZQorICAgIC8vIGFueSBzeW5jaHJvbm91cyBtZXNzYWdlcywgYW5kIHNob3VsZCBiZSBy
ZW1vdmVkIHdoZW4gPHJkYXI6Ly9wcm9ibGVtLzg3NzUxMTU+IGlzIGZpeGVkLgorICAgIER1bW15
KCkgLT4gKGJvb2wgZHVtbXlSZXR1cm4pCisjZW5kaWYKKworICAgICMgUGx1Zy1pbiBtZXNzYWdl
cy4KKyAgICB2b2lkIEFkZFBsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2goU3RyaW5nIHBhZ2VPcmln
aW4sIHVpbnQzMl90IGhhc2gsIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQpCisgICAgdm9p
ZCBQbHVnSW5EaWRSZWNlaXZlVXNlckludGVyYWN0aW9uKHVpbnQzMl90IGhhc2gsIFdlYkNvcmU6
OlNlc3Npb25JRCBzZXNzaW9uSUQpCit9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wubWVzc2FnZXMuaW4JKHdvcmtp
bmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KIAotbWVzc2FnZXMgLT4gV2ViQ29udGV4dCBMZWdhY3lSZWNlaXZlciB7CittZXNz
YWdlcyAtPiBXZWJQcm9jZXNzUG9vbCBMZWdhY3lSZWNlaXZlciB7CiAKICAgICBEaWRHZXRTdGF0
aXN0aWNzKHN0cnVjdCBXZWJLaXQ6OlN0YXRpc3RpY3NEYXRhIHN0YXRpc3RpY3NEYXRhLCB1aW50
NjRfdCBjYWxsYmFja0lEKQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Byb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYg
QEAKICNpbmNsdWRlICJVc2VyRGF0YS5oIgogI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJv
bGxlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5oIgotI2luY2x1
ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJJbnNwZWN0b3JQcm94eS5oIgogI2luY2x1
ZGUgIldlYk5hdmlnYXRpb25EYXRhU3RvcmUuaCIKICNpbmNsdWRlICJXZWJOb3RpZmljYXRpb25N
YW5hZ2VyUHJveHkuaCIKQEAgLTQ3LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKICNpbmNsdWRlICJXZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJQ
cm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1ZGUg
IldlYlByb2Nlc3NQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TdWRkZW5UZXJt
aW5hdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVVJMLmg+CkBAIC04NCwxNiArODQsMTYgQEAg
c3RhdGljIFdlYlByb2Nlc3NQcm94eTo6V2ViUGFnZVByb3h5TWFwJgogICAgIHJldHVybiBwYWdl
TWFwOwogfQogCi1SZWY8V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9jZXNzUHJveHk6OmNyZWF0ZShX
ZWJDb250ZXh0JiBjb250ZXh0KQorUmVmPFdlYlByb2Nlc3NQcm94eT4gV2ViUHJvY2Vzc1Byb3h5
OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQogewotICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFdlYlByb2Nlc3NQcm94eShjb250ZXh0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgV2ViUHJvY2Vzc1Byb3h5KHByb2Nlc3NQb29sKSk7CiB9CiAKLVdlYlByb2Nlc3NQcm94
eTo6V2ViUHJvY2Vzc1Byb3h5KFdlYkNvbnRleHQmIGNvbnRleHQpCitXZWJQcm9jZXNzUHJveHk6
OldlYlByb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCiAgICAgOiBtX3Jl
c3BvbnNpdmVuZXNzVGltZXIodGhpcykKLSAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwg
bV9wcm9jZXNzUG9vbChwcm9jZXNzUG9vbCkKICAgICAsIG1fbWF5SGF2ZVVuaXZlcnNhbEZpbGVS
ZWFkU2FuZGJveEV4dGVuc2lvbihmYWxzZSkKLSAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2Vy
UHJveHkodGhpcywgY29udGV4dCkKKyAgICAsIG1fY3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHko
dGhpcywgcHJvY2Vzc1Bvb2wpCiAgICAgLCBtX251bWJlck9mVGltZXNTdWRkZW5UZXJtaW5hdGlv
bldhc0Rpc2FibGVkKDApCiAgICAgLCBtX3Rocm90dGxlcihzdGQ6Om1ha2VfdW5pcXVlPFByb2Nl
c3NUaHJvdHRsZXI+KHRoaXMpKQogewpAQCAtMTEzLDcgKzExMyw3IEBAIHZvaWQgV2ViUHJvY2Vz
c1Byb3h5OjpnZXRMYXVuY2hPcHRpb25zKFAKIHsKICAgICBsYXVuY2hPcHRpb25zLnByb2Nlc3NU
eXBlID0gUHJvY2Vzc0xhdW5jaGVyOjpXZWJQcm9jZXNzOwogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
Ci0gICAgaWYgKCZtX2NvbnRleHQuZ2V0KCkgPT0gJldlYkluc3BlY3RvclByb3h5OjppbnNwZWN0
b3JDb250ZXh0KCkpCisgICAgaWYgKCZtX3Byb2Nlc3NQb29sLmdldCgpID09ICZXZWJJbnNwZWN0
b3JQcm94eTo6aW5zcGVjdG9yUHJvY2Vzc1Bvb2woKSkKICAgICAgICAgbGF1bmNoT3B0aW9ucy5l
eHRyYUluaXRpYWxpemF0aW9uRGF0YS5hZGQoQVNDSUlMaXRlcmFsKCJpbnNwZWN0b3ItcHJvY2Vz
cyIpLCBBU0NJSUxpdGVyYWwoIjEiKSk7CiAjZW5kaWYKICAgICBwbGF0Zm9ybUdldExhdW5jaE9w
dGlvbnMobGF1bmNoT3B0aW9ucyk7CkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBXZWJQcm9jZXNz
UHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbgogICAgIGZvciAoV2ViUGFnZVByb3h5TWFwOjppdGVy
YXRvciBpdCA9IG1fcGFnZU1hcC5iZWdpbigpLCBlbmQgPSBtX3BhZ2VNYXAuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKICAgICAgICAgaXQtPnZhbHVlLT5jb25uZWN0aW9uV2lsbE9wZW4oY29ubmVj
dGlvbik7CiAKLSAgICBtX2NvbnRleHQtPnByb2Nlc3NXaWxsT3BlbkNvbm5lY3Rpb24odGhpcyk7
CisgICAgbV9wcm9jZXNzUG9vbC0+cHJvY2Vzc1dpbGxPcGVuQ29ubmVjdGlvbih0aGlzKTsKIH0K
IAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmNvbm5lY3Rpb25XaWxsQ2xvc2UoSVBDOjpDb25uZWN0
aW9uKiBjb25uZWN0aW9uKQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5
Ojpjb25uZWN0aW9uV2lsbENsb3MKICAgICBmb3IgKFdlYlBhZ2VQcm94eU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3BhZ2VNYXAuYmVnaW4oKSwgZW5kID0gbV9wYWdlTWFwLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpCiAgICAgICAgIGl0LT52YWx1ZS0+Y29ubmVjdGlvbldpbGxDbG9zZShjb25uZWN0aW9u
KTsKIAotICAgIG1fY29udGV4dC0+cHJvY2Vzc1dpbGxDbG9zZUNvbm5lY3Rpb24odGhpcyk7Cisg
ICAgbV9wcm9jZXNzUG9vbC0+cHJvY2Vzc1dpbGxDbG9zZUNvbm5lY3Rpb24odGhpcyk7CiB9CiAK
IHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaXNjb25uZWN0KCkKQEAgLTE3Myw3ICsxNzMsNyBAQCB2
b2lkIFdlYlByb2Nlc3NQcm94eTo6ZGlzY29ubmVjdCgpCiAgICAgICAgIHdlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3h5LT5yZW1vdmVQcm9jZXNzKCp0aGlzKTsKICAgICBtX3dlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3hpZXMuY2xlYXIoKTsKIAotICAgIG1fY29udGV4dC0+ZGlzY29ubmVj
dFByb2Nlc3ModGhpcyk7CisgICAgbV9wcm9jZXNzUG9vbC0+ZGlzY29ubmVjdFByb2Nlc3ModGhp
cyk7CiB9CiAKIFdlYlBhZ2VQcm94eSogV2ViUHJvY2Vzc1Byb3h5Ojp3ZWJQYWdlKHVpbnQ2NF90
IHBhZ2VJRCkKQEAgLTIxNiw3ICsyMTYsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6cmVtb3Zl
V2ViUGFnZSh1aW50CiAKICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBXZWJQYWdlIG9wZW4g
aW4gdGhhdCB3ZWIgcHJvY2VzcywgYW5kIHdlIGhhdmUgbm8gb3RoZXIgcmVhc29uIHRvIGtlZXAg
aXQgYWxpdmUsIGxldCBpdCBnby4KICAgICAvLyBXZSBvbmx5IGFsbG93IHRoaXMgd2hlbiB1c2lu
ZyBhIG5ldHdvcmsgcHJvY2VzcywgYXMgb3RoZXJ3aXNlIHRoZSBXZWJQcm9jZXNzIG5lZWRzIHRv
IHByZXNlcnZlIGl0cyBzZXNzaW9uIHN0YXRlLgotICAgIGlmICghbV9jb250ZXh0LT51c2VzTmV0
d29ya1Byb2Nlc3MoKSB8fCBzdGF0ZSgpID09IFN0YXRlOjpUZXJtaW5hdGVkIHx8ICFjYW5UZXJt
aW5hdGVDaGlsZFByb2Nlc3MoKSkKKyAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wtPnVzZXNOZXR3b3Jr
UHJvY2VzcygpIHx8IHN0YXRlKCkgPT0gU3RhdGU6OlRlcm1pbmF0ZWQgfHwgIWNhblRlcm1pbmF0
ZUNoaWxkUHJvY2VzcygpKQogICAgICAgICByZXR1cm47CiAKICAgICBhYm9ydFByb2Nlc3NMYXVu
Y2hJZk5lZWRlZCgpOwpAQCAtMzY1LDE1ICszNjUsMTUgQEAgdm9pZCBXZWJQcm9jZXNzUHJveHk6
OmFkZEJhY2tGb3J3YXJkSXRlbQogdm9pZCBXZWJQcm9jZXNzUHJveHk6OmdldFBsdWdpbnMoYm9v
bCByZWZyZXNoLCBWZWN0b3I8UGx1Z2luSW5mbz4mIHBsdWdpbnMsIFZlY3RvcjxQbHVnaW5JbmZv
PiYgYXBwbGljYXRpb25QbHVnaW5zKQogewogICAgIGlmIChyZWZyZXNoKQotICAgICAgICBtX2Nv
bnRleHQtPnBsdWdpbkluZm9TdG9yZSgpLnJlZnJlc2goKTsKKyAgICAgICAgbV9wcm9jZXNzUG9v
bC0+cGx1Z2luSW5mb1N0b3JlKCkucmVmcmVzaCgpOwogCi0gICAgVmVjdG9yPFBsdWdpbk1vZHVs
ZUluZm8+IHBsdWdpbk1vZHVsZXMgPSBtX2NvbnRleHQtPnBsdWdpbkluZm9TdG9yZSgpLnBsdWdp
bnMoKTsKKyAgICBWZWN0b3I8UGx1Z2luTW9kdWxlSW5mbz4gcGx1Z2luTW9kdWxlcyA9IG1fcHJv
Y2Vzc1Bvb2wtPnBsdWdpbkluZm9TdG9yZSgpLnBsdWdpbnMoKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHBsdWdpbk1vZHVsZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIHBsdWdpbnMuYXBw
ZW5kKHBsdWdpbk1vZHVsZXNbaV0uaW5mbyk7CiAKICNpZiBFTkFCTEUoUERGS0lUX1BMVUdJTikK
ICAgICAvLyBBZGQgYnVpbHQtaW4gUERGIGxhc3QsIHNvIHRoYXQgaXQncyBub3QgdXNlZCB3aGVu
IGEgcmVhbCBwbHVnLWluIGlzIGluc3RhbGxlZC4KLSAgICBpZiAoIW1fY29udGV4dC0+b21pdFBE
RlN1cHBvcnQoKSkgeworICAgIGlmICghbV9wcm9jZXNzUG9vbC0+b21pdFBERlN1cHBvcnQoKSkg
ewogICAgICAgICBwbHVnaW5zLmFwcGVuZChQREZQbHVnaW46OnBsdWdpbkluZm8oKSk7CiAgICAg
ICAgIGFwcGxpY2F0aW9uUGx1Z2lucy5hcHBlbmQoUERGUGx1Z2luOjpwbHVnaW5JbmZvKCkpOwog
ICAgIH0KQEAgLTM5MywxNCArMzkzLDE0IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXRQbHVn
aW5Qcm9jZXNzQ28KICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogdm9pZCBXZWJQcm9jZXNz
UHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihQYXNzUmVmUHRyPE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5
PiByZXBseSkKIHsKLSAgICBtX2NvbnRleHQtPmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihy
ZXBseSk7CisgICAgbV9wcm9jZXNzUG9vbC0+Z2V0TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKHJl
cGx5KTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogCiAjaWYgRU5BQkxF
KERBVEFCQVNFX1BST0NFU1MpCiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0RGF0YWJhc2VQcm9j
ZXNzQ29ubmVjdGlvbihQYXNzUmVmUHRyPE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldERh
dGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseT4gcmVwbHkpCiB7Ci0gICAgbV9j
b250ZXh0LT5nZXREYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uKHJlcGx5KTsKKyAgICBtX3Byb2Nl
c3NQb29sLT5nZXREYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uKHJlcGx5KTsKIH0KICNlbmRpZiAv
LyBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKIApAQCAtNDA5LDcgKzQwOSw3IEBAIHZvaWQgV2Vi
UHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzc2FnZSgKICAgICBpZiAoZGlzcGF0Y2hNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9jb250
ZXh0LT5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCisgICAgaWYgKG1fcHJv
Y2Vzc1Bvb2wtPmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewpAQCAtNDI1LDcg
KzQyNSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlU3luY01lc3MKICAgICBp
ZiAoZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9jb250ZXh0LT5kaXNwYXRjaFN5bmNNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2RlcikpCisgICAgaWYgKG1fcHJvY2Vz
c1Bvb2wtPmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNv
ZGVyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVy
TmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSkgewpAQCAtNDU4LDcgKzQ1OCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZl
SW52YWxpZE0KIHsKICAgICBXVEZMb2dBbHdheXMoIlJlY2VpdmVkIGFuIGludmFsaWQgbWVzc2Fn
ZSBcIiVzLiVzXCIgZnJvbSB0aGUgd2ViIHByb2Nlc3MuXG4iLCBtZXNzYWdlUmVjZWl2ZXJOYW1l
LnRvU3RyaW5nKCkuZGF0YSgpLCBtZXNzYWdlTmFtZS50b1N0cmluZygpLmRhdGEoKSk7CiAKLSAg
ICBXZWJDb250ZXh0OjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UobWVzc2FnZVJlY2VpdmVyTmFt
ZSwgbWVzc2FnZU5hbWUpOworICAgIFdlYlByb2Nlc3NQb29sOjpkaWRSZWNlaXZlSW52YWxpZE1l
c3NhZ2UobWVzc2FnZVJlY2VpdmVyTmFtZSwgbWVzc2FnZU5hbWUpOwogCiAgICAgLy8gVGVybWlu
YXRlIHRoZSBXZWJQcm9jZXNzLgogICAgIHRlcm1pbmF0ZSgpOwpAQCAtNTAzLDcgKzUwMyw3IEBA
IHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpkaWRGaW5pc2hMYXVuY2hpbmcKIAogICAgIG1fd2ViQ29u
bmVjdGlvbiA9IFdlYkNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZSh0aGlzKTsKIAotICAg
IG1fY29udGV4dC0+cHJvY2Vzc0RpZEZpbmlzaExhdW5jaGluZyh0aGlzKTsKKyAgICBtX3Byb2Nl
c3NQb29sLT5wcm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKHRoaXMpOwogCiAjaWYgUExBVEZPUk0o
SU9TKSAmJiBVU0UoWFBDX1NFUlZJQ0VTKQogICAgIHhwY19jb25uZWN0aW9uX3QgeHBjQ29ubmVj
dGlvbiA9IGNvbm5lY3Rpb24oKS0+eHBjQ29ubmVjdGlvbigpOwpAQCAtNTY4LDcgKzU2OCw3IEBA
IGJvb2wgV2ViUHJvY2Vzc1Byb3h5OjpjYW5UZXJtaW5hdGVDaGlsZFAKICAgICBpZiAobV9kb3du
bG9hZFByb3h5TWFwICYmICFtX2Rvd25sb2FkUHJveHlNYXAtPmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFtX2NvbnRleHQtPnNob3VsZFRlcm1pbmF0ZSh0aGlz
KSkKKyAgICBpZiAoIW1fcHJvY2Vzc1Bvb2wtPnNob3VsZFRlcm1pbmF0ZSh0aGlzKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC01NzgsNyArNTc4LDcgQEAg
dm9pZCBXZWJQcm9jZXNzUHJveHk6OnNob3VsZFRlcm1pbmF0ZShibwogewogICAgIHNob3VsZFRl
cm1pbmF0ZSA9IGNhblRlcm1pbmF0ZUNoaWxkUHJvY2VzcygpOwogICAgIGlmIChzaG91bGRUZXJt
aW5hdGUpIHsKLSAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoZSB3ZWIgcHJvY2VzcyBpcyBnb2lu
ZyB0byB0ZXJtaW5hdGUgc28gZGlzY29ubmVjdCBpdCBmcm9tIHRoZSBjb250ZXh0LgorICAgICAg
ICAvLyBXZSBrbm93IHRoYXQgdGhlIHdlYiBwcm9jZXNzIGlzIGdvaW5nIHRvIHRlcm1pbmF0ZSBz
byBkaXNjb25uZWN0IGl0IGZyb20gdGhlIHByb2Nlc3MgcG9vbC4KICAgICAgICAgZGlzY29ubmVj
dCgpOwogICAgIH0KIH0KQEAgLTU5MiwxOCArNTkyLDE4IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5
Ojp1cGRhdGVUZXh0Q2hlY2tlclMKIERvd25sb2FkUHJveHkqIFdlYlByb2Nlc3NQcm94eTo6Y3Jl
YXRlRG93bmxvYWRQcm94eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAjaWYg
RU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLSAgICBBU1NFUlQoIW1fY29udGV4dC0+dXNlc05ldHdv
cmtQcm9jZXNzKCkpOworICAgIEFTU0VSVCghbV9wcm9jZXNzUG9vbC0+dXNlc05ldHdvcmtQcm9j
ZXNzKCkpOwogI2VuZGlmCiAKICAgICBpZiAoIW1fZG93bmxvYWRQcm94eU1hcCkKICAgICAgICAg
bV9kb3dubG9hZFByb3h5TWFwID0gc3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZFByb3h5TWFwPih0
aGlzKTsKIAotICAgIHJldHVybiBtX2Rvd25sb2FkUHJveHlNYXAtPmNyZWF0ZURvd25sb2FkUHJv
eHkobV9jb250ZXh0LCByZXF1ZXN0KTsKKyAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5j
cmVhdGVEb3dubG9hZFByb3h5KG1fcHJvY2Vzc1Bvb2wsIHJlcXVlc3QpOwogfQogCiB2b2lkIFdl
YlByb2Nlc3NQcm94eTo6ZGlkU2F2ZVRvUGFnZUNhY2hlKCkKIHsKLSAgICBtX2NvbnRleHQtPnBy
b2Nlc3NEaWRDYWNoZVBhZ2UodGhpcyk7CisgICAgbV9wcm9jZXNzUG9vbC0+cHJvY2Vzc0RpZENh
Y2hlUGFnZSh0aGlzKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUHJveHk6OnJlbGVhc2VQYWdlQ2Fj
aGUoKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuaAko
cmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
cm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw4ICs1OCw4IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjbGFzcyBEb3dubG9hZFByb3h5TWFwOwogY2xhc3MgV2ViQmFja0ZvcndhcmRMaXN0SXRl
bTsKLWNsYXNzIFdlYkNvbnRleHQ7CiBjbGFzcyBXZWJQYWdlR3JvdXA7CitjbGFzcyBXZWJQcm9j
ZXNzUG9vbDsKIHN0cnVjdCBXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlOwogICAgIAogY2xhc3MgV2Vi
UHJvY2Vzc1Byb3h5IDogcHVibGljIENoaWxkUHJvY2Vzc1Byb3h5LCBSZXNwb25zaXZlbmVzc1Rp
bWVyOjpDbGllbnQgewpAQCAtNjgsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBIYXNo
TWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViRnJhbWVQcm94eT4+IFdlYkZyYW1lUHJveHlNYXA7CiAg
ICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBXZWJQYWdlUHJveHkqPiBXZWJQYWdlUHJveHlN
YXA7CiAKLSAgICBzdGF0aWMgUmVmPFdlYlByb2Nlc3NQcm94eT4gY3JlYXRlKFdlYkNvbnRleHQm
KTsKKyAgICBzdGF0aWMgUmVmPFdlYlByb2Nlc3NQcm94eT4gY3JlYXRlKFdlYlByb2Nlc3NQb29s
Jik7CiAgICAgfldlYlByb2Nlc3NQcm94eSgpOwogCiAgICAgc3RhdGljIFdlYlByb2Nlc3NQcm94
eSogZnJvbUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uKQpAQCAtNzgsNyAr
NzgsNyBAQCBwdWJsaWM6CiAKICAgICBXZWJDb25uZWN0aW9uKiB3ZWJDb25uZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV93ZWJDb25uZWN0aW9uLmdldCgpOyB9CiAKLSAgICBXZWJDb250ZXh0JiBj
b250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CisgICAgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nl
c3NQb29sKCkgeyByZXR1cm4gbV9wcm9jZXNzUG9vbDsgfQogCiAgICAgc3RhdGljIFdlYlBhZ2VQ
cm94eSogd2ViUGFnZSh1aW50NjRfdCBwYWdlSUQpOwogICAgIFJlZjxXZWJQYWdlUHJveHk+IGNy
ZWF0ZVdlYlBhZ2UoUGFnZUNsaWVudCYsIGNvbnN0IFdlYlBhZ2VDb25maWd1cmF0aW9uJik7CkBA
IC0xNDAsNyArMTQwLDcgQEAgcHVibGljOgogICAgIFByb2Nlc3NUaHJvdHRsZXImIHRocm90dGxl
cigpIHsgcmV0dXJuICptX3Rocm90dGxlcjsgfQogICAgIAogcHJpdmF0ZToKLSAgICBleHBsaWNp
dCBXZWJQcm9jZXNzUHJveHkoV2ViQ29udGV4dCYpOworICAgIGV4cGxpY2l0IFdlYlByb2Nlc3NQ
cm94eShXZWJQcm9jZXNzUG9vbCYpOwogCiAgICAgLy8gRnJvbSBDaGlsZFByb2Nlc3NQcm94eQog
ICAgIHZpcnR1YWwgdm9pZCBnZXRMYXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNo
T3B0aW9ucyYpIG92ZXJyaWRlOwpAQCAtMTk2LDcgKzE5Niw3IEBAIHByaXZhdGU6CiAgICAgUmVz
cG9uc2l2ZW5lc3NUaW1lciBtX3Jlc3BvbnNpdmVuZXNzVGltZXI7CiAgICAgCiAgICAgUmVmUHRy
PFdlYkNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fd2ViQ29ubmVjdGlvbjsKLSAgICBSZWY8V2Vi
Q29udGV4dD4gbV9jb250ZXh0OworICAgIFJlZjxXZWJQcm9jZXNzUG9vbD4gbV9wcm9jZXNzUG9v
bDsKIAogICAgIGJvb2wgbV9tYXlIYXZlVW5pdmVyc2FsRmlsZVJlYWRTYW5kYm94RXh0ZW5zaW9u
OyAvLyBUcnVlIGlmIGEgcmVhZCBleHRlbnNpb24gZm9yICIvIiB3YXMgZXZlciBncmFudGVkIC0g
d2UgZG9uJ3QgdHJhY2sgd2hldGhlciBXZWJQcm9jZXNzIHN0aWxsIGhhcyBpdC4KICAgICBIYXNo
U2V0PFN0cmluZz4gbV9sb2NhbFBhdGhzV2l0aEFzc3VtZWRSZWFkQWNjZXNzOwpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUNhY2hlTWFu
YWdlclByb3h5LmNwcAkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiQVBJU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJJ
bW11dGFibGVEaWN0aW9uYXJ5LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW5EYXRhLmgiCi0j
aW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAjaW5j
bHVkZSAiV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlJl
c291cmNlQ2FjaGVNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogCkBAIC00NiwxNSArNDYsMTUgQEAg
Y29uc3QgY2hhciogV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eQogICAgIHJldHVybiAiV2Vi
UmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eSI7CiB9CiAKLVBhc3NSZWZQdHI8V2ViUmVzb3VyY2VD
YWNoZU1hbmFnZXJQcm94eT4gV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eTo6Y3JlYXRlKFdl
YkNvbnRleHQqIHdlYkNvbnRleHQpCitQYXNzUmVmUHRyPFdlYlJlc291cmNlQ2FjaGVNYW5hZ2Vy
UHJveHk+IFdlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQcm9jZXNzUG9v
bCogcHJvY2Vzc1Bvb2wpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJSZXNvdXJjZUNh
Y2hlTWFuYWdlclByb3h5KHdlYkNvbnRleHQpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdl
YlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHkocHJvY2Vzc1Bvb2wpKTsKIH0KIAotV2ViUmVzb3Vy
Y2VDYWNoZU1hbmFnZXJQcm94eTo6V2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eShXZWJDb250
ZXh0KiB3ZWJDb250ZXh0KQotICAgIDogV2ViQ29udGV4dFN1cHBsZW1lbnQod2ViQ29udGV4dCkK
K1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHk6OldlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJv
eHkoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQorICAgIDogV2ViQ29udGV4dFN1cHBsZW1l
bnQocHJvY2Vzc1Bvb2wpCiB7Ci0gICAgV2ViQ29udGV4dFN1cHBsZW1lbnQ6OmNvbnRleHQoKS0+
YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUNhY2hlTWFuYWdlclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKKyAgICBXZWJDb250ZXh0U3VwcGxlbWVu
dDo6cHJvY2Vzc1Bvb2woKS0+YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJSZXNvdXJj
ZUNhY2hlTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKIH0KIAog
V2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eTo6fldlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJv
eHkoKQpAQCAtNjMsNyArNjMsNyBAQCBXZWJSZXNvdXJjZUNhY2hlTWFuYWdlclByb3h5Ojp+V2Vi
UmVzb3VyCiAKIC8vIFdlYkNvbnRleHRTdXBwbGVtZW50CiAKLXZvaWQgV2ViUmVzb3VyY2VDYWNo
ZU1hbmFnZXJQcm94eTo6Y29udGV4dERlc3Ryb3llZCgpCit2b2lkIFdlYlJlc291cmNlQ2FjaGVN
YW5hZ2VyUHJveHk6OnByb2Nlc3NQb29sRGVzdHJveWVkKCkKIHsKICAgICBpbnZhbGlkYXRlQ2Fs
bGJhY2tNYXAobV9hcnJheUNhbGxiYWNrcywgQ2FsbGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJ
bnZhbGlkYXRlZCk7CiB9CkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgV2ViUmVzb3VyY2VDYWNoZU1h
bmFnZXJQcm94eTo6Z2V0Q2EKICAgICBtX2FycmF5Q2FsbGJhY2tzLnNldChjYWxsYmFja0lELCBj
YWxsYmFjay5yZWxlYXNlKCkpOwogCiAgICAgLy8gRklYTUUgKE11bHRpLVdlYlByb2Nlc3MpOiA8
cmRhcjovL3Byb2JsZW0vMTIyMzk3NjU+IFdoZW4gbXVsdGktcHJvY2VzcyBpcyBlbmFibGVkLCB3
ZSBuZWVkIHRvIGFnZ3JlZ2F0ZSB0aGUgY2FsbGJhY2sgZGF0YSBmcm9tIGFsbCBwcm9jZXNzZXMu
Ci0gICAgY29udGV4dCgpLT5zZW5kVG9BbGxQcm9jZXNzZXNSZWxhdW5jaGluZ1RoZW1JZk5lY2Vz
c2FyeShNZXNzYWdlczo6V2ViUmVzb3VyY2VDYWNoZU1hbmFnZXI6OkdldENhY2hlT3JpZ2lucyhj
YWxsYmFja0lEKSk7CisgICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvQWxsUHJvY2Vzc2VzUmVsYXVu
Y2hpbmdUaGVtSWZOZWNlc3NhcnkoTWVzc2FnZXM6OldlYlJlc291cmNlQ2FjaGVNYW5hZ2VyOjpH
ZXRDYWNoZU9yaWdpbnMoY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlJlc291cmNlQ2FjaGVN
YW5hZ2VyUHJveHk6OmRpZEdldENhY2hlT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmln
aW5EYXRhPiYgb3JpZ2lucywgdWludDY0X3QgY2FsbGJhY2tJRCkKQEAgLTExMiwxNyArMTEyLDE3
IEBAIHZvaWQgV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eTo6Y2xlYXIKICAgICBzZWN1cml0
eU9yaWdpbi5wb3J0ID0gb3JpZ2luLT5zZWN1cml0eU9yaWdpbigpLnBvcnQoKTsKIAogICAgIC8v
IEZJWE1FIChNdWx0aS1XZWJQcm9jZXNzKTogPHJkYXI6Ly9wcm9ibGVtLzEyMjM5NzY1PiBUaGVy
ZSBpcyBubyBuZWVkIHRvIHJlbGF1bmNoIGFsbCBwcm9jZXNzZXMuIE9uZSBwcm9jZXNzIHRvIHRh
a2UgY2FyZSBvZiBwZXJzaXN0ZW50IGNhY2hlIGlzIGVub3VnaC4KLSAgICBjb250ZXh0KCktPnNl
bmRUb0FsbFByb2Nlc3Nlc1JlbGF1bmNoaW5nVGhlbUlmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJS
ZXNvdXJjZUNhY2hlTWFuYWdlcjo6Q2xlYXJDYWNoZUZvck9yaWdpbihzZWN1cml0eU9yaWdpbiwg
Y2FjaGVzVG9DbGVhcikpOworICAgIHByb2Nlc3NQb29sKCktPnNlbmRUb0FsbFByb2Nlc3Nlc1Jl
bGF1bmNoaW5nVGhlbUlmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUNhY2hlTWFuYWdl
cjo6Q2xlYXJDYWNoZUZvck9yaWdpbihzZWN1cml0eU9yaWdpbiwgY2FjaGVzVG9DbGVhcikpOwog
fQogCiB2b2lkIFdlYlJlc291cmNlQ2FjaGVNYW5hZ2VyUHJveHk6OmNsZWFyQ2FjaGVGb3JBbGxP
cmlnaW5zKFJlc291cmNlQ2FjaGVzVG9DbGVhciBjYWNoZXNUb0NsZWFyKQogewogI2lmIEVOQUJM
RShORVRXT1JLX1BST0NFU1MpCi0gICAgY29udGV4dCgpLT5zZW5kVG9OZXR3b3JraW5nUHJvY2Vz
c1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVhckNh
Y2hlRm9yQWxsT3JpZ2lucyhjYWNoZXNUb0NsZWFyKSk7CisgICAgcHJvY2Vzc1Bvb2woKS0+c2Vu
ZFRvTmV0d29ya2luZ1Byb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6Q2xlYXJDYWNoZUZvckFsbE9yaWdpbnMoY2FjaGVzVG9DbGVhcikpOwogI2Vu
ZGlmCiAKICAgICAvLyBGSVhNRSAoTXVsdGktV2ViUHJvY2Vzcyk6IDxyZGFyOi8vcHJvYmxlbS8x
MjIzOTc2NT4gVGhlcmUgaXMgbm8gbmVlZCB0byByZWxhdW5jaCBhbGwgcHJvY2Vzc2VzLiBPbmUg
cHJvY2VzcyB0byB0YWtlIGNhcmUgb2YgcGVyc2lzdGVudCBjYWNoZSBpcyBlbm91Z2guCi0gICAg
Y29udGV4dCgpLT5zZW5kVG9BbGxQcm9jZXNzZXNSZWxhdW5jaGluZ1RoZW1JZk5lY2Vzc2FyeShN
ZXNzYWdlczo6V2ViUmVzb3VyY2VDYWNoZU1hbmFnZXI6OkNsZWFyQ2FjaGVGb3JBbGxPcmlnaW5z
KGNhY2hlc1RvQ2xlYXIpKTsKKyAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9BbGxQcm9jZXNzZXNS
ZWxhdW5jaGluZ1RoZW1JZk5lY2Vzc2FyeShNZXNzYWdlczo6V2ViUmVzb3VyY2VDYWNoZU1hbmFn
ZXI6OkNsZWFyQ2FjaGVGb3JBbGxPcmlnaW5zKGNhY2hlc1RvQ2xlYXIpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUmVzb3Vy
Y2VDYWNoZU1hbmFnZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJSZXNvdXJjZUNhY2hlTWFuYWdlclByb3h5LmgJKHJldmlzaW9uIDE3NzY5MCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUNhY2hlTWFuYWdlclByb3h5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBz
dHJ1Y3QgU2VjdXJpdHlPcmlnaW5EYXRhOwotY2xhc3MgV2ViQ29udGV4dDsKK2NsYXNzIFdlYlBy
b2Nlc3NQb29sOwogY2xhc3MgV2ViUHJvY2Vzc1Byb3h5OwogCiB0eXBlZGVmIEdlbmVyaWNDYWxs
YmFjazxBUEk6OkFycmF5Kj4gQXJyYXlDYWxsYmFjazsKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3Mg
V2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eSA6IHB1YgogcHVibGljOgogICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
UmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eT4gY3JlYXRlKFdlYkNvbnRleHQqKTsKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXZWJSZXNvdXJjZUNhY2hlTWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUHJv
Y2Vzc1Bvb2wqKTsKICAgICB2aXJ0dWFsIH5XZWJSZXNvdXJjZUNhY2hlTWFuYWdlclByb3h5KCk7
CiAKICAgICB2b2lkIGdldENhY2hlT3JpZ2lucyhzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFQSTo6QXJy
YXkqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOwpAQCAtNTgsMTAgKzU4LDEwIEBAIHB1YmxpYzoK
ICAgICB1c2luZyBBUEk6Ok9iamVjdDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQg
V2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eShXZWJDb250ZXh0Kik7CisgICAgZXhwbGljaXQg
V2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJQcm94eShXZWJQcm9jZXNzUG9vbCopOwogCiAgICAgLy8g
V2ViQ29udGV4dFN1cHBsZW1lbnQKLSAgICB2aXJ0dWFsIHZvaWQgY29udGV4dERlc3Ryb3llZCgp
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzUG9vbERlc3Ryb3llZCgpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzRGlkQ2xvc2UoV2ViUHJvY2Vzc1Byb3h5Kikg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHNob3VsZFRlcm1pbmF0ZShXZWJQcm9jZXNzUHJv
eHkqKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgcmVmV2ViQ29udGV4dFN1cHBs
ZW1lbnQoKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQVBJ
RG93bmxvYWRDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0FQSURvd25sb2FkQ2xpZW50LmgJKHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQVBJRG93bmxvYWRDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNyArMzYsNyBAQCBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogbmFtZXNwYWNlIFdlYktpdCB7
CiBjbGFzcyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OwogY2xhc3MgRG93bmxvYWRQcm94
eTsKLWNsYXNzIFdlYkNvbnRleHQ7CitjbGFzcyBXZWJQcm9jZXNzUG9vbDsKIH0KIAogbmFtZXNw
YWNlIEFQSSB7CkBAIC00NSwxNyArNDUsMTcgQEAgY2xhc3MgRG93bmxvYWRDbGllbnQgewogcHVi
bGljOgogICAgIHZpcnR1YWwgfkRvd25sb2FkQ2xpZW50KCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkU3RhcnQoV2ViS2l0OjpXZWJDb250ZXh0KiwgV2ViS2l0OjpEb3dubG9hZFByb3h5Kikg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShX
ZWJLaXQ6OldlYkNvbnRleHQqLCBXZWJLaXQ6OkRvd25sb2FkUHJveHkqLCBXZWJLaXQ6OkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZVJlc3BvbnNlKFdlYktpdDo6V2ViQ29udGV4dCosIFdlYktpdDo6RG93bmxvYWRQcm94eSosIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZURhdGEoV2ViS2l0OjpXZWJDb250ZXh0KiwgV2ViS2l0OjpEb3dubG9hZFByb3h5Kiwg
dWludDY0X3QpIHsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZN
SU1FVHlwZShXZWJLaXQ6OldlYkNvbnRleHQqLCBXZWJLaXQ6OkRvd25sb2FkUHJveHkqLCBjb25z
dCBXVEY6OlN0cmluZyYpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFdURjo6U3RyaW5n
IGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdlYktpdDo6V2ViQ29udGV4
dCosIFdlYktpdDo6RG93bmxvYWRQcm94eSosIGNvbnN0IFdURjo6U3RyaW5nJiwgYm9vbCYpIHsg
cmV0dXJuIHsgfTsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVEZXN0aW5hdGlvbihXZWJL
aXQ6OldlYkNvbnRleHQqLCBXZWJLaXQ6OkRvd25sb2FkUHJveHkqLCBjb25zdCBXVEY6OlN0cmlu
ZyYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2goV2ViS2l0OjpXZWJDb250ZXh0Kiwg
V2ViS2l0OjpEb3dubG9hZFByb3h5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoV2Vi
S2l0OjpXZWJDb250ZXh0KiwgV2ViS2l0OjpEb3dubG9hZFByb3h5KiwgY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VFcnJvciYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5jZWwoV2ViS2l0OjpX
ZWJDb250ZXh0KiwgV2ViS2l0OjpEb3dubG9hZFByb3h5KikgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IHByb2Nlc3NEaWRDcmFzaChXZWJLaXQ6OldlYkNvbnRleHQqLCBXZWJLaXQ6OkRvd25sb2FkUHJv
eHkqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnQoV2ViS2l0OjpXZWJQcm9jZXNzUG9v
bCosIFdlYktpdDo6RG93bmxvYWRQcm94eSopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNl
aXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbCosIFdlYktp
dDo6RG93bmxvYWRQcm94eSosIFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSop
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoV2ViS2l0OjpXZWJQcm9j
ZXNzUG9vbCosIFdlYktpdDo6RG93bmxvYWRQcm94eSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbCosIFdlYktpdDo6RG93bmxvYWRQcm94eSosIHVpbnQ2NF90KSB7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbCosIFdlYktpdDo6RG93bmxvYWRQcm94eSosIGNvbnN0IFdURjo6U3RyaW5n
JikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgZGVjaWRlRGVzdGlu
YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbCosIFdlYktp
dDo6RG93bmxvYWRQcm94eSosIGNvbnN0IFdURjo6U3RyaW5nJiwgYm9vbCYpIHsgcmV0dXJuIHsg
fTsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDcmVhdGVEZXN0aW5hdGlvbihXZWJLaXQ6OldlYlBy
b2Nlc3NQb29sKiwgV2ViS2l0OjpEb3dubG9hZFByb3h5KiwgY29uc3QgV1RGOjpTdHJpbmcmKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2wqLCBX
ZWJLaXQ6OkRvd25sb2FkUHJveHkqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sKiwgV2ViS2l0OjpEb3dubG9hZFByb3h5KiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5jZWwoV2ViS2l0
OjpXZWJQcm9jZXNzUG9vbCosIFdlYktpdDo6RG93bmxvYWRQcm94eSopIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBwcm9jZXNzRGlkQ3Jhc2goV2ViS2l0OjpXZWJQcm9jZXNzUG9vbCosIFdlYktpdDo6
RG93bmxvYWRQcm94eSopIHsgfQogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVBJCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0FQSUxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9BUElMZWdhY3lDb250
ZXh0SGlzdG9yeUNsaWVudC5oCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0FQSUxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDkgKzI5LDkgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKLWNsYXNzIFdlYkNvbnRleHQ7CiBjbGFzcyBXZWJGcmFtZVByb3h5OwogY2xh
c3MgV2ViUGFnZVByb3h5OworY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBzdHJ1Y3QgV2ViTmF2aWdh
dGlvbkRhdGFTdG9yZTsKIH0KIApAQCAtNDEsMTEgKzQxLDExIEBAIGNsYXNzIExlZ2FjeUNvbnRl
eHRIaXN0b3J5Q2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5MZWdhY3lDb250ZXh0SGlz
dG9yeUNsaWVudCgpIHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGRpZE5hdmlnYXRlV2l0aE5hdmln
YXRpb25EYXRhKFdlYktpdDo6V2ViQ29udGV4dCYsIFdlYktpdDo6V2ViUGFnZVByb3h5JiwgY29u
c3QgV2ViS2l0OjpXZWJOYXZpZ2F0aW9uRGF0YVN0b3JlJiwgV2ViS2l0OjpXZWJGcmFtZVByb3h5
JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXZWJLaXQ6
OldlYkNvbnRleHQmLCBXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGNvbnN0IFdURjo6U3RyaW5nJiwg
Y29uc3QgV1RGOjpTdHJpbmcmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdlYktpdDo6V2ViQ29udGV4dCYsIFdl
YktpdDo6V2ViUGFnZVByb3h5JiwgY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBXVEY6OlN0cmlu
ZyYsIFdlYktpdDo6V2ViRnJhbWVQcm94eSYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRh
dGVIaXN0b3J5VGl0bGUoV2ViS2l0OjpXZWJDb250ZXh0JiwgV2ViS2l0OjpXZWJQYWdlUHJveHkm
LCBjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5nJiwgV2ViS2l0OjpXZWJGcmFt
ZVByb3h5JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtzKFdlYktp
dDo6V2ViQ29udGV4dCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWROYXZpZ2F0ZVdpdGhOYXZp
Z2F0aW9uRGF0YShXZWJLaXQ6OldlYlByb2Nlc3NQb29sJiwgV2ViS2l0OjpXZWJQYWdlUHJveHkm
LCBjb25zdCBXZWJLaXQ6OldlYk5hdmlnYXRpb25EYXRhU3RvcmUmLCBXZWJLaXQ6OldlYkZyYW1l
UHJveHkmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdl
YktpdDo6V2ViUHJvY2Vzc1Bvb2wmLCBXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGNvbnN0IFdURjo6
U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2wmLCBXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGNvbnN0IFdURjo6U3RyaW5nJiwgY29u
c3QgV1RGOjpTdHJpbmcmLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGlkVXBkYXRlSGlzdG9yeVRpdGxlKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2wmLCBXZWJL
aXQ6OldlYlBhZ2VQcm94eSYsIGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpTdHJpbmcm
LCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVW
aXNpdGVkTGlua3MoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbCYpIHsgfQogICAgIHZpcnR1YWwgYm9v
bCBhZGRzVmlzaXRlZExpbmtzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIH07CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHJldmlzaW9uIDE3
NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNTEsOCArNTEsOCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3Mu
aD4KIAogbmFtZXNwYWNlIEFQSSB7Ci1jbGFzcyBDb250ZXh0Q29uZmlndXJhdGlvbjsKIGNsYXNz
IE5hdmlnYXRpb25EYXRhOworY2xhc3MgUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uOwogY2xhc3Mg
U2Vzc2lvblN0YXRlOwogfQogCkBAIC03MSw3ICs3MSw2IEBAIGNsYXNzIFdlYkJhdHRlcnlNYW5h
Z2VyUHJveHk7CiBjbGFzcyBXZWJCYXR0ZXJ5U3RhdHVzOwogY2xhc3MgV2ViUmVzb3VyY2VDYWNo
ZU1hbmFnZXJQcm94eTsKIGNsYXNzIFdlYkNvbG9yUGlja2VyUmVzdWx0TGlzdGVuZXJQcm94eTsK
LWNsYXNzIFdlYkNvbnRleHQ7CiBjbGFzcyBXZWJDb29raWVNYW5hZ2VyUHJveHk7CiBjbGFzcyBX
ZWJDcmVkZW50aWFsOwogY2xhc3MgV2ViRGF0YWJhc2VNYW5hZ2VyUHJveHk7CkBAIC05Niw2ICs5
NSw3IEBAIGNsYXNzIFdlYlBhZ2VHcm91cDsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIGNsYXNzIFdl
YlBsdWdpblNpdGVEYXRhTWFuYWdlcjsKIGNsYXNzIFdlYlByZWZlcmVuY2VzOworY2xhc3MgV2Vi
UHJvY2Vzc1Bvb2w7CiBjbGFzcyBXZWJQcm90ZWN0aW9uU3BhY2U7CiBjbGFzcyBXZWJSZW5kZXJM
YXllcjsKIGNsYXNzIFdlYlJlbmRlck9iamVjdDsKQEAgLTExMyw4ICsxMTMsOCBAQCBXS19BRERf
QVBJX01BUFBJTkcoV0tCYXR0ZXJ5U3RhdHVzUmVmLCBXCiBXS19BRERfQVBJX01BUFBJTkcoV0tC
dW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBlLCBCdW5kbGVIaXRUZXN0UmVzdWx0TWVkaWFUeXBl
KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLUmVzb3VyY2VDYWNoZU1hbmFnZXJSZWYsIFdlYlJlc291
cmNlQ2FjaGVNYW5hZ2VyUHJveHkpCiBXS19BRERfQVBJX01BUFBJTkcoV0tDb2xvclBpY2tlclJl
c3VsdExpc3RlbmVyUmVmLCBXZWJDb2xvclBpY2tlclJlc3VsdExpc3RlbmVyUHJveHkpCi1XS19B
RERfQVBJX01BUFBJTkcoV0tDb250ZXh0UmVmLCBXZWJDb250ZXh0KQotV0tfQUREX0FQSV9NQVBQ
SU5HKFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYsIEFQSTo6Q29udGV4dENvbmZpZ3VyYXRpb24p
CitXS19BRERfQVBJX01BUFBJTkcoV0tDb250ZXh0UmVmLCBXZWJQcm9jZXNzUG9vbCkKK1dLX0FE
RF9BUElfTUFQUElORyhXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmLCBBUEk6OlByb2Nlc3NQb29s
Q29uZmlndXJhdGlvbikKIFdLX0FERF9BUElfTUFQUElORyhXS0Nvb2tpZU1hbmFnZXJSZWYsIFdl
YkNvb2tpZU1hbmFnZXJQcm94eSkKIFdLX0FERF9BUElfTUFQUElORyhXS0NyZWRlbnRpYWxSZWYs
IFdlYkNyZWRlbnRpYWwpCiBXS19BRERfQVBJX01BUFBJTkcoV0tEYXRhYmFzZU1hbmFnZXJSZWYs
IFdlYkRhdGFiYXNlTWFuYWdlclByb3h5KQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL1dLQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywx
MCArMjcsMTAgQEAKICNpbmNsdWRlICJXS0NvbnRleHRQcml2YXRlLmgiCiAKICNpbmNsdWRlICJB
UElDbGllbnQuaCIKLSNpbmNsdWRlICJBUElDb250ZXh0Q29uZmlndXJhdGlvbi5oIgogI2luY2x1
ZGUgIkFQSURvd25sb2FkQ2xpZW50LmgiCiAjaW5jbHVkZSAiQVBJTGVnYWN5Q29udGV4dEhpc3Rv
cnlDbGllbnQuaCIKICNpbmNsdWRlICJBUElOYXZpZ2F0aW9uRGF0YS5oIgorI2luY2x1ZGUgIkFQ
SVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIgogI2luY2x1ZGUgIkFQSVVSTFJlcXVlc3QuaCIK
ICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCiAjaW5jbHVkZSAiRG93
bmxvYWRQcm94eS5oIgpAQCAtMzgsOSArMzgsOSBAQAogI2luY2x1ZGUgIldLQ29udGV4dENvbmZp
Z3VyYXRpb25SZWYuaCIKICNpbmNsdWRlICJXS1JldGFpblB0ci5oIgogI2luY2x1ZGUgIldlYkNl
cnRpZmljYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJJ
Y29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJXZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuaCIKKyNp
bmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpA
QCAtNzUsNyArNzUsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBXS1R5cGVJRCBXS0Nv
bnRleHRHZXRUeXBlSUQoKQogewotICAgIHJldHVybiB0b0FQSShXZWJDb250ZXh0OjpBUElUeXBl
KTsKKyAgICByZXR1cm4gdG9BUEkoV2ViUHJvY2Vzc1Bvb2w6OkFQSVR5cGUpOwogfQogCiBXS0Nv
bnRleHRSZWYgV0tDb250ZXh0Q3JlYXRlKCkKQEAgLTkzLDcgKzkzLDcgQEAgV0tDb250ZXh0UmVm
IFdLQ29udGV4dENyZWF0ZVdpdGhJbmplY3RlZAogCiBXS0NvbnRleHRSZWYgV0tDb250ZXh0Q3Jl
YXRlV2l0aENvbmZpZ3VyYXRpb24oV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0
aW9uKQogewotICAgIHJldHVybiB0b0FQSShXZWJDb250ZXh0OjpjcmVhdGUodG9JbXBsKGNvbmZp
Z3VyYXRpb24pLT53ZWJDb250ZXh0Q29uZmlndXJhdGlvbigpKS5sZWFrUmVmKCkpOworICAgIHJl
dHVybiB0b0FQSShXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKHRvSW1wbChjb25maWd1cmF0aW9uKS0+
d2ViUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uKCkpLmxlYWtSZWYoKSk7CiB9CiAKIHZvaWQgV0tD
b250ZXh0U2V0Q2xpZW50KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBjb25zdCBXS0NvbnRleHRD
bGllbnRCYXNlKiB3a0NsaWVudCkKQEAgLTExNiw0NSArMTE2LDQ1IEBAIHZvaWQgV0tDb250ZXh0
U2V0SGlzdG9yeUNsaWVudChXS0NvbnRleHQKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKFdlYkNvbnRl
eHQmIGNvbnRleHQsIFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgV2ViTmF2aWdhdGlvbkRhdGFT
dG9yZSYgbmF2aWdhdGlvbkRhdGFTdG9yZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUpIG92ZXJyaWRl
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShXZWJQ
cm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgV2ViTmF2
aWdhdGlvbkRhdGFTdG9yZSYgbmF2aWdhdGlvbkRhdGFTdG9yZSwgV2ViRnJhbWVQcm94eSYgZnJh
bWUpIG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuZGlkTmF2
aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgICAgICBSZWZQdHI8QVBJOjpOYXZpZ2F0aW9uRGF0YT4gbmF2aWdhdGlvbkRhdGEgPSBBUEk6
Ok5hdmlnYXRpb25EYXRhOjpjcmVhdGUobmF2aWdhdGlvbkRhdGFTdG9yZSk7Ci0gICAgICAgICAg
ICBtX2NsaWVudC5kaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSh0b0FQSSgmY29udGV4dCks
IHRvQVBJKCZwYWdlKSwgdG9BUEkobmF2aWdhdGlvbkRhdGEuZ2V0KCkpLCB0b0FQSSgmZnJhbWUp
LCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgbV9jbGllbnQuZGlkTmF2
aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEodG9BUEkoJnByb2Nlc3NQb29sKSwgdG9BUEkoJnBhZ2Up
LCB0b0FQSShuYXZpZ2F0aW9uRGF0YS5nZXQoKSksIHRvQVBJKCZmcmFtZSksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUGVy
Zm9ybUNsaWVudFJlZGlyZWN0KFdlYkNvbnRleHQmIGNvbnRleHQsIFdlYlBhZ2VQcm94eSYgcGFn
ZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VUkws
IFdlYkZyYW1lUHJveHkmIGZyYW1lKSBvdmVycmlkZQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UGVyZm9ybUNsaWVudFJlZGlyZWN0KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgV2ViUGFn
ZVByb3h5JiBwYWdlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3QgU3RyaW5nJiBkZXN0
aW5hdGlvblVSTCwgV2ViRnJhbWVQcm94eSYgZnJhbWUpIG92ZXJyaWRlCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGlmICghbV9jbGllbnQuZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KQogICAgICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgbV9jbGllbnQuZGlkUGVyZm9ybUNsaWVu
dFJlZGlyZWN0KHRvQVBJKCZjb250ZXh0KSwgdG9BUEkoJnBhZ2UpLCB0b1VSTFJlZihzb3VyY2VV
UkwuaW1wbCgpKSwgdG9VUkxSZWYoZGVzdGluYXRpb25VUkwuaW1wbCgpKSwgdG9BUEkoJmZyYW1l
KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIG1fY2xpZW50LmRpZFBl
cmZvcm1DbGllbnRSZWRpcmVjdCh0b0FQSSgmcHJvY2Vzc1Bvb2wpLCB0b0FQSSgmcGFnZSksIHRv
VVJMUmVmKHNvdXJjZVVSTC5pbXBsKCkpLCB0b1VSTFJlZihkZXN0aW5hdGlvblVSTC5pbXBsKCkp
LCB0b0FQSSgmZnJhbWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAK
LSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChXZWJDb250ZXh0
JiBjb250ZXh0LCBXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMLCBj
b25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVJMLCBXZWJGcmFtZVByb3h5JiBmcmFtZSkgb3ZlcnJp
ZGUKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChXZWJQcm9j
ZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgU3RyaW5nJiBz
b3VyY2VVUkwsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VUkwsIFdlYkZyYW1lUHJveHkmIGZy
YW1lKSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmRpZFBl
cmZvcm1TZXJ2ZXJSZWRpcmVjdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAg
ICAgIG1fY2xpZW50LmRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCh0b0FQSSgmY29udGV4dCksIHRv
QVBJKCZwYWdlKSwgdG9VUkxSZWYoc291cmNlVVJMLmltcGwoKSksIHRvVVJMUmVmKGRlc3RpbmF0
aW9uVVJMLmltcGwoKSksIHRvQVBJKCZmcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CisgICAgICAgICAgICBtX2NsaWVudC5kaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QodG9BUEkoJnBy
b2Nlc3NQb29sKSwgdG9BUEkoJnBhZ2UpLCB0b1VSTFJlZihzb3VyY2VVUkwuaW1wbCgpKSwgdG9V
UkxSZWYoZGVzdGluYXRpb25VUkwuaW1wbCgpKSwgdG9BUEkoJmZyYW1lKSwgbV9jbGllbnQuYmFz
ZS5jbGllbnRJbmZvKTsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRh
dGVIaXN0b3J5VGl0bGUoV2ViQ29udGV4dCYgY29udGV4dCwgV2ViUGFnZVByb3h5JiBwYWdlLCBj
b25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBTdHJpbmcmIHVybCwgV2ViRnJhbWVQcm94eSYgZnJh
bWUpIG92ZXJyaWRlCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVIaXN0b3J5VGl0bGUo
V2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFN0
cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgdXJsLCBXZWJGcmFtZVByb3h5JiBmcmFtZSkgb3Zl
cnJpZGUKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5kaWRVcGRhdGVIaXN0
b3J5VGl0bGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBtX2NsaWVu
dC5kaWRVcGRhdGVIaXN0b3J5VGl0bGUodG9BUEkoJmNvbnRleHQpLCB0b0FQSSgmcGFnZSksIHRv
QVBJKHRpdGxlLmltcGwoKSksIHRvVVJMUmVmKHVybC5pbXBsKCkpLCB0b0FQSSgmZnJhbWUpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgbV9jbGllbnQuZGlkVXBkYXRl
SGlzdG9yeVRpdGxlKHRvQVBJKCZwcm9jZXNzUG9vbCksIHRvQVBJKCZwYWdlKSwgdG9BUEkodGl0
bGUuaW1wbCgpKSwgdG9VUkxSZWYodXJsLmltcGwoKSksIHRvQVBJKCZmcmFtZSksIG1fY2xpZW50
LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcG9w
dWxhdGVWaXNpdGVkTGlua3MoV2ViQ29udGV4dCYgY29udGV4dCkgb3ZlcnJpZGUKKyAgICAgICAg
dmlydHVhbCB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtzKFdlYlByb2Nlc3NQb29sJiBwcm9jZXNz
UG9vbCkgb3ZlcnJpZGUKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5wb3B1
bGF0ZVZpc2l0ZWRMaW5rcykKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAg
IG1fY2xpZW50LnBvcHVsYXRlVmlzaXRlZExpbmtzKHRvQVBJKCZjb250ZXh0KSwgbV9jbGllbnQu
YmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIG1fY2xpZW50LnBvcHVsYXRlVmlzaXRlZExp
bmtzKHRvQVBJKCZwcm9jZXNzUG9vbCksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAg
ICAgIH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wgYWRkc1Zpc2l0ZWRMaW5rcygpIGNvbnN0IG92
ZXJyaWRlCkBAIC0xNjMsMTIgKzE2MywxMiBAQCB2b2lkIFdLQ29udGV4dFNldEhpc3RvcnlDbGll
bnQoV0tDb250ZXh0CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgV2ViS2l0OjpXZWJDb250ZXh0
JiBjb250ZXh0ID0gKnRvSW1wbChjb250ZXh0UmVmKTsKLSAgICBjb250ZXh0LnNldEhpc3RvcnlD
bGllbnQoc3RkOjptYWtlX3VuaXF1ZTxIaXN0b3J5Q2xpZW50Pih3a0NsaWVudCkpOworICAgIFdl
YlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCA9ICp0b0ltcGwoY29udGV4dFJlZik7CisgICAgcHJv
Y2Vzc1Bvb2wuc2V0SGlzdG9yeUNsaWVudChzdGQ6Om1ha2VfdW5pcXVlPEhpc3RvcnlDbGllbnQ+
KHdrQ2xpZW50KSk7CiAKLSAgICBib29sIGFkZHNWaXNpdGVkTGlua3MgPSBjb250ZXh0Lmhpc3Rv
cnlDbGllbnQoKS5hZGRzVmlzaXRlZExpbmtzKCk7CisgICAgYm9vbCBhZGRzVmlzaXRlZExpbmtz
ID0gcHJvY2Vzc1Bvb2wuaGlzdG9yeUNsaWVudCgpLmFkZHNWaXNpdGVkTGlua3MoKTsKIAotICAg
IGZvciAoYXV0byYgcHJvY2VzcyA6IGNvbnRleHQucHJvY2Vzc2VzKCkpIHsKKyAgICBmb3IgKGF1
dG8mIHByb2Nlc3MgOiBwcm9jZXNzUG9vbC5wcm9jZXNzZXMoKSkgewogICAgICAgICBmb3IgKGF1
dG8mIHBhZ2UgOiBwcm9jZXNzLT5wYWdlcygpKQogICAgICAgICAgICAgcGFnZS0+c2V0QWRkc1Zp
c2l0ZWRMaW5rcyhhZGRzVmlzaXRlZExpbmtzKTsKICAgICB9CkBAIC0xODMsOTMgKzE4Myw5MyBA
QCB2b2lkIFdLQ29udGV4dFNldERvd25sb2FkQ2xpZW50KFdLQ29udGV4CiAgICAgICAgICAgICBp
bml0aWFsaXplKGNsaWVudCk7CiAgICAgICAgIH0KICAgICBwcml2YXRlOgotICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkU3RhcnQoV2ViQ29udGV4dCogd2ViQ29udGV4dCwgRG93bmxvYWRQcm94eSog
ZG93bmxvYWRQcm94eSkgb3ZlcnJpZGUKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0KFdl
YlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCwgRG93bmxvYWRQcm94eSogZG93bmxvYWRQcm94eSkg
b3ZlcnJpZGUKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5kaWRTdGFydCkK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIG1fY2xpZW50LmRpZFN0YXJ0
KHRvQVBJKHdlYkNvbnRleHQpLCB0b0FQSShkb3dubG9hZFByb3h5KSwgbV9jbGllbnQuYmFzZS5j
bGllbnRJbmZvKTsKKyAgICAgICAgICAgIG1fY2xpZW50LmRpZFN0YXJ0KHRvQVBJKHByb2Nlc3NQ
b29sKSwgdG9BUEkoZG93bmxvYWRQcm94eSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAg
ICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKFdlYkNvbnRleHQqIHdlYkNvbnRleHQsIERvd25sb2FkUHJveHkqIGRvd25sb2Fk
UHJveHksIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqIGF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlUHJveHkpIG92ZXJyaWRlCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sLCBEb3dubG9hZFBy
b3h5KiBkb3dubG9hZFByb3h5LCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVByb3h5KSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoIW1fY2xpZW50LmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIG1fY2xpZW50LmRpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSh0b0FQSSh3ZWJDb250ZXh0KSwgdG9BUEkoZG93bmxvYWRQcm94eSks
IHRvQVBJKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkpLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pOworICAgICAgICAgICAgbV9jbGllbnQuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKHRvQVBJKHByb2Nlc3NQb29sKSwgdG9BUEkoZG93bmxvYWRQcm94eSksIHRvQVBJKGF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwog
ICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJD
b250ZXh0KiB3ZWJDb250ZXh0LCBEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5LCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkgb3ZlcnJpZGUKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVSZXNwb25zZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wsIERvd25sb2Fk
UHJveHkqIGRvd25sb2FkUHJveHksIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKSBv
dmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmRpZFJlY2VpdmVS
ZXNwb25zZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIG1fY2xpZW50
LmRpZFJlY2VpdmVSZXNwb25zZSh0b0FQSSh3ZWJDb250ZXh0KSwgdG9BUEkoZG93bmxvYWRQcm94
eSksIHRvQVBJKEFQSTo6VVJMUmVzcG9uc2U6OmNyZWF0ZShyZXNwb25zZSkuZ2V0KCkpLCBtX2Ns
aWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgbV9jbGllbnQuZGlkUmVjZWl2ZVJl
c3BvbnNlKHRvQVBJKHByb2Nlc3NQb29sKSwgdG9BUEkoZG93bmxvYWRQcm94eSksIHRvQVBJKEFQ
STo6VVJMUmVzcG9uc2U6OmNyZWF0ZShyZXNwb25zZSkuZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNs
aWVudEluZm8pOwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVE
YXRhKFdlYkNvbnRleHQqIHdlYkNvbnRleHQsIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHks
IHVpbnQ2NF90IGxlbmd0aCkgb3ZlcnJpZGUKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhKFdlYlByb2Nlc3NQb29sKiBwcm9jZXNzUG9vbCwgRG93bmxvYWRQcm94eSogZG93bmxv
YWRQcm94eSwgdWludDY0X3QgbGVuZ3RoKSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAoIW1fY2xpZW50LmRpZFJlY2VpdmVEYXRhKQogICAgICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICAgICAgbV9jbGllbnQuZGlkUmVjZWl2ZURhdGEodG9BUEkod2ViQ29udGV4dCks
IHRvQVBJKGRvd25sb2FkUHJveHkpLCBsZW5ndGgsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CisgICAgICAgICAgICBtX2NsaWVudC5kaWRSZWNlaXZlRGF0YSh0b0FQSShwcm9jZXNzUG9vbCks
IHRvQVBJKGRvd25sb2FkUHJveHkpLCBsZW5ndGgsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVjb2RlU291cmNlRGF0
YU9mTUlNRVR5cGUoV2ViQ29udGV4dCogd2ViQ29udGV4dCwgRG93bmxvYWRQcm94eSogZG93bmxv
YWRQcm94eSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkgb3ZlcnJpZGUKKyAgICAgICAgdmlydHVh
bCBib29sIHNob3VsZERlY29kZVNvdXJjZURhdGFPZk1JTUVUeXBlKFdlYlByb2Nlc3NQb29sKiBw
cm9jZXNzUG9vbCwgRG93bmxvYWRQcm94eSogZG93bmxvYWRQcm94eSwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSkgb3ZlcnJpZGUKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5z
aG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZSkKICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50LnNob3VsZERlY29kZVNvdXJjZURh
dGFPZk1JTUVUeXBlKHRvQVBJKHdlYkNvbnRleHQpLCB0b0FQSShkb3dubG9hZFByb3h5KSwgdG9B
UEkobWltZVR5cGUuaW1wbCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2NsaWVudC5zaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZSh0b0FQ
SShwcm9jZXNzUG9vbCksIHRvQVBJKGRvd25sb2FkUHJveHkpLCB0b0FQSShtaW1lVHlwZS5pbXBs
KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAKLSAgICAgICAgdmly
dHVhbCBTdHJpbmcgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoV2ViQ29u
dGV4dCogd2ViQ29udGV4dCwgRG93bmxvYWRQcm94eSogZG93bmxvYWRQcm94eSwgY29uc3QgU3Ry
aW5nJiBmaWxlbmFtZSwgYm9vbCYgYWxsb3dPdmVyd3JpdGUpIG92ZXJyaWRlCisgICAgICAgIHZp
cnR1YWwgU3RyaW5nIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdlYlBy
b2Nlc3NQb29sKiBwcm9jZXNzUG9vbCwgRG93bmxvYWRQcm94eSogZG93bmxvYWRQcm94eSwgY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSwgYm9vbCYgYWxsb3dPdmVyd3JpdGUpIG92ZXJyaWRlCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmICghbV9jbGllbnQuZGVjaWRlRGVzdGluYXRpb25XaXRoU3Vn
Z2VzdGVkRmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAg
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZGVzdGluYXRpb24oQWRvcHRXSywgbV9j
bGllbnQuZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUodG9BUEkod2ViQ29u
dGV4dCksIHRvQVBJKGRvd25sb2FkUHJveHkpLCB0b0FQSShmaWxlbmFtZS5pbXBsKCkpLCAmYWxs
b3dPdmVyd3JpdGUsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbykpOworICAgICAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGRlc3RpbmF0aW9uKEFkb3B0V0ssIG1fY2xpZW50LmRlY2lk
ZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKHRvQVBJKHByb2Nlc3NQb29sKSwgdG9B
UEkoZG93bmxvYWRQcm94eSksIHRvQVBJKGZpbGVuYW1lLmltcGwoKSksICZhbGxvd092ZXJ3cml0
ZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSk7CiAgICAgICAgICAgICByZXR1cm4gdG9XVEZT
dHJpbmcoZGVzdGluYXRpb24uZ2V0KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2
b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKFdlYkNvbnRleHQqIHdlYkNvbnRleHQsIERvd25sb2Fk
UHJveHkqIGRvd25sb2FkUHJveHksIGNvbnN0IFN0cmluZyYgcGF0aCkgb3ZlcnJpZGUKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKFdlYlByb2Nlc3NQb29sKiBwcm9j
ZXNzUG9vbCwgRG93bmxvYWRQcm94eSogZG93bmxvYWRQcm94eSwgY29uc3QgU3RyaW5nJiBwYXRo
KSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmRpZENyZWF0
ZURlc3RpbmF0aW9uKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgbV9j
bGllbnQuZGlkQ3JlYXRlRGVzdGluYXRpb24odG9BUEkod2ViQ29udGV4dCksIHRvQVBJKGRvd25s
b2FkUHJveHkpLCB0b0FQSShwYXRoLmltcGwoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CisgICAgICAgICAgICBtX2NsaWVudC5kaWRDcmVhdGVEZXN0aW5hdGlvbih0b0FQSShwcm9jZXNz
UG9vbCksIHRvQVBJKGRvd25sb2FkUHJveHkpLCB0b0FQSShwYXRoLmltcGwoKSksIG1fY2xpZW50
LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
RmluaXNoKFdlYkNvbnRleHQqIHdlYkNvbnRleHQsIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJv
eHkpIG92ZXJyaWRlCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2goV2ViUHJvY2Vzc1Bv
b2wqIHByb2Nlc3NQb29sLCBEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5KSBvdmVycmlkZQog
ICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmRpZEZpbmlzaCkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIG1fY2xpZW50LmRpZEZpbmlzaCh0b0FQSSh3
ZWJDb250ZXh0KSwgdG9BUEkoZG93bmxvYWRQcm94eSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5m
byk7CisgICAgICAgICAgICBtX2NsaWVudC5kaWRGaW5pc2godG9BUEkocHJvY2Vzc1Bvb2wpLCB0
b0FQSShkb3dubG9hZFByb3h5KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAgICAg
fQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKFdlYkNvbnRleHQqIHdlYkNvbnRleHQs
IERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHksIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KSBvdmVycmlkZQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChXZWJQcm9jZXNzUG9vbCog
cHJvY2Vzc1Bvb2wsIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHksIGNvbnN0IFJlc291cmNl
RXJyb3ImIGVycm9yKSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY2xp
ZW50LmRpZEZhaWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBtX2Ns
aWVudC5kaWRGYWlsKHRvQVBJKHdlYkNvbnRleHQpLCB0b0FQSShkb3dubG9hZFByb3h5KSwgdG9B
UEkoZXJyb3IpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICAgICAgbV9jbGll
bnQuZGlkRmFpbCh0b0FQSShwcm9jZXNzUG9vbCksIHRvQVBJKGRvd25sb2FkUHJveHkpLCB0b0FQ
SShlcnJvciksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5jZWwoV2ViQ29udGV4dCogd2ViQ29udGV4dCwg
RG93bmxvYWRQcm94eSogZG93bmxvYWRQcm94eSkgb3ZlcnJpZGUKKyAgICAgICAgdmlydHVhbCB2
b2lkIGRpZENhbmNlbChXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wsIERvd25sb2FkUHJveHkq
IGRvd25sb2FkUHJveHkpIG92ZXJyaWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9j
bGllbnQuZGlkQ2FuY2VsKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9jbGllbnQuZGlkQ2FuY2VsKHRvQVBJKHdlYkNvbnRleHQpLCB0b0FQSShk
b3dubG9hZFByb3h5KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgICAgIG1f
Y2xpZW50LmRpZENhbmNlbCh0b0FQSShwcm9jZXNzUG9vbCksIHRvQVBJKGRvd25sb2FkUHJveHkp
LCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgcHJvY2Vzc0RpZENyYXNoKFdlYkNvbnRleHQqIHdlYkNvbnRleHQsIERv
d25sb2FkUHJveHkqIGRvd25sb2FkUHJveHkpIG92ZXJyaWRlCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBwcm9jZXNzRGlkQ3Jhc2goV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sLCBEb3dubG9hZFBy
b3h5KiBkb3dubG9hZFByb3h5KSBvdmVycmlkZQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAo
IW1fY2xpZW50LnByb2Nlc3NEaWRDcmFzaCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIG1fY2xpZW50LnByb2Nlc3NEaWRDcmFzaCh0b0FQSSh3ZWJD
b250ZXh0KSwgdG9BUEkoZG93bmxvYWRQcm94eSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CisgICAgICAgICAgICBtX2NsaWVudC5wcm9jZXNzRGlkQ3Jhc2godG9BUEkocHJvY2Vzc1Bvb2wp
LCB0b0FQSShkb3dubG9hZFByb3h5KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKICAgICAg
ICAgfQogCiAgICAgfTsKQEAgLTMwNCw3ICszMDQsNyBAQCB2b2lkIFdLQ29udGV4dFBvc3RNZXNz
YWdlVG9JbmplY3RlZEJ1bmRsCiAKIHZvaWQgV0tDb250ZXh0R2V0R2xvYmFsU3RhdGlzdGljcyhX
S0NvbnRleHRTdGF0aXN0aWNzKiBzdGF0aXN0aWNzKQogewotICAgIGNvbnN0IFdlYkNvbnRleHQ6
OlN0YXRpc3RpY3MmIHdlYkNvbnRleHRTdGF0aXN0aWNzID0gV2ViQ29udGV4dDo6c3RhdGlzdGlj
cygpOworICAgIGNvbnN0IFdlYlByb2Nlc3NQb29sOjpTdGF0aXN0aWNzJiB3ZWJDb250ZXh0U3Rh
dGlzdGljcyA9IFdlYlByb2Nlc3NQb29sOjpzdGF0aXN0aWNzKCk7CiAKICAgICBzdGF0aXN0aWNz
LT53a1ZpZXdDb3VudCA9IHdlYkNvbnRleHRTdGF0aXN0aWNzLndrVmlld0NvdW50OwogICAgIHN0
YXRpc3RpY3MtPndrUGFnZUNvdW50ID0gd2ViQ29udGV4dFN0YXRpc3RpY3Mud2tQYWdlQ291bnQ7
CkBAIC01ODgsNyArNTg4LDcgQEAgdm9pZCBXS0NvbnRleHRTZXRQbHVnSW5BdXRvU3RhcnRPcmln
aW5zKAogCiB2b2lkIFdLQ29udGV4dFNldEludmFsaWRNZXNzYWdlRnVuY3Rpb24oV0tDb250ZXh0
SW52YWxpZE1lc3NhZ2VGdW5jdGlvbiBpbnZhbGlkTWVzc2FnZUZ1bmN0aW9uKQogewotICAgIFdl
YkNvbnRleHQ6OnNldEludmFsaWRNZXNzYWdlQ2FsbGJhY2soaW52YWxpZE1lc3NhZ2VGdW5jdGlv
bik7CisgICAgV2ViUHJvY2Vzc1Bvb2w6OnNldEludmFsaWRNZXNzYWdlQ2FsbGJhY2soaW52YWxp
ZE1lc3NhZ2VGdW5jdGlvbik7CiB9CiAKIHZvaWQgV0tDb250ZXh0U2V0TWVtb3J5Q2FjaGVEaXNh
YmxlZChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgYm9vbCBkaXNhYmxlZCkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRDb25maWd1cmF0aW9uUmVmLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0Q29u
ZmlndXJhdGlvblJlZi5jcHAJKHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRDb25maWd1cmF0aW9uUmVmLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsMTQgKzI2LDE0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0tD
b250ZXh0Q29uZmlndXJhdGlvblJlZi5oIgogCi0jaW5jbHVkZSAiQVBJQ29udGV4dENvbmZpZ3Vy
YXRpb24uaCIKKyNpbmNsdWRlICJBUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaCIKICNpbmNs
dWRlICJXS0FQSUNhc3QuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogV0tDb250ZXh0
Q29uZmlndXJhdGlvblJlZiBXS0NvbnRleHRDb25maWd1cmF0aW9uQ3JlYXRlKCkKIHsKLSAgICBy
ZXR1cm4gdG9BUEkoQVBJOjpDb250ZXh0Q29uZmlndXJhdGlvbjo6Y3JlYXRlKCkubGVha1JlZigp
KTsKKyAgICByZXR1cm4gdG9BUEkoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb246OmNyZWF0
ZSgpLmxlYWtSZWYoKSk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLQ29udGV4dENvbmZpZ3VyYXRpb25D
b3B5SW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBj
b25maWd1cmF0aW9uKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFn
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFn
ZS5jcHAJKHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9XS1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSAi
V0tQYWdlUG9saWN5Q2xpZW50SW50ZXJuYWwuaCIKICNpbmNsdWRlICJXS1BsdWdpbkluZm9ybWF0
aW9uLmgiCiAjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCi0jaW5jbHVkZSAiV2ViQ29u
dGV4dC5oIgogI2luY2x1ZGUgIldlYkZvcm1DbGllbnQuaCIKICNpbmNsdWRlICJXZWJJbnNwZWN0
b3JQcm94eS5oIgogI2luY2x1ZGUgIldlYk9wZW5QYW5lbFBhcmFtZXRlcnMuaCIKQEAgLTU0LDYg
KzUzLDcgQEAKICNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJXZWJQYWdlTWVz
c2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNz
UG9vbC5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb3Rl
Y3Rpb25TcGFjZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgpAQCAtOTIsNyArOTIsNyBA
QCBXS1R5cGVJRCBXS1BhZ2VHZXRUeXBlSUQoKQogCiBXS0NvbnRleHRSZWYgV0tQYWdlR2V0Q29u
dGV4dChXS1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkoJnRvSW1wbChwYWdl
UmVmKS0+cHJvY2VzcygpLmNvbnRleHQoKSk7CisgICAgcmV0dXJuIHRvQVBJKCZ0b0ltcGwocGFn
ZVJlZiktPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpKTsKIH0KIAogV0tQYWdlR3JvdXBSZWYgV0tQ
YWdlR2V0UGFnZUdyb3VwKFdLUGFnZVJlZiBwYWdlUmVmKQpAQCAtMTAxOSw3ICsxMDE5LDcgQEAg
dm9pZCBXS1BhZ2VTZXRQYWdlTG9hZGVyQ2xpZW50KFdLUGFnZVJlZgogCiAgICAgICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxBUEk6OkRhdGE+IHdlYkNyeXB0b01hc3RlcktleShXZWJQYWdlUHJveHkm
IHBhZ2UpIG92ZXJyaWRlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBwYWdlLnByb2Nl
c3MoKS5jb250ZXh0KCkuY2xpZW50KCkuY29weVdlYkNyeXB0b01hc3RlcktleSgmcGFnZS5wcm9j
ZXNzKCkuY29udGV4dCgpKTsKKyAgICAgICAgICAgIHJldHVybiBwYWdlLnByb2Nlc3MoKS5wcm9j
ZXNzUG9vbCgpLmNsaWVudCgpLmNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkoJnBhZ2UucHJvY2Vzcygp
LnByb2Nlc3NQb29sKCkpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lO
X0FQSSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2Vz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQcmVm
ZXJlbmNlcy5jcHAJKHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBA
QAogI2luY2x1ZGUgIldLUHJlZmVyZW5jZXNSZWYuaCIKICNpbmNsdWRlICJXS1ByZWZlcmVuY2Vz
UmVmUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldlYkNvbnRl
eHQuaCIKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvU2V0
dGluZ3MuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgpJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9tYWMvV0tDb250ZXh0UHJpdmF0ZU1h
Yy5tbQkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3
IEBACiAjaW1wb3J0ICJXS1BsdWdpbkluZm9ybWF0aW9uLmgiCiAjaW1wb3J0ICJXS1NoYXJlZEFQ
SUNhc3QuaCIKICNpbXBvcnQgIldLU3RyaW5nQ0YuaCIKLSNpbXBvcnQgIldlYkNvbnRleHQuaCIK
KyNpbXBvcnQgIldlYlByb2Nlc3NQb29sLmgiCiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZh
Y2UuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtOTcsMTIgKzk3LDEyIEBAIHZv
aWQgV0tDb250ZXh0UmVzZXRIU1RTSG9zdHMoV0tDb250ZXh0UmUKIAogdm9pZCBXS0NvbnRleHRS
ZWdpc3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1N0
cmluZ1JlZiBzY2hlbWUpCiB7Ci0gICAgV2ViQ29udGV4dDo6cmVnaXN0ZXJHbG9iYWxVUkxTY2hl
bWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnModG9XVEZTdHJpbmcoc2NoZW1lKSk7Cisg
ICAgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Q
cm90b2NvbEhhbmRsZXJzKHRvV1RGU3RyaW5nKHNjaGVtZSkpOwogfQogCiB2b2lkIFdLQ29udGV4
dFVucmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbChXS0NvbnRleHRSZWYgY29udGV4dCwg
V0tTdHJpbmdSZWYgc2NoZW1lKQogewotICAgIFdlYkNvbnRleHQ6OnVucmVnaXN0ZXJHbG9iYWxV
UkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnModG9XVEZTdHJpbmcoc2NoZW1l
KSk7CisgICAgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmlu
Z0N1c3RvbVByb3RvY29sSGFuZGxlcnModG9XVEZTdHJpbmcoc2NoZW1lKSk7CiB9CiAKIC8qIERF
UFJFQ0FURUQgLSAgUGxlYXNlIHVzZSBjb25zdGFudHMgZnJvbSBXS1BsdWdpbkluZm9ybWF0aW9u
IGluc3RlYWQuICovCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvbWFjL1dL
UGFnZVByaXZhdGVNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9tYWMvV0tQYWdlUHJpdmF0ZU1hYy5jcHAJKHJldmlzaW9uIDE3NzY5MCkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9tYWMvV0tQYWdlUHJpdmF0ZU1hYy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDEwICsyNywxMCBAQAogI2luY2x1ZGUgIldLUGFnZVByaXZhdGVN
YWMuaCIKIAogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldlYkNvbnRleHQuaCIK
ICNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNp
bmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKQEAgLTQ0LDUgKzQ0LDUgQEAgYm9vbCBXS1BhZ2VJ
c1VSTEtub3duSFNUU0hvc3QoV0tQYWdlUmVmIAogICAgIFdlYlBhZ2VQcm94eSogd2ViUGFnZVBy
b3h5ID0gdG9JbXBsKHBhZ2UpOwogICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9IHdl
YlBhZ2VQcm94eS0+cGFnZUdyb3VwKCkucHJlZmVyZW5jZXMoKS5wcml2YXRlQnJvd3NpbmdFbmFi
bGVkKCk7CiAKLSAgICByZXR1cm4gd2ViUGFnZVByb3h5LT5wcm9jZXNzKCkuY29udGV4dCgpLmlz
VVJMS25vd25IU1RTSG9zdCh0b0ltcGwodXJsKS0+c3RyaW5nKCksIHByaXZhdGVCcm93c2luZ0Vu
YWJsZWQpOworICAgIHJldHVybiB3ZWJQYWdlUHJveHktPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgp
LmlzVVJMS25vd25IU1RTSG9zdCh0b0ltcGwodXJsKS0+c3RyaW5nKCksIHByaXZhdGVCcm93c2lu
Z0VuYWJsZWQpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIubW0JKHJl
dmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tC
cm93c2luZ0NvbnRleHRDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1Myw4
IEBACiAjaW1wb3J0ICJXS1VSTFJlc3BvbnNlTlMuaCIKICNpbXBvcnQgIldlYWtPYmpDUHRyLmgi
CiAjaW1wb3J0ICJXZWJDZXJ0aWZpY2F0ZUluZm8uaCIKLSNpbXBvcnQgIldlYkNvbnRleHQuaCIK
ICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNp
bXBvcnQgIldlYlByb3RlY3Rpb25TcGFjZS5oIgogI2ltcG9ydCAiX1dLUmVtb3RlT2JqZWN0UmVn
aXN0cnlJbnRlcm5hbC5oIgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC0xNzMs
MTIgKzE3MywxMiBAQCAtICh2b2lkKWRlYWxsb2MKIAogKyAodm9pZClyZWdpc3RlclNjaGVtZUZv
ckN1c3RvbVByb3RvY29sOihOU1N0cmluZyAqKXNjaGVtZQogewotICAgIFdlYkNvbnRleHQ6OnJl
Z2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRsZXJzKHNjaGVt
ZSk7CisgICAgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdD
dXN0b21Qcm90b2NvbEhhbmRsZXJzKHNjaGVtZSk7CiB9CiAKICsgKHZvaWQpdW5yZWdpc3RlclNj
aGVtZUZvckN1c3RvbVByb3RvY29sOihOU1N0cmluZyAqKXNjaGVtZQogewotICAgIFdlYkNvbnRl
eHQ6OnVucmVnaXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxl
cnMoc2NoZW1lKTsKKyAgICBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3Rlckdsb2JhbFVSTFNjaGVt
ZUFzSGF2aW5nQ3VzdG9tUHJvdG9jb2xIYW5kbGVycyhzY2hlbWUpOwogfQogCiAtICh2b2lkKWxv
YWRSZXF1ZXN0OihOU1VSTFJlcXVlc3QgKilyZXF1ZXN0CkBAIC04NTUsNyArODU1LDcgQEAgLSAo
X1dLUmVtb3RlT2JqZWN0UmVnaXN0cnkgKilfcmVtb3RlT2JqZQogewogICAgIGlmICghX3JlbW90
ZU9iamVjdFJlZ2lzdHJ5KSB7CiAgICAgICAgIF9yZW1vdGVPYmplY3RSZWdpc3RyeSA9IGFkb3B0
TlMoW1tfV0tSZW1vdGVPYmplY3RSZWdpc3RyeSBhbGxvY10gX2luaXRXaXRoTWVzc2FnZVNlbmRl
cjoqX3BhZ2VdKTsKLSAgICAgICAgX3BhZ2UtPnByb2Nlc3MoKS5jb250ZXh0KCkuYWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVPYmplY3RSZWdpc3RyeTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBfcGFnZS0+cGFnZUlEKCksIFtfcmVtb3RlT2JqZWN0UmVnaXN0cnkgcmVtb3RlT2Jq
ZWN0UmVnaXN0cnldKTsKKyAgICAgICAgX3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmFk
ZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlT2JqZWN0UmVnaXN0cnk6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgX3BhZ2UtPnBhZ2VJRCgpLCBbX3JlbW90ZU9iamVjdFJlZ2lzdHJ5IHJl
bW90ZU9iamVjdFJlZ2lzdHJ5XSk7CiAgICAgfQogCiAgICAgcmV0dXJuIF9yZW1vdGVPYmplY3RS
ZWdpc3RyeS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcm9jZXNzR3JvdXAubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cC5tbQkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NHcm91cC5tbQkod29ya2luZyBj
b3B5KQpAQCAtNDEsOCArNDEsOCBAQAogI2ltcG9ydCAiV0tTdHJpbmdDRi5oIgogI2ltcG9ydCAi
V2Vha09iakNQdHIuaCIKICNpbXBvcnQgIldlYkNlcnRpZmljYXRlSW5mby5oIgotI2ltcG9ydCAi
V2ViQ29udGV4dC5oIgogI2ltcG9ydCAiV2ViRnJhbWVQcm94eS5oIgorI2ltcG9ydCAiV2ViUHJv
Y2Vzc1Bvb2wuaCIKICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmIFBMQVRGT1JNKElP
UykKQEAgLTU0LDcgKzU0LDcgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIEBpbXBsZW1l
bnRhdGlvbiBXS1Byb2Nlc3NHcm91cCB7Ci0gICAgUmVmUHRyPFdlYkNvbnRleHQ+IF9jb250ZXh0
OworICAgIFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4gX3Byb2Nlc3NQb29sOwogCiAgICAgV2Vha09i
akNQdHI8aWQgPFdLUHJvY2Vzc0dyb3VwRGVsZWdhdGU+PiBfZGVsZWdhdGU7CiAKQEAgLTE4OSwx
OSArMTg5LDE5IEBAIC0gKGlkKWluaXRXaXRoSW5qZWN0ZWRCdW5kbGVVUkw6KE5TVVJMICoKICAg
ICBJbml0V2ViQ29yZVRocmVhZFN5c3RlbUludGVyZmFjZSgpOwogI2VuZGlmCiAKLSAgICBXZWJD
b250ZXh0Q29uZmlndXJhdGlvbiB3ZWJDb250ZXh0Q29uZmlndXJhdGlvbjsKLSAgICB3ZWJDb250
ZXh0Q29uZmlndXJhdGlvbi5pbmplY3RlZEJ1bmRsZVBhdGggPSBidW5kbGVVUkwgPyBTdHJpbmco
YnVuZGxlVVJMLnBhdGgpIDogU3RyaW5nKCk7CisgICAgV2ViUHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uIGNvbmZpZ3VyYXRpb247CisgICAgY29uZmlndXJhdGlvbi5pbmplY3RlZEJ1bmRsZVBhdGgg
PSBidW5kbGVVUkwgPyBTdHJpbmcoYnVuZGxlVVJMLnBhdGgpIDogU3RyaW5nKCk7CiAKLSAgICBX
ZWJDb250ZXh0OjphcHBseVBsYXRmb3JtU3BlY2lmaWNDb25maWd1cmF0aW9uRGVmYXVsdHMod2Vi
Q29udGV4dENvbmZpZ3VyYXRpb24pOworICAgIFdlYlByb2Nlc3NQb29sOjphcHBseVBsYXRmb3Jt
U3BlY2lmaWNDb25maWd1cmF0aW9uRGVmYXVsdHMoY29uZmlndXJhdGlvbik7CiAKLSAgICBfY29u
dGV4dCA9IFdlYkNvbnRleHQ6OmNyZWF0ZShXVEY6Om1vdmUod2ViQ29udGV4dENvbmZpZ3VyYXRp
b24pKTsKKyAgICBfcHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlKFdURjo6bW92
ZShjb25maWd1cmF0aW9uKSk7CiAKLSAgICBzZXRVcENvbm5lY3Rpb25DbGllbnQoc2VsZiwgdG9B
UEkoX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBzZXRVcEluZWN0ZWRCdW5kbGVDbGllbnQoc2VsZiwg
dG9BUEkoX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBzZXRVcEhpc3RvcnlDbGllbnQoc2VsZiwgdG9B
UEkoX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBzZXRVcENvbm5lY3Rpb25DbGllbnQoc2VsZiwgdG9B
UEkoX3Byb2Nlc3NQb29sLmdldCgpKSk7CisgICAgc2V0VXBJbmVjdGVkQnVuZGxlQ2xpZW50KHNl
bGYsIHRvQVBJKF9wcm9jZXNzUG9vbC5nZXQoKSkpOworICAgIHNldFVwSGlzdG9yeUNsaWVudChz
ZWxmLCB0b0FQSShfcHJvY2Vzc1Bvb2wuZ2V0KCkpKTsKICNpZiBQTEFURk9STShJT1MpCi0gICAg
X2NvbnRleHQtPnNldFVzZXNOZXR3b3JrUHJvY2Vzcyh0cnVlKTsKLSAgICBfY29udGV4dC0+c2V0
UHJvY2Vzc01vZGVsKFByb2Nlc3NNb2RlbE11bHRpcGxlU2Vjb25kYXJ5UHJvY2Vzc2VzKTsKKyAg
ICBfcHJvY2Vzc1Bvb2wtPnNldFVzZXNOZXR3b3JrUHJvY2Vzcyh0cnVlKTsKKyAgICBfcHJvY2Vz
c1Bvb2wtPnNldFByb2Nlc3NNb2RlbChQcm9jZXNzTW9kZWxNdWx0aXBsZVNlY29uZGFyeVByb2Nl
c3Nlcyk7CiAjZW5kaWYKIAogICAgIHJldHVybiBzZWxmOwpAQCAtMjIzLDEyICsyMjMsMTIgQEAg
LSAodm9pZClzZXREZWxlZ2F0ZTooaWQgPFdLUHJvY2Vzc0dyb3VwRAogCiAtIChXS0NvbnRleHRS
ZWYpX2NvbnRleHRSZWYKIHsKLSAgICByZXR1cm4gdG9BUEkoX2NvbnRleHQuZ2V0KCkpOworICAg
IHJldHVybiB0b0FQSShfcHJvY2Vzc1Bvb2wuZ2V0KCkpOwogfQogCiAtICh2b2lkKV9zZXRBbGxv
d3NTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGU6KE5TQXJyYXkgKiljZXJ0aWZpY2F0ZUNoYWluIGZv
ckhvc3Q6KE5TU3RyaW5nICopaG9zdAogewotICAgIF9jb250ZXh0LT5hbGxvd1NwZWNpZmljSFRU
UFNDZXJ0aWZpY2F0ZUZvckhvc3QoV2ViQ2VydGlmaWNhdGVJbmZvOjpjcmVhdGUoV2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvKChDRkFycmF5UmVmKWNlcnRpZmljYXRlQ2hhaW4pKS5nZXQoKSwgaG9z
dCk7CisgICAgX3Byb2Nlc3NQb29sLT5hbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhv
c3QoV2ViQ2VydGlmaWNhdGVJbmZvOjpjcmVhdGUoV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvKChD
RkFycmF5UmVmKWNlcnRpZmljYXRlQ2hhaW4pKS5nZXQoKSwgaG9zdCk7CiB9CiAKICNpZiBQTEFU
Rk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJv
Y2Vzc1Bvb2wubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1Byb2Nlc3NQb29sLm1tCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2wubW0JKHdvcmtpbmcgY29weSkKQEAg
LTM1LDkgKzM1LDkgQEAKICNpbXBvcnQgIldLT2JqZWN0LmgiCiAjaW1wb3J0ICJXZWFrT2JqQ1B0
ci5oIgogI2ltcG9ydCAiV2ViQ2VydGlmaWNhdGVJbmZvLmgiCi0jaW1wb3J0ICJXZWJDb250ZXh0
LmgiCiAjaW1wb3J0ICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKICNpbXBvcnQgIldlYlByb2Nl
c3NNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbXBvcnQgIl9XS0Rv
d25sb2FkRGVsZWdhdGUuaCIKICNpbXBvcnQgIl9XS1Byb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5o
IgogI2ltcG9ydCA8V2ViQ29yZS9DRk5ldHdvcmtTUEkuaD4KQEAgLTY0LDcgKzY0LDcgQEAgLSAo
aW5zdGFuY2V0eXBlKWluaXQKIAogLSAodm9pZClkZWFsbG9jCiB7Ci0gICAgX2NvbnRleHQtPn5X
ZWJDb250ZXh0KCk7CisgICAgX3Byb2Nlc3NQb29sLT5+V2ViUHJvY2Vzc1Bvb2woKTsKIAogICAg
IFtzdXBlciBkZWFsbG9jXTsKIH0KQEAgLTgxLDE0ICs4MSwxNCBAQCAtIChfV0tQcm9jZXNzUG9v
bENvbmZpZ3VyYXRpb24gKilfY29uZmlnCiAKIC0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0CiB7
Ci0gICAgcmV0dXJuICpfY29udGV4dDsKKyAgICByZXR1cm4gKl9wcm9jZXNzUG9vbDsKIH0KIAog
I2lmIFBMQVRGT1JNKElPUykKIC0gKFdLR2VvbG9jYXRpb25Qcm92aWRlcklPUyAqKV9nZW9sb2Nh
dGlvblByb3ZpZGVyCiB7CiAgICAgaWYgKCFfZ2VvbG9jYXRpb25Qcm92aWRlcikKLSAgICAgICAg
X2dlb2xvY2F0aW9uUHJvdmlkZXIgPSBhZG9wdE5TKFtbV0tHZW9sb2NhdGlvblByb3ZpZGVySU9T
IGFsbG9jXSBpbml0V2l0aENvbnRleHQ6X2NvbnRleHQuZ2V0KCldKTsKKyAgICAgICAgX2dlb2xv
Y2F0aW9uUHJvdmlkZXIgPSBhZG9wdE5TKFtbV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TIGFsbG9j
XSBpbml0V2l0aFByb2Nlc3NQb29sOipfcHJvY2Vzc1Bvb2xdKTsKICAgICByZXR1cm4gX2dlb2xv
Y2F0aW9uUHJvdmlkZXIuZ2V0KCk7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpAQCAtMTU0
LDQ0ICsxNTQsNDQgQEAgLSAoaW5zdGFuY2V0eXBlKV9pbml0V2l0aENvbmZpZ3VyYXRpb246KAog
ICAgIEluaXRXZWJDb3JlVGhyZWFkU3lzdGVtSW50ZXJmYWNlKCk7CiAjZW5kaWYKIAotICAgIFdl
YktpdDo6V2ViQ29udGV4dENvbmZpZ3VyYXRpb24gd2ViQ29udGV4dENvbmZpZ3VyYXRpb247Cisg
ICAgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24gcHJvY2Vzc1Bvb2xDb25maWd1
cmF0aW9uOwogCiAgICAgaWYgKE5TVVJMICpidW5kbGVVUkwgPSBbX2NvbmZpZ3VyYXRpb24gaW5q
ZWN0ZWRCdW5kbGVVUkxdKSB7CiAgICAgICAgIGlmICghYnVuZGxlVVJMLmlzRmlsZVVSTCkKICAg
ICAgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBm
b3JtYXQ6QCJJbmplY3RlZCBCdW5kbGUgVVJMIG11c3QgYmUgYSBmaWxlIFVSTCJdOwogCi0gICAg
ICAgIHdlYkNvbnRleHRDb25maWd1cmF0aW9uLmluamVjdGVkQnVuZGxlUGF0aCA9IGJ1bmRsZVVS
TC5wYXRoOworICAgICAgICBwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaW5qZWN0ZWRCdW5kbGVQ
YXRoID0gYnVuZGxlVVJMLnBhdGg7CiAgICAgfQogCi0gICAgd2ViQ29udGV4dENvbmZpZ3VyYXRp
b24ubG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gd2Vic2l0ZURhdGFEaXJlY3RvcnlVUkwoQCJMb2Nh
bFN0b3JhZ2UiKS5hYnNvbHV0ZVVSTC5wYXRoLmZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbjsKLSAg
ICB3ZWJDb250ZXh0Q29uZmlndXJhdGlvbi53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSA9IHdlYnNp
dGVEYXRhRGlyZWN0b3J5VVJMKEAiV2ViU1FMIikuYWJzb2x1dGVVUkwucGF0aC5maWxlU3lzdGVt
UmVwcmVzZW50YXRpb247Ci0gICAgd2ViQ29udGV4dENvbmZpZ3VyYXRpb24uaW5kZXhlZERCRGF0
YWJhc2VEaXJlY3RvcnkgPSB3ZWJzaXRlRGF0YURpcmVjdG9yeVVSTChAIkluZGV4ZWREQiIpLmFi
c29sdXRlVVJMLnBhdGguZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOwotICAgIHdlYkNvbnRleHRD
b25maWd1cmF0aW9uLm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkgPSB3ZWJzaXRlRGF0YURpcmVj
dG9yeVVSTChAIk1lZGlhS2V5cyIpLmFic29sdXRlVVJMLnBhdGguZmlsZVN5c3RlbVJlcHJlc2Vu
dGF0aW9uOwotCi0gICAgQVBJOjpPYmplY3Q6OmNvbnN0cnVjdEluV3JhcHBlcjxXZWJLaXQ6Oldl
YkNvbnRleHQ+KHNlbGYsIFdURjo6bW92ZSh3ZWJDb250ZXh0Q29uZmlndXJhdGlvbikpOwotICAg
IF9jb250ZXh0LT5zZXRVc2VzTmV0d29ya1Byb2Nlc3ModHJ1ZSk7Ci0gICAgX2NvbnRleHQtPnNl
dFByb2Nlc3NNb2RlbChXZWJLaXQ6OlByb2Nlc3NNb2RlbE11bHRpcGxlU2Vjb25kYXJ5UHJvY2Vz
c2VzKTsKLSAgICBfY29udGV4dC0+c2V0TWF4aW11bU51bWJlck9mUHJvY2Vzc2VzKFtfY29uZmln
dXJhdGlvbiBtYXhpbXVtUHJvY2Vzc0NvdW50XSk7CisgICAgcHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IHdlYnNpdGVEYXRhRGlyZWN0b3J5VVJMKEAiTG9j
YWxTdG9yYWdlIikuYWJzb2x1dGVVUkwucGF0aC5maWxlU3lzdGVtUmVwcmVzZW50YXRpb247Cisg
ICAgcHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNlRGlyZWN0b3J5ID0gd2Vi
c2l0ZURhdGFEaXJlY3RvcnlVUkwoQCJXZWJTUUwiKS5hYnNvbHV0ZVVSTC5wYXRoLmZpbGVTeXN0
ZW1SZXByZXNlbnRhdGlvbjsKKyAgICBwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uaW5kZXhlZERC
RGF0YWJhc2VEaXJlY3RvcnkgPSB3ZWJzaXRlRGF0YURpcmVjdG9yeVVSTChAIkluZGV4ZWREQiIp
LmFic29sdXRlVVJMLnBhdGguZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOworICAgIHByb2Nlc3NQ
b29sQ29uZmlndXJhdGlvbi5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gd2Vic2l0ZURhdGFE
aXJlY3RvcnlVUkwoQCJNZWRpYUtleXMiKS5hYnNvbHV0ZVVSTC5wYXRoLmZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbjsKKworICAgIEFQSTo6T2JqZWN0Ojpjb25zdHJ1Y3RJbldyYXBwZXI8V2ViS2l0
OjpXZWJQcm9jZXNzUG9vbD4oc2VsZiwgV1RGOjptb3ZlKHByb2Nlc3NQb29sQ29uZmlndXJhdGlv
bikpOworICAgIF9wcm9jZXNzUG9vbC0+c2V0VXNlc05ldHdvcmtQcm9jZXNzKHRydWUpOworICAg
IF9wcm9jZXNzUG9vbC0+c2V0UHJvY2Vzc01vZGVsKFdlYktpdDo6UHJvY2Vzc01vZGVsTXVsdGlw
bGVTZWNvbmRhcnlQcm9jZXNzZXMpOworICAgIF9wcm9jZXNzUG9vbC0+c2V0TWF4aW11bU51bWJl
ck9mUHJvY2Vzc2VzKFtfY29uZmlndXJhdGlvbiBtYXhpbXVtUHJvY2Vzc0NvdW50XSk7CiAKICNp
ZiBFTkFCTEUoQ0FDSEVfUEFSVElUSU9OSU5HKQogICAgIGZvciAoTlNTdHJpbmcgKnVybFNjaGVt
ZSBpbiBbX2NvbmZpZ3VyYXRpb24gY2FjaGVQYXJ0aXRpb25lZFVSTFNjaGVtZXNdKQotICAgICAg
ICBfY29udGV4dC0+cmVnaXN0ZXJVUkxTY2hlbWVBc0NhY2hlUGFydGl0aW9uZWQodXJsU2NoZW1l
KTsKKyAgICAgICAgX3Byb2Nlc3NQb29sLT5yZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRp
b25lZCh1cmxTY2hlbWUpOwogI2VuZGlmCiAKICAgICAvLyBGSVhNRTogQWRkIGEgd2F5IHRvIGNv
bmZpZ3VyZSB0aGUgY2FjaGUgbW9kZWwsIHNlZSA8cmRhcjovL3Byb2JsZW0vMTYyMDY4NTc+Lgot
ICAgIF9jb250ZXh0LT5zZXRDYWNoZU1vZGVsKFdlYktpdDo6Q2FjaGVNb2RlbFByaW1hcnlXZWJC
cm93c2VyKTsKKyAgICBfcHJvY2Vzc1Bvb2wtPnNldENhY2hlTW9kZWwoV2ViS2l0OjpDYWNoZU1v
ZGVsUHJpbWFyeVdlYkJyb3dzZXIpOwogCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKIC0gKHZvaWQp
X3NldEFsbG93c1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZTooTlNBcnJheSAqKWNlcnRpZmljYXRl
Q2hhaW4gZm9ySG9zdDooTlNTdHJpbmcgKilob3N0CiB7Ci0gICAgX2NvbnRleHQtPmFsbG93U3Bl
Y2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChXZWJLaXQ6OldlYkNlcnRpZmljYXRlSW5mbzo6
Y3JlYXRlKFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbygoQ0ZBcnJheVJlZiljZXJ0aWZpY2F0ZUNo
YWluKSkuZ2V0KCksIGhvc3QpOworICAgIF9wcm9jZXNzUG9vbC0+YWxsb3dTcGVjaWZpY0hUVFBT
Q2VydGlmaWNhdGVGb3JIb3N0KFdlYktpdDo6V2ViQ2VydGlmaWNhdGVJbmZvOjpjcmVhdGUoV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvKChDRkFycmF5UmVmKWNlcnRpZmljYXRlQ2hhaW4pKS5nZXQo
KSwgaG9zdCk7CiB9CiAKIC0gKHZvaWQpX3NldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFs
dWF0aW9uOihCT09MKXZhbHVlCiB7Ci0gICAgX2NvbnRleHQtPnNldENhbkhhbmRsZUhUVFBTU2Vy
dmVyVHJ1c3RFdmFsdWF0aW9uKHZhbHVlKTsKKyAgICBfcHJvY2Vzc1Bvb2wtPnNldENhbkhhbmRs
ZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKHZhbHVlKTsKIH0KIAogc3RhdGljIFdlYktpdDo6
SFRUUENvb2tpZUFjY2VwdFBvbGljeSB0b0hUVFBDb29raWVBY2NlcHRQb2xpY3koTlNIVFRQQ29v
a2llQWNjZXB0UG9saWN5IHBvbGljeSkKQEAgLTIxMywxMiArMjEzLDEyIEBAIHN0YXRpYyBXZWJL
aXQ6OkhUVFBDb29raWVBY2NlcHRQb2xpY3kgdG8KIAogLSAodm9pZClfc2V0Q29va2llQWNjZXB0
UG9saWN5OihOU0hUVFBDb29raWVBY2NlcHRQb2xpY3kpcG9saWN5CiB7Ci0gICAgX2NvbnRleHQt
PnN1cHBsZW1lbnQ8V2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnNldEhUVFBDb29r
aWVBY2NlcHRQb2xpY3kodG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBvbGljeSkpOworICAgIF9w
cm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJLaXQ6OldlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+
c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSh0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5
KSk7CiB9CiAKIC0gKGlkKV9vYmplY3RGb3JCdW5kbGVQYXJhbWV0ZXI6KE5TU3RyaW5nICopcGFy
YW1ldGVyCiB7Ci0gICAgcmV0dXJuIFtfY29udGV4dC0+YnVuZGxlUGFyYW1ldGVycygpIG9iamVj
dEZvcktleTpwYXJhbWV0ZXJdOworICAgIHJldHVybiBbX3Byb2Nlc3NQb29sLT5idW5kbGVQYXJh
bWV0ZXJzKCkgb2JqZWN0Rm9yS2V5OnBhcmFtZXRlcl07CiB9CiAKIC0gKHZvaWQpX3NldE9iamVj
dDooaWQgPE5TQ29weWluZywgTlNTZWN1cmVDb2Rpbmc+KW9iamVjdCBmb3JCdW5kbGVQYXJhbWV0
ZXI6KE5TU3RyaW5nICopcGFyYW1ldGVyCkBAIC0yMzcsMTEgKzIzNywxMSBAQCAtICh2b2lkKV9z
ZXRPYmplY3Q6KGlkIDxOU0NvcHlpbmcsIE5TU2VjCiAgICAgfQogCiAgICAgaWYgKGNvcHkpCi0g
ICAgICAgIFtfY29udGV4dC0+ZW5zdXJlQnVuZGxlUGFyYW1ldGVycygpIHNldE9iamVjdDpjb3B5
LmdldCgpIGZvcktleTpwYXJhbWV0ZXJdOworICAgICAgICBbX3Byb2Nlc3NQb29sLT5lbnN1cmVC
dW5kbGVQYXJhbWV0ZXJzKCkgc2V0T2JqZWN0OmNvcHkuZ2V0KCkgZm9yS2V5OnBhcmFtZXRlcl07
CiAgICAgZWxzZQotICAgICAgICBbX2NvbnRleHQtPmVuc3VyZUJ1bmRsZVBhcmFtZXRlcnMoKSBy
ZW1vdmVPYmplY3RGb3JLZXk6cGFyYW1ldGVyXTsKKyAgICAgICAgW19wcm9jZXNzUG9vbC0+ZW5z
dXJlQnVuZGxlUGFyYW1ldGVycygpIHJlbW92ZU9iamVjdEZvcktleTpwYXJhbWV0ZXJdOwogCi0g
ICAgX2NvbnRleHQtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0
SW5qZWN0ZWRCdW5kbGVQYXJhbWV0ZXIocGFyYW1ldGVyLCBJUEM6OkRhdGFSZWZlcmVuY2Uoc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KFtkYXRhIGJ5dGVzXSksIFtkYXRhIGxlbmd0aF0pKSk7
CisgICAgX3Byb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nl
c3M6OlNldEluamVjdGVkQnVuZGxlUGFyYW1ldGVyKHBhcmFtZXRlciwgSVBDOjpEYXRhUmVmZXJl
bmNlKHN0YXRpY19jYXN0PGNvbnN0IHVpbnQ4X3QqPihbZGF0YSBieXRlc10pLCBbZGF0YSBsZW5n
dGhdKSkpOwogfQogCiAtIChpZCA8X1dLRG93bmxvYWREZWxlZ2F0ZT4pX2Rvd25sb2FkRGVsZWdh
dGUKQEAgLTI1Miw3ICsyNTIsNyBAQCAtIChpZCA8X1dLRG93bmxvYWREZWxlZ2F0ZT4pX2Rvd25s
b2FkRGVsCiAtICh2b2lkKV9zZXREb3dubG9hZERlbGVnYXRlOihpZCA8X1dLRG93bmxvYWREZWxl
Z2F0ZT4pZG93bmxvYWREZWxlZ2F0ZQogewogICAgIF9kb3dubG9hZERlbGVnYXRlID0gZG93bmxv
YWREZWxlZ2F0ZTsKLSAgICBfY29udGV4dC0+c2V0RG93bmxvYWRDbGllbnQoc3RkOjptYWtlX3Vu
aXF1ZTxXZWJLaXQ6OkRvd25sb2FkQ2xpZW50Pihkb3dubG9hZERlbGVnYXRlKSk7CisgICAgX3By
b2Nlc3NQb29sLT5zZXREb3dubG9hZENsaWVudChzdGQ6Om1ha2VfdW5pcXVlPFdlYktpdDo6RG93
bmxvYWRDbGllbnQ+KGRvd25sb2FkRGVsZWdhdGUpKTsKIH0KIAogQGVuZApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NQb29sSW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bv
b2xJbnRlcm5hbC5oCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLUHJvY2Vzc1Bvb2xJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw3ICsyOCw3IEBACiAjaWYgV0tfQVBJX0VOQUJMRUQKIAogI2ltcG9ydCAiV0tPYmplY3QuaCIK
LSNpbXBvcnQgIldlYkNvbnRleHQuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQb29sLmgiCiAKICNp
ZiBUQVJHRVRfT1NfSVBIT05FCiBAY2xhc3MgV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TOwpAQCAt
MzYsMTAgKzM2LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1pbmxpbmUgV0tQcm9jZXNz
UG9vbCAqd3JhcHBlcihXZWJDb250ZXh0JiBjb250ZXh0KQoraW5saW5lIFdLUHJvY2Vzc1Bvb2wg
KndyYXBwZXIoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQogewotICAgIEFTU0VSVChbY29u
dGV4dC53cmFwcGVyKCkgaXNLaW5kT2ZDbGFzczpbV0tQcm9jZXNzUG9vbCBjbGFzc11dKTsKLSAg
ICByZXR1cm4gKFdLUHJvY2Vzc1Bvb2wgKiljb250ZXh0LndyYXBwZXIoKTsKKyAgICBBU1NFUlQo
W3Byb2Nlc3NQb29sLndyYXBwZXIoKSBpc0tpbmRPZkNsYXNzOltXS1Byb2Nlc3NQb29sIGNsYXNz
XV0pOworICAgIHJldHVybiAoV0tQcm9jZXNzUG9vbCAqKXByb2Nlc3NQb29sLndyYXBwZXIoKTsK
IH0KIAogfQpAQCAtNDgsNyArNDgsNyBAQCBpbmxpbmUgV0tQcm9jZXNzUG9vbCAqd3JhcHBlcihX
ZWJDb250ZXh0CiBAcGFja2FnZQogICAgIFJldGFpblB0cjxfV0tQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24+IF9jb25maWd1cmF0aW9uOwogCi0gICAgQVBJOjpPYmplY3RTdG9yYWdlPFdlYktpdDo6
V2ViQ29udGV4dD4gX2NvbnRleHQ7CisgICAgQVBJOjpPYmplY3RTdG9yYWdlPFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2w+IF9wcm9jZXNzUG9vbDsKIH0KIAogI2lmIFRBUkdFVF9PU19JUEhPTkUKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1t
CShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTksMTIgKzU5LDEyIEBACiAjaW1wb3J0
ICJXS1dlYlZpZXdDb250ZW50UHJvdmlkZXIuaCIKICNpbXBvcnQgIldlYkJhY2tGb3J3YXJkTGlz
dC5oIgogI2ltcG9ydCAiV2ViQ2VydGlmaWNhdGVJbmZvLmgiCi0jaW1wb3J0ICJXZWJDb250ZXh0
LmgiCiAjaW1wb3J0ICJXZWJGb3JtU3VibWlzc2lvbkxpc3RlbmVyUHJveHkuaCIKICNpbXBvcnQg
IldlYktpdFN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCAiV2ViUGFnZUdyb3VwLmgiCiAjaW1w
b3J0ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgIldlYlByZWZlcmVuY2VzS2V5cy5oIgorI2lt
cG9ydCAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgogI2lt
cG9ydCAiX1dLRmluZERlbGVnYXRlLmgiCiAjaW1wb3J0ICJfV0tGb3JtRGVsZWdhdGUuaCIKQEAg
LTI3OCw3ICsyNzgsNyBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZy
CiAKICAgICBDR1JlY3QgYm91bmRzID0gc2VsZi5ib3VuZHM7CiAKLSAgICBXZWJLaXQ6OldlYkNv
bnRleHQmIGNvbnRleHQgPSAqW19jb25maWd1cmF0aW9uIHByb2Nlc3NQb29sXS0+X2NvbnRleHQ7
CisgICAgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wgPSAqW19jb25maWd1cmF0
aW9uIHByb2Nlc3NQb29sXS0+X3Byb2Nlc3NQb29sOwogCiAgICAgV2ViS2l0OjpXZWJQYWdlQ29u
ZmlndXJhdGlvbiB3ZWJQYWdlQ29uZmlndXJhdGlvbjsKICAgICB3ZWJQYWdlQ29uZmlndXJhdGlv
bi5wcmVmZXJlbmNlcyA9IFtfY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10tPl9wcmVmZXJlbmNl
cy5nZXQoKTsKQEAgLTMxNCw3ICszMTQsNyBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFt
ZTooQ0dSZWN0KWZyCiAKICAgICBbc2VsZiBhZGRTdWJ2aWV3Ol9zY3JvbGxWaWV3LmdldCgpXTsK
IAotICAgIF9jb250ZW50VmlldyA9IGFkb3B0TlMoW1tXS0NvbnRlbnRWaWV3IGFsbG9jXSBpbml0
V2l0aEZyYW1lOmJvdW5kcyBjb250ZXh0OmNvbnRleHQgY29uZmlndXJhdGlvbjpXVEY6Om1vdmUo
d2ViUGFnZUNvbmZpZ3VyYXRpb24pIHdlYlZpZXc6c2VsZl0pOworICAgIF9jb250ZW50VmlldyA9
IGFkb3B0TlMoW1tXS0NvbnRlbnRWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOmJvdW5kcyBwcm9j
ZXNzUG9vbDpwcm9jZXNzUG9vbCBjb25maWd1cmF0aW9uOldURjo6bW92ZSh3ZWJQYWdlQ29uZmln
dXJhdGlvbikgd2ViVmlldzpzZWxmXSk7CiAKICAgICBfcGFnZSA9IFtfY29udGVudFZpZXcgcGFn
ZV07CiAgICAgX3BhZ2UtPnNldERldmljZU9yaWVudGF0aW9uKGRldmljZU9yaWVudGF0aW9uKCkp
OwpAQCAtMzQyLDcgKzM0Miw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihDR1Jl
Y3QpZnIKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIF93a1ZpZXcgPSBhZG9wdE5T
KFtbV0tWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOmJvdW5kcyBjb250ZXh0OmNvbnRleHQgY29u
ZmlndXJhdGlvbjpXVEY6Om1vdmUod2ViUGFnZUNvbmZpZ3VyYXRpb24pIHdlYlZpZXc6c2VsZl0p
OworICAgIF93a1ZpZXcgPSBhZG9wdE5TKFtbV0tWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOmJv
dW5kcyBwcm9jZXNzUG9vbDpwcm9jZXNzUG9vbCBjb25maWd1cmF0aW9uOldURjo6bW92ZSh3ZWJQ
YWdlQ29uZmlndXJhdGlvbikgd2ViVmlldzpzZWxmXSk7CiAgICAgW3NlbGYgYWRkU3Vidmlldzpf
d2tWaWV3LmdldCgpXTsKICAgICBfcGFnZSA9IFdlYktpdDo6dG9JbXBsKFtfd2tWaWV3IHBhZ2VS
ZWZdKTsKIApAQCAtMzc5LDcgKzM3OSw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aENvZGVy
OihOU0NvZGVyICoKIC0gKHZvaWQpZGVhbGxvYwogewogICAgIGlmIChfcmVtb3RlT2JqZWN0UmVn
aXN0cnkpCi0gICAgICAgIF9wYWdlLT5wcm9jZXNzKCkuY29udGV4dCgpLnJlbW92ZU1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlT2JqZWN0UmVnaXN0cnk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgX3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNz
UG9vbCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlT2JqZWN0UmVnaXN0
cnk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgX3BhZ2UtPnBhZ2VJRCgpKTsKIAogICAgIF9wYWdl
LT5jbG9zZSgpOwogCkBAIC0xNjIyLDcgKzE2MjIsNyBAQCAtIChfV0tSZW1vdGVPYmplY3RSZWdp
c3RyeSAqKV9yZW1vdGVPYmplCiB7CiAgICAgaWYgKCFfcmVtb3RlT2JqZWN0UmVnaXN0cnkpIHsK
ICAgICAgICAgX3JlbW90ZU9iamVjdFJlZ2lzdHJ5ID0gYWRvcHROUyhbW19XS1JlbW90ZU9iamVj
dFJlZ2lzdHJ5IGFsbG9jXSBfaW5pdFdpdGhNZXNzYWdlU2VuZGVyOipfcGFnZV0pOwotICAgICAg
ICBfcGFnZS0+cHJvY2VzcygpLmNvbnRleHQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OlJlbW90ZU9iamVjdFJlZ2lzdHJ5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIF9wYWdlLT5wYWdl
SUQoKSwgW19yZW1vdGVPYmplY3RSZWdpc3RyeSByZW1vdGVPYmplY3RSZWdpc3RyeV0pOworICAg
ICAgICBfcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpSZW1vdGVPYmplY3RSZWdpc3RyeTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBfcGFn
ZS0+cGFnZUlEKCksIFtfcmVtb3RlT2JqZWN0UmVnaXN0cnkgcmVtb3RlT2JqZWN0UmVnaXN0cnld
KTsKICAgICB9CiAKICAgICByZXR1cm4gX3JlbW90ZU9iamVjdFJlZ2lzdHJ5LmdldCgpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24g
MTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC02NiwxMyArNjYsMTMgQEAKICNpbXBvcnQgIldLVmlld0ludGVybmFs
LmgiCiAjaW1wb3J0ICJXS1ZpZXdQcml2YXRlLmgiCiAjaW1wb3J0ICJXZWJCYWNrRm9yd2FyZExp
c3QuaCIKLSNpbXBvcnQgIldlYkNvbnRleHQuaCIKICNpbXBvcnQgIldlYkV2ZW50RmFjdG9yeS5o
IgogI2ltcG9ydCAiV2ViS2l0MkluaXRpYWxpemUuaCIKICNpbXBvcnQgIldlYlBhZ2UuaCIKICNp
bXBvcnQgIldlYlBhZ2VHcm91cC5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0
ICJXZWJQcmVmZXJlbmNlcy5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbXBvcnQg
IldlYlByb2Nlc3NQcm94eS5oIgogI2ltcG9ydCAiV2ViU3lzdGVtSW50ZXJmYWNlLmgiCiAjaW1w
b3J0ICJfV0tUaHVtYm5haWxWaWV3SW50ZXJuYWwuaCIKQEAgLTMzOSw3ICszMzksNyBAQCAtICh2
b2lkKWRlYWxsb2MKICAgICBpZiAoY2FuTG9hZExVTm90aWZpY2F0aW9uUG9wb3ZlcldpbGxDbG9z
ZSgpKQogICAgICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92
ZU9ic2VydmVyOnNlbGYgbmFtZTpnZXRMVU5vdGlmaWNhdGlvblBvcG92ZXJXaWxsQ2xvc2UoKSBv
YmplY3Q6bmlsXTsKIAotICAgIFdlYkNvbnRleHQ6OnN0YXRpc3RpY3MoKS53a1ZpZXdDb3VudC0t
OworICAgIFdlYlByb2Nlc3NQb29sOjpzdGF0aXN0aWNzKCkud2tWaWV3Q291bnQtLTsKIAogICAg
IFtzdXBlciBkZWFsbG9jXTsKIH0KQEAgLTI3MTIsNyArMjcxMiw3IEBAIC0gKHZvaWQpX2FjdGl2
ZVNwYWNlRGlkQ2hhbmdlOihOU05vdGlmaWMKIAogLSAodm9pZClfYXBwbGljYXRpb25XaWxsVGVy
bWluYXRlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgogewotICAgIF9kYXRhLT5fcGFn
ZS0+cHJvY2VzcygpLmNvbnRleHQoKS5hcHBsaWNhdGlvbldpbGxUZXJtaW5hdGUoKTsKKyAgICBf
ZGF0YS0+X3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpLmFwcGxpY2F0aW9uV2lsbFRlcm1p
bmF0ZSgpOwogfQogCiAtICh2b2lkKV9kaWN0aW9uYXJ5TG9va3VwUG9wb3ZlcldpbGxDbG9zZToo
TlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb24KQEAgLTM1NTgsNyArMzU1OCw3IEBAIC0gKHZv
aWQpX3NldFByaW1hcnlUcmFja2luZ0FyZWE6KE5TVHJhY2sKICAgICBbc2VsZiBhZGRUcmFja2lu
Z0FyZWE6dHJhY2tpbmdBcmVhXTsKIH0KIAotLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6
KE5TUmVjdClmcmFtZSBjb250ZXh0OihXZWJDb250ZXh0Jiljb250ZXh0IGNvbmZpZ3VyYXRpb246
KFdlYlBhZ2VDb25maWd1cmF0aW9uKXdlYlBhZ2VDb25maWd1cmF0aW9uIHdlYlZpZXc6KFdLV2Vi
VmlldyAqKXdlYlZpZXcKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihOU1JlY3QpZnJh
bWUgcHJvY2Vzc1Bvb2w6KFdlYlByb2Nlc3NQb29sJilwcm9jZXNzUG9vbCBjb25maWd1cmF0aW9u
OihXZWJQYWdlQ29uZmlndXJhdGlvbil3ZWJQYWdlQ29uZmlndXJhdGlvbiB3ZWJWaWV3OihXS1dl
YlZpZXcgKil3ZWJWaWV3CiB7CiAgICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1l
XTsKICAgICBpZiAoIXNlbGYpCkBAIC0zNTgwLDggKzM1ODAsOCBAQCAtIChpbnN0YW5jZXR5cGUp
aW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyCiAgICAgW3NlbGYgYWRkVHJhY2tpbmdBcmVhOl9kYXRh
LT5fcHJpbWFyeVRyYWNraW5nQXJlYS5nZXQoKV07CiAKICAgICBfZGF0YS0+X3BhZ2VDbGllbnQg
PSBzdGQ6Om1ha2VfdW5pcXVlPFBhZ2VDbGllbnRJbXBsPihzZWxmLCB3ZWJWaWV3KTsKLSAgICBf
ZGF0YS0+X3BhZ2UgPSBjb250ZXh0LmNyZWF0ZVdlYlBhZ2UoKl9kYXRhLT5fcGFnZUNsaWVudCwg
V1RGOjptb3ZlKHdlYlBhZ2VDb25maWd1cmF0aW9uKSk7Ci0gICAgX2RhdGEtPl9wYWdlLT5zZXRB
ZGRzVmlzaXRlZExpbmtzKGNvbnRleHQuaGlzdG9yeUNsaWVudCgpLmFkZHNWaXNpdGVkTGlua3Mo
KSk7CisgICAgX2RhdGEtPl9wYWdlID0gcHJvY2Vzc1Bvb2wuY3JlYXRlV2ViUGFnZSgqX2RhdGEt
Pl9wYWdlQ2xpZW50LCBXVEY6Om1vdmUod2ViUGFnZUNvbmZpZ3VyYXRpb24pKTsKKyAgICBfZGF0
YS0+X3BhZ2UtPnNldEFkZHNWaXNpdGVkTGlua3MocHJvY2Vzc1Bvb2wuaGlzdG9yeUNsaWVudCgp
LmFkZHNWaXNpdGVkTGlua3MoKSk7CiAKICAgICBfZGF0YS0+X3BhZ2UtPnNldEludHJpbnNpY0Rl
dmljZVNjYWxlRmFjdG9yKFtzZWxmIF9pbnRyaW5zaWNEZXZpY2VTY2FsZUZhY3Rvcl0pOwogICAg
IF9kYXRhLT5fcGFnZS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKQEAgLTM2MDMsNyArMzYwMyw3IEBA
IC0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihOU1JlY3QpZnIKICAgICAvLyBFeHBsaWNp
dGx5IHNldCB0aGUgbGF5ZXIgY29udGVudHMgcGxhY2VtZW50IHNvIEFwcEtpdCB3aWxsIG1ha2Ug
c3VyZSB0aGF0IG91ciBsYXllciBoYXMgbWFza3NUb0JvdW5kcyBzZXQgdG8gWUVTLgogICAgIHNl
bGYubGF5ZXJDb250ZW50c1BsYWNlbWVudCA9IE5TVmlld0xheWVyQ29udGVudHNQbGFjZW1lbnRU
b3BMZWZ0OwogCi0gICAgV2ViQ29udGV4dDo6c3RhdGlzdGljcygpLndrVmlld0NvdW50Kys7Cisg
ICAgV2ViUHJvY2Vzc1Bvb2w6OnN0YXRpc3RpY3MoKS53a1ZpZXdDb3VudCsrOwogCiAgICAgTlNO
b3RpZmljYXRpb25DZW50ZXIqIHdvcmtzcGFjZU5vdGlmaWNhdGlvbkNlbnRlciA9IFtbTlNXb3Jr
c3BhY2Ugc2hhcmVkV29ya3NwYWNlXSBub3RpZmljYXRpb25DZW50ZXJdOwogICAgIFt3b3Jrc3Bh
Y2VOb3RpZmljYXRpb25DZW50ZXIgYWRkT2JzZXJ2ZXI6c2VsZiBzZWxlY3RvcjpAc2VsZWN0b3Io
X2FjdGl2ZVNwYWNlRGlkQ2hhbmdlOikgbmFtZTpOU1dvcmtzcGFjZUFjdGl2ZVNwYWNlRGlkQ2hh
bmdlTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwpAQCAtMzc5NCw3ICszNzk0LDcgQEAgLSAoaWQp
aW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIGNvbnRleAogICAgIHdlYlBhZ2VDb25maWd1cmF0
aW9uLnBhZ2VHcm91cCA9IHRvSW1wbChwYWdlR3JvdXBSZWYpOwogICAgIHdlYlBhZ2VDb25maWd1
cmF0aW9uLnJlbGF0ZWRQYWdlID0gdG9JbXBsKHJlbGF0ZWRQYWdlKTsKIAotICAgIHJldHVybiBb
c2VsZiBpbml0V2l0aEZyYW1lOmZyYW1lIGNvbnRleHQ6KnRvSW1wbChjb250ZXh0UmVmKSBjb25m
aWd1cmF0aW9uOndlYlBhZ2VDb25maWd1cmF0aW9uIHdlYlZpZXc6bmlsXTsKKyAgICByZXR1cm4g
W3NlbGYgaW5pdFdpdGhGcmFtZTpmcmFtZSBwcm9jZXNzUG9vbDoqdG9JbXBsKGNvbnRleHRSZWYp
IGNvbmZpZ3VyYXRpb246d2ViUGFnZUNvbmZpZ3VyYXRpb24gd2ViVmlldzpuaWxdOwogfQogCiAj
aWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDgwCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgJKHJldmlz
aW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0lu
dGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiBjbGFzcyBEcmF3aW5nQXJlYVByb3h5OwogY2xhc3MgTGF5ZXJUcmVlQ29udGV4dDsKIGNs
YXNzIFZpZXdTbmFwc2hvdDsKLWNsYXNzIFdlYkNvbnRleHQ7CitjbGFzcyBXZWJQcm9jZXNzUG9v
bDsKIHN0cnVjdCBBY3Rpb25NZW51SGl0VGVzdFJlc3VsdDsKIHN0cnVjdCBDb2xvclNwYWNlRGF0
YTsKIHN0cnVjdCBFZGl0b3JTdGF0ZTsKQEAgLTY5LDcgKzY5LDcgQEAgc3RydWN0IFdlYlBhZ2VD
b25maWd1cmF0aW9uOwogCiBAaW50ZXJmYWNlIFdLVmlldyAoKQogI2lmIFdLX0FQSV9FTkFCTEVE
Ci0tIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lIGNvbnRleHQ6KFdl
YktpdDo6V2ViQ29udGV4dCYpY29udGV4dCBjb25maWd1cmF0aW9uOihXZWJLaXQ6OldlYlBhZ2VD
b25maWd1cmF0aW9uKXdlYlBhZ2VDb25maWd1cmF0aW9uIHdlYlZpZXc6KFdLV2ViVmlldyAqKXdl
YlZpZXc7CistIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lIHByb2Nl
c3NQb29sOihXZWJLaXQ6OldlYlByb2Nlc3NQb29sJilwcm9jZXNzUG9vbCBjb25maWd1cmF0aW9u
OihXZWJLaXQ6OldlYlBhZ2VDb25maWd1cmF0aW9uKXdlYlBhZ2VDb25maWd1cmF0aW9uIHdlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXc7CiAjZW5kaWYKIAogLSAoc3RkOjp1bmlxdWVfcHRyPFdl
YktpdDo6RHJhd2luZ0FyZWFQcm94eT4pX2NyZWF0ZURyYXdpbmdBcmVhUHJveHk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvRG93bmxvYWRDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvRG93bmxvYWRDbGllbnQuaAkocmV2
aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL0Rvd25sb2Fk
Q2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEzICs0OCwxMyBAQCBwdWJsaWM6CiAgICAg
CiBwcml2YXRlOgogICAgIC8vIEZyb20gQVBJOjpEb3dubG9hZENsaWVudAotICAgIHZpcnR1YWwg
dm9pZCBkaWRTdGFydChXZWJDb250ZXh0KiwgRG93bmxvYWRQcm94eSopOwotICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29udGV4dCosIERvd25sb2FkUHJveHkqLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhKFdlYkNvbnRleHQqLCBEb3dubG9hZFByb3h5KiwgdWludDY0X3QgbGVuZ3RoKTsKLSAg
ICB2aXJ0dWFsIFN0cmluZyBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShX
ZWJDb250ZXh0KiwgRG93bmxvYWRQcm94eSosIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wm
IGFsbG93T3ZlcndyaXRlUGFyYW0pOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2goV2ViQ29u
dGV4dCosIERvd25sb2FkUHJveHkqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChXZWJDb250
ZXh0KiwgRG93bmxvYWRQcm94eSosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsKFdlYkNvbnRleHQqLCBEb3dubG9hZFByb3h5Kik7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0KFdlYlByb2Nlc3NQb29sKiwgRG93bmxvYWRQcm94eSop
OworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoV2ViUHJvY2Vzc1Bvb2wqLCBE
b3dubG9hZFByb3h5KiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShXZWJQcm9jZXNzUG9vbCosIERvd25sb2FkUHJveHkq
LCB1aW50NjRfdCBsZW5ndGgpOworICAgIHZpcnR1YWwgU3RyaW5nIGRlY2lkZURlc3RpbmF0aW9u
V2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdlYlByb2Nlc3NQb29sKiwgRG93bmxvYWRQcm94eSosIGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wmIGFsbG93T3ZlcndyaXRlUGFyYW0pOworICAgIHZp
cnR1YWwgdm9pZCBkaWRGaW5pc2goV2ViUHJvY2Vzc1Bvb2wqLCBEb3dubG9hZFByb3h5Kik7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoV2ViUHJvY2Vzc1Bvb2wqLCBEb3dubG9hZFByb3h5Kiwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5j
ZWwoV2ViUHJvY2Vzc1Bvb2wqLCBEb3dubG9hZFByb3h5Kik7CiAKICAgICBXZWFrT2JqQ1B0cjxp
ZCA8X1dLRG93bmxvYWREZWxlZ2F0ZT4+IG1fZGVsZWdhdGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db2NvYS9Eb3dubG9hZENsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvRG93bmxvYWRDbGllbnQubW0JKHJldmlzaW9uIDE3
NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9Eb3dubG9hZENsaWVudC5t
bQkod29ya2luZyBjb3B5KQpAQCAtNTQsMjUgKzU0LDI1IEBAIERvd25sb2FkQ2xpZW50OjpEb3du
bG9hZENsaWVudChpZCA8X1dLRG8KICAgICBtX2RlbGVnYXRlTWV0aG9kcy5kb3dubG9hZERpZENh
bmNlbCA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF9kb3dubG9hZERp
ZENhbmNlbDopXTsKIH0KIAotdm9pZCBEb3dubG9hZENsaWVudDo6ZGlkU3RhcnQoV2ViQ29udGV4
dCosIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHkpCit2b2lkIERvd25sb2FkQ2xpZW50Ojpk
aWRTdGFydChXZWJQcm9jZXNzUG9vbCosIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHkpCiB7
CiAgICAgaWYgKG1fZGVsZWdhdGVNZXRob2RzLmRvd25sb2FkRGlkU3RhcnQpCiAgICAgICAgIFtt
X2RlbGVnYXRlLmdldCgpIF9kb3dubG9hZERpZFN0YXJ0OndyYXBwZXIoKmRvd25sb2FkUHJveHkp
XTsKIH0KIAotdm9pZCBEb3dubG9hZENsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvbnRl
eHQqLCBEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSkKK3ZvaWQgRG93bmxvYWRDbGllbnQ6OmRpZFJlY2VpdmVSZXNw
b25zZShXZWJQcm9jZXNzUG9vbCosIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHksIGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIGlmIChtX2RlbGVn
YXRlTWV0aG9kcy5kb3dubG9hZERpZFJlY2VpdmVSZXNwb25zZSkKICAgICAgICAgW21fZGVsZWdh
dGUuZ2V0KCkgX2Rvd25sb2FkOndyYXBwZXIoKmRvd25sb2FkUHJveHkpIGRpZFJlY2VpdmVSZXNw
b25zZTpyZXNwb25zZS5uc1VSTFJlc3BvbnNlKCldOwogfQogCi12b2lkIERvd25sb2FkQ2xpZW50
OjpkaWRSZWNlaXZlRGF0YShXZWJDb250ZXh0KiwgRG93bmxvYWRQcm94eSogZG93bmxvYWRQcm94
eSwgdWludDY0X3QgbGVuZ3RoKQordm9pZCBEb3dubG9hZENsaWVudDo6ZGlkUmVjZWl2ZURhdGEo
V2ViUHJvY2Vzc1Bvb2wqLCBEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5LCB1aW50NjRfdCBs
ZW5ndGgpCiB7CiAgICAgaWYgKG1fZGVsZWdhdGVNZXRob2RzLmRvd25sb2FkRGlkUmVjZWl2ZURh
dGEpCiAgICAgICAgIFttX2RlbGVnYXRlLmdldCgpIF9kb3dubG9hZDp3cmFwcGVyKCpkb3dubG9h
ZFByb3h5KSBkaWRSZWNlaXZlRGF0YTpsZW5ndGhdOwogfQogCi1TdHJpbmcgRG93bmxvYWRDbGll
bnQ6OmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdlYkNvbnRleHQqLCBE
b3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5LCBjb25zdCBTdHJpbmcmIGZpbGVuYW1lLCBib29s
JiBhbGxvd092ZXJ3cml0ZVBhcmFtKQorU3RyaW5nIERvd25sb2FkQ2xpZW50OjpkZWNpZGVEZXN0
aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXZWJQcm9jZXNzUG9vbCosIERvd25sb2FkUHJv
eHkqIGRvd25sb2FkUHJveHksIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGJvb2wmIGFsbG93T3Zl
cndyaXRlUGFyYW0pCiB7CiAgICAgaWYgKCFtX2RlbGVnYXRlTWV0aG9kcy5kb3dubG9hZERlY2lk
ZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lQWxsb3dPdmVyd3JpdGUpCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKQEAgLTgzLDE5ICs4MywxOSBAQCBTdHJpbmcgRG93bmxvYWRDbGll
bnQ6OmRlY2lkZURlc3RpbmF0aW9uCiAgICAgcmV0dXJuIGRlc3RpbmF0aW9uOwogfQogCi12b2lk
IERvd25sb2FkQ2xpZW50OjpkaWRGaW5pc2goV2ViQ29udGV4dCosIERvd25sb2FkUHJveHkqIGRv
d25sb2FkUHJveHkpCit2b2lkIERvd25sb2FkQ2xpZW50OjpkaWRGaW5pc2goV2ViUHJvY2Vzc1Bv
b2wqLCBEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5KQogewogICAgIGlmIChtX2RlbGVnYXRl
TWV0aG9kcy5kb3dubG9hZERpZEZpbmlzaCkKICAgICAgICAgW21fZGVsZWdhdGUuZ2V0KCkgX2Rv
d25sb2FkRGlkRmluaXNoOndyYXBwZXIoKmRvd25sb2FkUHJveHkpXTsKIH0KIAotdm9pZCBEb3du
bG9hZENsaWVudDo6ZGlkRmFpbChXZWJDb250ZXh0KiwgRG93bmxvYWRQcm94eSogZG93bmxvYWRQ
cm94eSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IpCit2b2lkIERvd25sb2Fk
Q2xpZW50OjpkaWRGYWlsKFdlYlByb2Nlc3NQb29sKiwgRG93bmxvYWRQcm94eSogZG93bmxvYWRQ
cm94eSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAgICAgaWYgKG1f
ZGVsZWdhdGVNZXRob2RzLmRvd25sb2FkRGlkRmFpbCkKICAgICAgICAgW21fZGVsZWdhdGUuZ2V0
KCkgX2Rvd25sb2FkOndyYXBwZXIoKmRvd25sb2FkUHJveHkpIGRpZEZhaWxXaXRoRXJyb3I6ZXJy
b3IubnNFcnJvcigpXTsKIH0KIAotdm9pZCBEb3dubG9hZENsaWVudDo6ZGlkQ2FuY2VsKFdlYkNv
bnRleHQqLCBEb3dubG9hZFByb3h5KiBkb3dubG9hZFByb3h5KQordm9pZCBEb3dubG9hZENsaWVu
dDo6ZGlkQ2FuY2VsKFdlYlByb2Nlc3NQb29sKiwgRG93bmxvYWRQcm94eSogZG93bmxvYWRQcm94
eSkKIHsKICAgICBpZiAobV9kZWxlZ2F0ZU1ldGhvZHMuZG93bmxvYWREaWRDYW5jZWwpCiAgICAg
ICAgIFttX2RlbGVnYXRlLmdldCgpIF9kb3dubG9hZERpZENhbmNlbDp3cmFwcGVyKCpkb3dubG9h
ZFByb3h5KV07CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Bvb2xDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29j
b2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQkocmV2aXNpb24gMTc3NjM1KQkoZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNYWMubW06MTc3NjM1KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIldlYkNvbnRleHQuaCIKKworI2ltcG9ydCAiUGx1Z2luUHJvY2Vzc01hbmFnZXIu
aCIKKyNpbXBvcnQgIlNhbmRib3hVdGlsaXRpZXMuaCIKKyNpbXBvcnQgIlRleHRDaGVja2VyLmgi
CisjaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXJJbnRlcm5hbC5oIgorI2ltcG9y
dCAiV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVySW50ZXJuYWwuaCIKKyNpbXBvcnQgIldlYktp
dFN5c3RlbUludGVyZmFjZS5oIgorI2ltcG9ydCAiV2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9T
LmgiCisjaW1wb3J0ICJXZWJQYWdlR3JvdXAuaCIKKyNpbXBvcnQgIldlYlByZWZlcmVuY2VzS2V5
cy5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgorI2ltcG9ydCAi
V2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW1wb3J0ICJXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLmgi
CisjaW1wb3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQSS5oPgorI2ltcG9ydCA8V2ViQ29yZS9Db2xv
ci5oPgorI2ltcG9ydCA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW1wb3J0IDxXZWJDb3JlL05v
dEltcGxlbWVudGVkLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtUGFzdGVib2FyZC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KKyNpbXBvcnQgPHN5cy9wYXJhbS5oPgor
CisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmgiCisjaW1wb3J0ICJOZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCisjZW5k
aWYKKworI2lmIFBMQVRGT1JNKElPUykKKyNpbXBvcnQgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0
aW9uQ2hlY2tzSU9TLmg+CisjZWxzZQorI2ltcG9ydCA8UXVhcnR6Q29yZS9DQVJlbW90ZUxheWVy
U2VydmVyLmg+CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK05TU3RyaW5n
ICpXZWJEYXRhYmFzZURpcmVjdG9yeURlZmF1bHRzS2V5ID0gQCJXZWJEYXRhYmFzZURpcmVjdG9y
eSI7CitOU1N0cmluZyAqV2ViS2l0TG9jYWxDYWNoZURlZmF1bHRzS2V5ID0gQCJXZWJLaXRMb2Nh
bENhY2hlIjsKK05TU3RyaW5nICpXZWJTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXkgPSBAIldl
YktpdExvY2FsU3RvcmFnZURhdGFiYXNlUGF0aFByZWZlcmVuY2VLZXkiOworTlNTdHJpbmcgKldl
YktpdEtlcm5pbmdBbmRMaWdhdHVyZXNFbmFibGVkQnlEZWZhdWx0RGVmYXVsdHNLZXkgPSBAIldl
YktpdEtlcm5pbmdBbmRMaWdhdHVyZXNFbmFibGVkQnlEZWZhdWx0IjsKK05TU3RyaW5nICpXZWJL
aXRKU0NKSVRFbmFibGVkRGVmYXVsdHNLZXkgPSBAIldlYktpdEpTQ0pJVEVuYWJsZWREZWZhdWx0
c0tleSI7CitOU1N0cmluZyAqV2ViS2l0SlNDRlRMSklURW5hYmxlZERlZmF1bHRzS2V5ID0gQCJX
ZWJLaXRKU0NGVExKSVRFbmFibGVkRGVmYXVsdHNLZXkiOworTlNTdHJpbmcgKldlYktpdE1lZGlh
S2V5c1N0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleSA9IEAiV2ViS2l0TWVkaWFLZXlzU3RvcmFn
ZURpcmVjdG9yeSI7CisKKyNpZiAhUExBVEZPUk0oSU9TKQorc3RhdGljIE5TU3RyaW5nICpXZWJL
aXRBcHBsaWNhdGlvbkRpZENoYW5nZUFjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VO
b3RpZmljYXRpb24gPSBAIk5TQXBwbGljYXRpb25EaWRDaGFuZ2VBY2Nlc3NpYmlsaXR5RW5oYW5j
ZWRVc2VySW50ZXJmYWNlTm90aWZpY2F0aW9uIjsKKyNlbmRpZgorCisvLyBGSVhNRTogPHJkYXI6
Ly9wcm9ibGVtLzkxMzg4MTc+IC0gQWZ0ZXIgdGhpcyAiYmFja3dhcmRzIGNvbXBhdGliaWxpdHki
IHJhZGFyIGlzIHJlbW92ZWQsIHRoaXMgY29kZSBzaG91bGQgYmUgcmVtb3ZlZCB0byBvbmx5IHJl
dHVybiBhbiBlbXB0eSBTdHJpbmcuCitOU1N0cmluZyAqV2ViSWNvbkRhdGFiYXNlRGlyZWN0b3J5
RGVmYXVsdHNLZXkgPSBAIldlYkljb25EYXRhYmFzZURpcmVjdG9yeURlZmF1bHRzS2V5IjsKKwor
I2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCitzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJL
aXQySFRUUFByb3h5RGVmYXVsdHNLZXkgPSBAIldlYktpdDJIVFRQUHJveHkiOworc3RhdGljIE5T
U3RyaW5nICogY29uc3QgV2ViS2l0MkhUVFBTUHJveHlEZWZhdWx0c0tleSA9IEAiV2ViS2l0MkhU
VFBTUHJveHkiOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitOU1N0cmluZyAqU2No
ZW1lRm9yQ3VzdG9tUHJvdG9jb2xSZWdpc3RlcmVkTm90aWZpY2F0aW9uTmFtZSA9IEAiV2ViS2l0
U2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2xSZWdpc3RlcmVkTm90aWZpY2F0aW9uIjsKK05TU3RyaW5n
ICpTY2hlbWVGb3JDdXN0b21Qcm90b2NvbFVucmVnaXN0ZXJlZE5vdGlmaWNhdGlvbk5hbWUgPSBA
IldlYktpdFNjaGVtZUZvckN1c3RvbVByb3RvY29sVW5yZWdpc3RlcmVkTm90aWZpY2F0aW9uIjsK
Kworc3RhdGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCit7CisgICAgc3Rh
dGljIGJvb2wgZGlkUmVnaXN0ZXI7CisgICAgaWYgKGRpZFJlZ2lzdGVyKQorICAgICAgICByZXR1
cm47CisKKyAgICBkaWRSZWdpc3RlciA9IHRydWU7CisgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAq
cmVnaXN0cmF0aW9uRGljdGlvbmFyeSA9IFtOU011dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnld
OworICAgIAorICAgIFtyZWdpc3RyYXRpb25EaWN0aW9uYXJ5IHNldE9iamVjdDpbTlNOdW1iZXIg
bnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6V2ViS2l0SlNDSklURW5hYmxlZERlZmF1bHRzS2V5
XTsKKyAgICBbcmVnaXN0cmF0aW9uRGljdGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJl
cldpdGhCb29sOllFU10gZm9yS2V5OldlYktpdEpTQ0ZUTEpJVEVuYWJsZWREZWZhdWx0c0tleV07
CisgICAgCisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJ
UkVEID49IDEwOTAKKyAgICBbcmVnaXN0cmF0aW9uRGljdGlvbmFyeSBzZXRPYmplY3Q6W05TTnVt
YmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OldlYktpdEtlcm5pbmdBbmRMaWdhdHVyZXNF
bmFibGVkQnlEZWZhdWx0RGVmYXVsdHNLZXldOworI2VuZGlmCisKKyAgICBbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSByZWdpc3RlckRlZmF1bHRzOnJlZ2lzdHJhdGlvbkRp
Y3Rpb25hcnldOworfQorCit2b2lkIFdlYkNvbnRleHQ6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lv
blN0YXRlKCkKK3sKKyNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQorICAgIGlmIChtX3VzZXNO
ZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJs
ZWQoKSk7CisjZW5kaWYKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIGlm
ICghbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCkpCisg
ICAgICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXJQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRv
a2VuID0gbnVsbHB0cjsKKyAgICBlbHNlIGlmICghbV9wbHVnaW5Qcm9jZXNzTWFuYWdlclByb2Nl
c3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4pCisgICAgICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFn
ZXJQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2VuID0gUGx1Z2luUHJvY2Vzc01hbmFnZXI6
OnNoYXJlZCgpLnByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4oKTsKKyNlbmRpZgorfQor
CitOU011dGFibGVEaWN0aW9uYXJ5ICpXZWJDb250ZXh0OjplbnN1cmVCdW5kbGVQYXJhbWV0ZXJz
KCkKK3sKKyAgICBpZiAoIW1fYnVuZGxlUGFyYW1ldGVycykKKyAgICAgICAgbV9idW5kbGVQYXJh
bWV0ZXJzID0gYWRvcHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKKwor
ICAgIHJldHVybiBtX2J1bmRsZVBhcmFtZXRlcnMuZ2V0KCk7Cit9CisKK3ZvaWQgV2ViQ29udGV4
dDo6cGxhdGZvcm1Jbml0aWFsaXplKCkKK3sKKyAgICByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVl
ZGVkKCk7CisgICAgcmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKKworI2lmIFBMQVRG
T1JNKElPUykKKyAgICBXZWJLaXQ6OldlYk1lbW9yeVByZXNzdXJlSGFuZGxlcjo6c2hhcmVkKCk7
CisjZW5kaWYKK30KKworU3RyaW5nIFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdEFwcGxpY2F0
aW9uQ2FjaGVEaXJlY3RvcnkoKSBjb25zdAoreworICAgIE5TU3RyaW5nICphcHBOYW1lID0gW1tO
U0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXTsKKyAgICBpZiAoIWFwcE5hbWUp
CisgICAgICAgIGFwcE5hbWUgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHByb2Nlc3NO
YW1lXTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gVGhpcyBxdWlyayB1c2VkIHRvIG1ha2Ug
dGhlc2UgYXBwcyBzaGFyZSBhcHBsaWNhdGlvbiBjYWNoZSBzdG9yYWdlLCBidXQgZG9lc24ndCBh
Y2NvbXBsaXNoIHRoYXQgYW55IG1vcmUuCisgICAgLy8gUHJlc2VydmluZyBpdCBhdm9pZHMgdGhl
IG5lZWQgdG8gbWlncmF0ZSBkYXRhIHdoZW4gdXBncmFkaW5nLgorICAgIGlmIChhcHBsaWNhdGlv
bklzTW9iaWxlU2FmYXJpKCkgfHwgYXBwbGljYXRpb25Jc1dlYkFwcCgpKQorICAgICAgICBhcHBO
YW1lID0gQCJjb20uYXBwbGUuV2ViQXBwQ2FjaGUiOworI2VuZGlmCisKKyAgICBBU1NFUlQoYXBw
TmFtZSk7CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgTlNTdHJpbmcgKmNhY2hlRGlyID0gW05T
SG9tZURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIkxpYnJhcnkv
Q2FjaGVzIl07CisjZWxzZQorICAgIGNoYXIgY2FjaGVEaXJlY3RvcnlbTUFYUEFUSExFTl07Cisg
ICAgc2l6ZV90IGNhY2hlRGlyZWN0b3J5TGVuID0gY29uZnN0cihfQ1NfREFSV0lOX1VTRVJfQ0FD
SEVfRElSLCBjYWNoZURpcmVjdG9yeSwgTUFYUEFUSExFTik7CisgICAgaWYgKCFjYWNoZURpcmVj
dG9yeUxlbikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgTlNTdHJpbmcgKmNhY2hl
RGlyID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBzdHJpbmdXaXRoRmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uOmNhY2hlRGlyZWN0b3J5IGxlbmd0aDpjYWNoZURpcmVjdG9yeUxlbiAt
IDFdOworI2VuZGlmCisgICAgTlNTdHJpbmcqIGNhY2hlUGF0aCA9IFtjYWNoZURpciBzdHJpbmdC
eUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6YXBwTmFtZV07CisgICAgcmV0dXJuIHN0cmluZ0J5UmVz
b2x2aW5nU3ltbGlua3NJblBhdGgoW2NhY2hlUGF0aCBzdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRo
XSk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6cGxhdGZvcm1Jbml0aWFsaXplV2ViUHJvY2VzcyhX
ZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIHBhcmFtZXRl
cnMucHJlc2VudGVyQXBwbGljYXRpb25QaWQgPSBnZXRwaWQoKTsKKworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBwYXJhbWV0ZXJzLmFjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFi
bGVkID0gW1tOU0FwcCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWEVuaGFuY2VkVXNl
ckludGVyZmFjZSJdIGJvb2xWYWx1ZV07CisjZWxzZQorICAgIHBhcmFtZXRlcnMuYWNjZXNzaWJp
bGl0eUVuaGFuY2VkVXNlckludGVyZmFjZUVuYWJsZWQgPSBmYWxzZTsKKyNlbmRpZgorCisgICAg
TlNVUkxDYWNoZSAqdXJsQ2FjaGUgPSBbTlNVUkxDYWNoZSBzaGFyZWRVUkxDYWNoZV07CisgICAg
cGFyYW1ldGVycy5uc1VSTENhY2hlTWVtb3J5Q2FwYWNpdHkgPSBbdXJsQ2FjaGUgbWVtb3J5Q2Fw
YWNpdHldOworICAgIHBhcmFtZXRlcnMubnNVUkxDYWNoZURpc2tDYXBhY2l0eSA9IFt1cmxDYWNo
ZSBkaXNrQ2FwYWNpdHldOworCisjaWYgIVBMQVRGT1JNKElPUykgJiYgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisgICAgcGFyYW1ldGVycy5zaG91bGRGb3JjZVNjcmVl
bkZvbnRTdWJzdGl0dXRpb24gPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRz
XSBib29sRm9yS2V5OkAiTlNGb250RGVmYXVsdFNjcmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVk
Il07CisjZW5kaWYKKyAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUtlcm5pbmdBbmRMaWdhdHVy
ZXNCeURlZmF1bHQgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29s
Rm9yS2V5OldlYktpdEtlcm5pbmdBbmRMaWdhdHVyZXNFbmFibGVkQnlEZWZhdWx0RGVmYXVsdHNL
ZXldOworICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSklUID0gW1tOU1VzZXJEZWZhdWx0cyBz
dGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpXZWJLaXRKU0NKSVRFbmFibGVkRGVmYXVs
dHNLZXldOworICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlRlRMSklUID0gW1tOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpXZWJLaXRKU0NGVExKSVRFbmFi
bGVkRGVmYXVsdHNLZXldOworICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlTWVtb3J5UHJlc3N1
cmVSZWxpZWZMb2dnaW5nID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10g
Ym9vbEZvcktleTpAIkxvZ01lbW9yeUpldHNhbURldGFpbHMiXTsKKyAgICAKKyNpZiBIQVZFKEhP
U1RFRF9DT1JFX0FOSU1BVElPTikKKyNpZiAhUExBVEZPUk0oSU9TKQorICAgIHBhcmFtZXRlcnMu
YWNjZWxlcmF0ZWRDb21wb3NpdGluZ1BvcnQgPSBNYWNoU2VuZFJpZ2h0OjpjcmVhdGUoW0NBUmVt
b3RlTGF5ZXJTZXJ2ZXIgc2hhcmVkU2VydmVyXS5zZXJ2ZXJQb3J0KTsKKyNlbmRpZgorI2VuZGlm
CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IGJlIGNvbmZpZ3VyYWJsZTsgd2Ug
c2hvdWxkbid0IGp1c3QgYmxpbmRseSBhbGxvdyByZWFkIGFjY2VzcyB0byB0aGUgVUkgcHJvY2Vz
cyBidW5kbGUuCisgICAgcGFyYW1ldGVycy51aVByb2Nlc3NCdW5kbGVSZXNvdXJjZVBhdGggPSBb
W05TQnVuZGxlIG1haW5CdW5kbGVdIHJlc291cmNlUGF0aF07CisgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlKHBhcmFtZXRlcnMudWlQcm9jZXNzQnVuZGxlUmVzb3VyY2VQYXRoLCBT
YW5kYm94RXh0ZW5zaW9uOjpSZWFkT25seSwgcGFyYW1ldGVycy51aVByb2Nlc3NCdW5kbGVSZXNv
dXJjZVBhdGhFeHRlbnNpb25IYW5kbGUpOworCisgICAgcGFyYW1ldGVycy51aVByb2Nlc3NCdW5k
bGVJZGVudGlmaWVyID0gU3RyaW5nKFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRp
Zmllcl0pOworCisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICBpZiAoIW1fdXNlc05l
dHdvcmtQcm9jZXNzKSB7CisjZW5kaWYKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzY2hlbWUg
OiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKKyAgICAgICAg
ICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBw
ZW5kKHNjaGVtZSk7CisjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKKyAgICB9CisjZW5kaWYK
KworICAgIGlmIChtX2J1bmRsZVBhcmFtZXRlcnMpIHsKKyAgICAgICAgYXV0byBkYXRhID0gYWRv
cHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgYXV0byBrZXllZEFy
Y2hpdmVyID0gYWRvcHROUyhbW05TS2V5ZWRBcmNoaXZlciBhbGxvY10gaW5pdEZvcldyaXRpbmdX
aXRoTXV0YWJsZURhdGE6ZGF0YS5nZXQoKV0pOworCisgICAgICAgIFtrZXllZEFyY2hpdmVyIHNl
dFJlcXVpcmVzU2VjdXJlQ29kaW5nOllFU107CisKKyAgICAgICAgQHRyeSB7CisgICAgICAgICAg
ICBba2V5ZWRBcmNoaXZlciBlbmNvZGVPYmplY3Q6bV9idW5kbGVQYXJhbWV0ZXJzLmdldCgpIGZv
cktleTpAInBhcmFtZXRlcnMiXTsKKyAgICAgICAgICAgIFtrZXllZEFyY2hpdmVyIGZpbmlzaEVu
Y29kaW5nXTsKKyAgICAgICAgfSBAY2F0Y2ggKE5TRXhjZXB0aW9uICpleGNlcHRpb24pIHsKKyAg
ICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGVuY29kZSBidW5kbGUgcGFyYW1ldGVyczog
JUAiLCBleGNlcHRpb24pOworICAgICAgICB9CisKKyAgICAgICAgcGFyYW1ldGVycy5idW5kbGVQ
YXJhbWV0ZXJEYXRhID0gQVBJOjpEYXRhOjpjcmVhdGVXaXRob3V0Q29weWluZygoY29uc3QgdW5z
aWduZWQgY2hhciopW2RhdGEgYnl0ZXNdLCBbZGF0YSBsZW5ndGhdLCBbXSAodW5zaWduZWQgY2hh
ciosIGNvbnN0IHZvaWQqIGRhdGEpIHsKKyAgICAgICAgICAgIFsoTlNEYXRhICopZGF0YSByZWxl
YXNlXTsKKyAgICAgICAgfSwgZGF0YS5sZWFrUmVmKCkpOworICAgIH0KK30KKworI2lmIEVOQUJM
RShORVRXT1JLX1BST0NFU1MpCit2b2lkIFdlYkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZU5l
dHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
KQoreworICAgIE5TVVJMQ2FjaGUgKnVybENhY2hlID0gW05TVVJMQ2FjaGUgc2hhcmVkVVJMQ2Fj
aGVdOworICAgIHBhcmFtZXRlcnMubnNVUkxDYWNoZU1lbW9yeUNhcGFjaXR5ID0gW3VybENhY2hl
IG1lbW9yeUNhcGFjaXR5XTsKKyAgICBwYXJhbWV0ZXJzLm5zVVJMQ2FjaGVEaXNrQ2FwYWNpdHkg
PSBbdXJsQ2FjaGUgZGlza0NhcGFjaXR5XTsKKworICAgIHBhcmFtZXRlcnMucGFyZW50UHJvY2Vz
c05hbWUgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vzc0luZm9dIHByb2Nlc3NOYW1lXTsKKyAgICBw
YXJhbWV0ZXJzLnVpUHJvY2Vzc0J1bmRsZUlkZW50aWZpZXIgPSBbW05TQnVuZGxlIG1haW5CdW5k
bGVdIGJ1bmRsZUlkZW50aWZpZXJdOworCisgICAgZm9yIChjb25zdCBhdXRvJiBzY2hlbWUgOiBn
bG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKSkKKyAgICAgICAgcGFy
YW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZvckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2No
ZW1lKTsKKworICAgIHBhcmFtZXRlcnMuaHR0cFByb3h5ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFu
ZGFyZFVzZXJEZWZhdWx0c10gc3RyaW5nRm9yS2V5OldlYktpdDJIVFRQUHJveHlEZWZhdWx0c0tl
eV07CisgICAgcGFyYW1ldGVycy5odHRwc1Byb3h5ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFy
ZFVzZXJEZWZhdWx0c10gc3RyaW5nRm9yS2V5OldlYktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXld
OworfQorI2VuZGlmCisKK3ZvaWQgV2ViQ29udGV4dDo6cGxhdGZvcm1JbnZhbGlkYXRlQ29udGV4
dCgpCit7CisgICAgdW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOworfQorCitTdHJp
bmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0RGlza0NhY2hlRGlyZWN0b3J5KCkgY29uc3QK
K3sKKyAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGNhY2hlUGF0aCA9IGFkb3B0TlMoKE5TU3RyaW5n
ICopV0tDb3B5Rm91bmRhdGlvbkNhY2hlRGlyZWN0b3J5KCkpOworICAgIGlmICghY2FjaGVQYXRo
KQorICAgICAgICBjYWNoZVBhdGggPSBAIn4vTGlicmFyeS9DYWNoZXMvY29tLmFwcGxlLldlYktp
dC5XZWJQcm9jZXNzIjsKKyAgICByZXR1cm4gc3RyaW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0
aChbY2FjaGVQYXRoIHN0cmluZ0J5U3RhbmRhcmRpemluZ1BhdGhdKTsKK30KKworU3RyaW5nIFdl
YkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdENvb2tpZVN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdAor
eworI2lmIFBMQVRGT1JNKElPUykKKyAgICBTdHJpbmcgcGF0aCA9IHBhdGhGb3JQcm9jZXNzQ29u
dGFpbmVyKCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICBwYXRoID0gTlNIb21l
RGlyZWN0b3J5KCk7CisKKyAgICBwYXRoID0gcGF0aCArICIvTGlicmFyeS9Db29raWVzIjsKKyAg
ICBwYXRoID0gc3RyaW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aChwYXRoKTsKKyAgICByZXR1
cm4gcGF0aDsKKyNlbHNlCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gW0AiIiBz
dHJpbmdCeVN0YW5kYXJkaXppbmdQYXRoXTsKKyNlbmRpZgorfQorCisjaWYgUExBVEZPUk0oSU9T
KQorU3RyaW5nIFdlYkNvbnRleHQ6Om9wZW5HTENhY2hlRGlyZWN0b3J5KCkgY29uc3QKK3sKKyAg
ICBTdHJpbmcgcGF0aCA9IHBhdGhGb3JQcm9jZXNzQ29udGFpbmVyKCk7CisgICAgaWYgKHBhdGgu
aXNFbXB0eSgpKQorICAgICAgICBwYXRoID0gTlNIb21lRGlyZWN0b3J5KCk7CisKKyAgICBwYXRo
ID0gcGF0aCArICIvTGlicmFyeS9DYWNoZXMvY29tLmFwcGxlLldlYktpdC5XZWJDb250ZW50L2Nv
bS5hcHBsZS5vcGVuZ2wvIjsKKyAgICByZXR1cm4gc3RyaW5nQnlSZXNvbHZpbmdTeW1saW5rc0lu
UGF0aChwYXRoKTsKK30KKworU3RyaW5nIFdlYkNvbnRleHQ6OnBhcmVudEJ1bmRsZURpcmVjdG9y
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZVBh
dGhdIHN0cmluZ0J5U3RhbmRhcmRpemluZ1BhdGhdOworfQorCitTdHJpbmcgV2ViQ29udGV4dDo6
bmV0d29ya2luZ0hTVFNEYXRhYmFzZVBhdGgoKSBjb25zdAoreworICAgIFN0cmluZyBwYXRoID0g
cGF0aEZvclByb2Nlc3NDb250YWluZXIoKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAg
ICAgIHBhdGggPSBOU0hvbWVEaXJlY3RvcnkoKTsKKworICAgIHBhdGggPSBwYXRoICsgIi9MaWJy
YXJ5L0NhY2hlcy9jb20uYXBwbGUuV2ViS2l0Lk5ldHdvcmtpbmcvIjsKKyAgICBwYXRoID0gc3Ry
aW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aChwYXRoKTsKKworICAgIE5TRXJyb3IgKmVycm9y
ID0gbmlsOworICAgIE5TU3RyaW5nKiBuc1BhdGggPSBwYXRoOworICAgIGlmICghW1tOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjcmVhdGVEaXJlY3RvcnlBdFBhdGg6bnNQYXRoIHdpdGhJ
bnRlcm1lZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6JmVycm9yXSkg
eworICAgICAgICBOU0xvZyhAImNvdWxkIG5vdCBjcmVhdGUgXCIlQFwiLCBlcnJvciAlQCIsIG5z
UGF0aCwgZXJyb3IpOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgcmV0
dXJuIHBhdGggKyAiL0hTVFMucGxpc3QiOworfQorCitTdHJpbmcgV2ViQ29udGV4dDo6d2ViQ29u
dGVudEhTVFNEYXRhYmFzZVBhdGgoKSBjb25zdAoreworICAgIFN0cmluZyBwYXRoID0gcGF0aEZv
clByb2Nlc3NDb250YWluZXIoKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCisgICAgICAgIHBh
dGggPSBOU0hvbWVEaXJlY3RvcnkoKTsKKworICAgIHBhdGggPSBwYXRoICsgIi9MaWJyYXJ5L0Nh
Y2hlcy9jb20uYXBwbGUuV2ViS2l0LldlYkNvbnRlbnQvIjsKKyAgICBwYXRoID0gc3RyaW5nQnlS
ZXNvbHZpbmdTeW1saW5rc0luUGF0aChwYXRoKTsKKworICAgIE5TRXJyb3IgKmVycm9yID0gbmls
OworICAgIE5TU3RyaW5nKiBuc1BhdGggPSBwYXRoOworICAgIGlmICghW1tOU0ZpbGVNYW5hZ2Vy
IGRlZmF1bHRNYW5hZ2VyXSBjcmVhdGVEaXJlY3RvcnlBdFBhdGg6bnNQYXRoIHdpdGhJbnRlcm1l
ZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6JmVycm9yXSkgeworICAg
ICAgICBOU0xvZyhAImNvdWxkIG5vdCBjcmVhdGUgXCIlQFwiLCBlcnJvciAlQCIsIG5zUGF0aCwg
ZXJyb3IpOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgcmV0dXJuIHBh
dGggKyAiL0hTVFMucGxpc3QiOworfQorCitTdHJpbmcgV2ViQ29udGV4dDo6Y29udGFpbmVyVGVt
cG9yYXJ5RGlyZWN0b3J5KCkgY29uc3QKK3sKKyAgICBTdHJpbmcgcGF0aCA9IE5TVGVtcG9yYXJ5
RGlyZWN0b3J5KCk7CisgICAgcmV0dXJuIHN0cmluZ0J5UmVzb2x2aW5nU3ltbGlua3NJblBhdGgo
cGF0aCk7Cit9CisjZW5kaWYKKworU3RyaW5nIFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdFdl
YlNRTERhdGFiYXNlRGlyZWN0b3J5KCkKK3sKKyAgICBOU1N0cmluZyAqZGF0YWJhc2VzRGlyZWN0
b3J5ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9yS2V5
OldlYkRhdGFiYXNlRGlyZWN0b3J5RGVmYXVsdHNLZXldOworICAgIGlmICghZGF0YWJhc2VzRGly
ZWN0b3J5IHx8ICFbZGF0YWJhc2VzRGlyZWN0b3J5IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNs
YXNzXV0pCisgICAgICAgIGRhdGFiYXNlc0RpcmVjdG9yeSA9IEAifi9MaWJyYXJ5L1dlYktpdC9E
YXRhYmFzZXMiOworICAgIHJldHVybiBzdHJpbmdCeVJlc29sdmluZ1N5bWxpbmtzSW5QYXRoKFtk
YXRhYmFzZXNEaXJlY3Rvcnkgc3RyaW5nQnlTdGFuZGFyZGl6aW5nUGF0aF0pOworfQorCitTdHJp
bmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0SW5kZXhlZERCRGF0YWJhc2VEaXJlY3Rvcnko
KQoreworICAgIC8vIEluZGV4ZWQgZGF0YWJhc2VzIGV4aXN0IGluIGEgc3ViZGlyZWN0b3J5IG9m
IHRoZSAiZGF0YWJhc2UgZGlyZWN0b3J5IHBhdGguIgorICAgIC8vIEN1cnJlbnRseSwgdGhlIHRv
cCBsZXZlbCBvZiB0aGF0IGRpcmVjdG9yeSBjb250YWlucyBlbnRpdGllcyByZWxhdGVkIHRvIFdl
YlNRTCBkYXRhYmFzZXMuCisgICAgLy8gV2Ugc2hvdWxkIGZpeCB0aGlzLCBhbmQgbW92ZSBXZWJT
UUwgaW50byBhIHN1YmRpcmVjdG9yeSAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyNDgwNykKKyAgICAvLyBJbiB0aGUgbWVhbnRpbWUsIGFuIGVudGl0eSBuYW1lIHBy
ZWZpeGVkIHdpdGggdGhyZWUgdW5kZXJzY29yZXMgd2lsbCBub3QgY29uZmxpY3Qgd2l0aCBhbnkg
V2ViU1FMIGVudGl0aWVzLgorICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGxh
dGZvcm1EZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoKSwgIl9fX0luZGV4ZWREQiIpOwor
fQorCitTdHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0SWNvbkRhdGFiYXNlUGF0aCgp
IGNvbnN0Cit7CisgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS85MTM4ODE3PiAtIEFmdGVy
IHRoaXMgImJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IiByYWRhciBpcyByZW1vdmVkLCB0aGlzIGNv
ZGUgc2hvdWxkIGJlIHJlbW92ZWQgdG8gb25seSByZXR1cm4gYW4gZW1wdHkgU3RyaW5nLgorICAg
IE5TU3RyaW5nICpkYXRhYmFzZXNEaXJlY3RvcnkgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJk
VXNlckRlZmF1bHRzXSBvYmplY3RGb3JLZXk6V2ViSWNvbkRhdGFiYXNlRGlyZWN0b3J5RGVmYXVs
dHNLZXldOworICAgIGlmICghZGF0YWJhc2VzRGlyZWN0b3J5IHx8ICFbZGF0YWJhc2VzRGlyZWN0
b3J5IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCisgICAgICAgIGRhdGFiYXNlc0Rp
cmVjdG9yeSA9IEAifi9MaWJyYXJ5L0ljb25zL1dlYnBhZ2VJY29ucy5kYiI7CisgICAgcmV0dXJu
IHN0cmluZ0J5UmVzb2x2aW5nU3ltbGlua3NJblBhdGgoW2RhdGFiYXNlc0RpcmVjdG9yeSBzdHJp
bmdCeVN0YW5kYXJkaXppbmdQYXRoXSk7Cit9CisKK1N0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9y
bURlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKQoreworICAgIE5TU3RyaW5nICpsb2NhbFN0
b3JhZ2VEaXJlY3RvcnkgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBv
YmplY3RGb3JLZXk6V2ViU3RvcmFnZURpcmVjdG9yeURlZmF1bHRzS2V5XTsKKyAgICBpZiAoIWxv
Y2FsU3RvcmFnZURpcmVjdG9yeSB8fCAhW2xvY2FsU3RvcmFnZURpcmVjdG9yeSBpc0tpbmRPZkNs
YXNzOltOU1N0cmluZyBjbGFzc11dKQorICAgICAgICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBA
In4vTGlicmFyeS9XZWJLaXQvTG9jYWxTdG9yYWdlIjsKKyAgICByZXR1cm4gc3RyaW5nQnlSZXNv
bHZpbmdTeW1saW5rc0luUGF0aChbbG9jYWxTdG9yYWdlRGlyZWN0b3J5IHN0cmluZ0J5U3RhbmRh
cmRpemluZ1BhdGhdKTsKK30KKworU3RyaW5nIFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdE1l
ZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKQoreworICAgIE5TU3RyaW5nICptZWRpYUtleXNTdG9y
YWdlRGlyZWN0b3J5ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gb2Jq
ZWN0Rm9yS2V5OldlYktpdE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tleV07Cisg
ICAgaWYgKCFtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5IHx8ICFbbWVkaWFLZXlzU3RvcmFnZURp
cmVjdG9yeSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQorICAgICAgICBtZWRpYUtl
eXNTdG9yYWdlRGlyZWN0b3J5ID0gQCJ+L0xpYnJhcnkvV2ViS2l0L01lZGlhS2V5cyI7CisgICAg
cmV0dXJuIHN0cmluZ0J5UmVzb2x2aW5nU3ltbGlua3NJblBhdGgoW21lZGlhS2V5c1N0b3JhZ2VE
aXJlY3Rvcnkgc3RyaW5nQnlTdGFuZGFyZGl6aW5nUGF0aF0pOworfQorCitib29sIFdlYkNvbnRl
eHQ6Om9taXRQREZTdXBwb3J0KCkKK3sKKyAgICAvLyBTaW5jZSB0aGlzIGlzIGEgInNlY3JldCBk
ZWZhdWx0IiB3ZSBkb24ndCBib3RoZXIgcmVnaXN0ZXJpbmcgaXQuCisgICAgcmV0dXJuIFtbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJXZWJLaXRPbWl0
UERGU3VwcG9ydCJdOworfQorCit2b2lkIFdlYkNvbnRleHQ6OmdldFBhc3RlYm9hcmRUeXBlcyhj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5
cGVzKQoreworICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuZ2V0VHlwZXMo
cGFzdGVib2FyZFR5cGVzKTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpnZXRQYXN0ZWJvYXJkUGF0
aG5hbWVzRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmRUeXBlLCBWZWN0b3I8U3RyaW5nPiYgcGF0aG5hbWVzKQoreworICAgIFBsYXRm
b3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuZ2V0UGF0aG5hbWVzRm9yVHlwZShwYXRobmFt
ZXMsIHBhc3RlYm9hcmRUeXBlKTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpnZXRQYXN0ZWJvYXJk
U3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmRUeXBlLCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBzdHJpbmcgPSBQbGF0Zm9y
bVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnN0cmluZ0ZvclR5cGUocGFzdGVib2FyZFR5cGUp
OworfQorCit2b2lkIFdlYkNvbnRleHQ6OmdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFNo
YXJlZE1lbW9yeTo6SGFuZGxlJiBoYW5kbGUsIHVpbnQ2NF90JiBzaXplKQoreworICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFt
ZSkuYnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJkVHlwZSk7CisgICAgaWYgKCFidWZmZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICBzaXplID0gYnVmZmVyLT5zaXplKCk7CisgICAgUmVmUHRyPFNoYXJl
ZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZSk7
CisgICAgaWYgKCFzaGFyZWRNZW1vcnlCdWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtZW1j
cHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+ZGF0YSgpLCBzaXplKTsKKyAg
ICBzaGFyZWRNZW1vcnlCdWZmZXItPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6
UmVhZE9ubHkpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OnBhc3RlYm9hcmRDb3B5KGNvbnN0IFN0
cmluZyYgZnJvbVBhc3RlYm9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkLCB1aW50NjRf
dCYgbmV3Q2hhbmdlQ291bnQpCit7CisgICAgbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3Rl
Ym9hcmQodG9QYXN0ZWJvYXJkKS5jb3B5KGZyb21QYXN0ZWJvYXJkKTsKK30KKwordm9pZCBXZWJD
b250ZXh0OjpnZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgdWludDY0X3QmIGNoYW5nZUNvdW50KQoreworICAgIGNoYW5nZUNvdW50ID0gUGxhdGZv
cm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpOworfQorCit2b2lkIFdl
YkNvbnRleHQ6OmdldFBhc3RlYm9hcmRVbmlxdWVOYW1lKFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
Cit7CisgICAgcGFzdGVib2FyZE5hbWUgPSBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnVuaXF1ZU5hbWUo
KTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpnZXRQYXN0ZWJvYXJkQ29sb3IoY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSwgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQoreworICAgIGNvbG9yID0g
UGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5jb2xvcigpOyAgICAKK30KKwordm9p
ZCBXZWJDb250ZXh0OjpnZXRQYXN0ZWJvYXJkVVJMKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUsIFdURjo6U3RyaW5nJiB1cmxTdHJpbmcpCit7CisgICAgdXJsU3RyaW5nID0gUGxhdGZvcm1Q
YXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS51cmwoKS5zdHJpbmcoKTsKK30KKwordm9pZCBXZWJD
b250ZXh0OjphZGRQYXN0ZWJvYXJkVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgdWludDY0X3QmIG5ld0NoYW5n
ZUNvdW50KQoreworICAgIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3Rl
Ym9hcmROYW1lKS5hZGRUeXBlcyhwYXN0ZWJvYXJkVHlwZXMpOworfQorCit2b2lkIFdlYkNvbnRl
eHQ6OnNldFBhc3RlYm9hcmRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291
bnQpCit7CisgICAgbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2Fy
ZE5hbWUpLnNldFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6
c2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
dGhuYW1lcywgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KQoreworICAgIG5ld0NoYW5nZUNvdW50
ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRQYXRobmFtZXNGb3JUeXBl
KHBhdGhuYW1lcywgcGFzdGVib2FyZFR5cGUpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OnNldFBh
c3RlYm9hcmRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCB1aW50NjRfdCYg
bmV3Q2hhbmdlQ291bnQpCit7CisgICAgbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9h
cmQocGFzdGVib2FyZE5hbWUpLnNldFN0cmluZ0ZvclR5cGUoc3RyaW5nLCBwYXN0ZWJvYXJkVHlw
ZSk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6c2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwg
Y29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGhhbmRsZSwgdWludDY0X3Qgc2l6ZSwgdWludDY0
X3QmIG5ld0NoYW5nZUNvdW50KQoreworICAgIGlmIChoYW5kbGUuaXNOdWxsKCkpIHsKKyAgICAg
ICAgbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNl
dEJ1ZmZlckZvclR5cGUoMCwgcGFzdGVib2FyZFR5cGUpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1l
bW9yeTo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7CisgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhciAqPihzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSksIHNpemUpOworICAg
IG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRC
dWZmZXJGb3JUeXBlKGJ1ZmZlciwgcGFzdGVib2FyZFR5cGUpOworfQorCisjaWYgUExBVEZPUk0o
SU9TKQordm9pZCBXZWJDb250ZXh0Ojp3cml0ZVdlYkNvbnRlbnRUb1Bhc3RlYm9hcmQoY29uc3Qg
V2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpCit7CisgICAgUGxhdGZvcm1Q
YXN0ZWJvYXJkKCkud3JpdGUoY29udGVudCk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6d3JpdGVJ
bWFnZVRvUGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UmIHBhc3RlYm9h
cmRJbWFnZSkKK3sKKyAgICBQbGF0Zm9ybVBhc3RlYm9hcmQoKS53cml0ZShwYXN0ZWJvYXJkSW1h
Z2UpOworfQorCit2b2lkIFdlYkNvbnRleHQ6OndyaXRlU3RyaW5nVG9QYXN0ZWJvYXJkKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBQbGF0
Zm9ybVBhc3RlYm9hcmQoKS53cml0ZShwYXN0ZWJvYXJkVHlwZSwgdGV4dCk7Cit9CisKK3ZvaWQg
V2ViQ29udGV4dDo6cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBXVEY6OlN0cmluZyYgdmFsdWUpCit7CisgICAgdmFs
dWUgPSBQbGF0Zm9ybVBhc3RlYm9hcmQoKS5yZWFkU3RyaW5nKGluZGV4LCBwYXN0ZWJvYXJkVHlw
ZSk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6cmVhZFVSTEZyb21QYXN0ZWJvYXJkKHVpbnQ2NF90
IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTdHJpbmcmIHVybCkKK3sKKyAg
ICB1cmwgPSBQbGF0Zm9ybVBhc3RlYm9hcmQoKS5yZWFkVVJMKGluZGV4LCBwYXN0ZWJvYXJkVHlw
ZSk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6cmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKHVpbnQ2
NF90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTaGFyZWRNZW1vcnk6Okhh
bmRsZSYgaGFuZGxlLCB1aW50NjRfdCYgc2l6ZSkKK3sKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBidWZmZXIgPSBQbGF0Zm9ybVBhc3RlYm9hcmQoKS5yZWFkQnVmZmVyKGluZGV4LCBwYXN0ZWJv
YXJkVHlwZSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBzaXplID0g
YnVmZmVyLT5zaXplKCk7CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVm
ZmVyID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZSk7CisgICAgaWYgKCFzaGFyZWRNZW1vcnlC
dWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtZW1jcHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5k
YXRhKCksIGJ1ZmZlci0+ZGF0YSgpLCBzaXplKTsKKyAgICBzaGFyZWRNZW1vcnlCdWZmZXItPmNy
ZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOworfQorCit2b2lkIFdl
YkNvbnRleHQ6OmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KHVpbnQ2NF90JiBpdGVtc0NvdW50KQor
eworICAgIGl0ZW1zQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQoKS5jb3VudCgpOworfQorCisj
ZW5kaWYKKworYm9vbCBXZWJDb250ZXh0Ojpwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gIW1fdXNlck9ic2VydmFibGVQYWdlQ291bnRlci52YWx1ZSgpICYm
ICFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKTsKK30K
Kwordm9pZCBXZWJDb250ZXh0OjpyZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpCit7Cisj
aWYgIVBMQVRGT1JNKElPUykKKyAgICAvLyBMaXN0ZW4gZm9yIGVuaGFuY2VkIGFjY2Vzc2liaWxp
dHkgY2hhbmdlcyBhbmQgcHJvcGFnYXRlIHRoZW0gdG8gdGhlIFdlYlByb2Nlc3MuCisgICAgbV9l
bmhhbmNlZEFjY2Vzc2liaWxpdHlPYnNlcnZlciA9IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVm
YXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXJGb3JOYW1lOldlYktpdEFwcGxpY2F0aW9uRGlkQ2hhbmdl
QWNjZXNzaWJpbGl0eUVuaGFuY2VkVXNlckludGVyZmFjZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmls
IHF1ZXVlOltOU09wZXJhdGlvblF1ZXVlIGN1cnJlbnRRdWV1ZV0gdXNpbmdCbG9jazpeKE5TTm90
aWZpY2F0aW9uICpub3RlKSB7CisgICAgICAgIHNldEVuaGFuY2VkQWNjZXNzaWJpbGl0eShbW1tu
b3RlIHVzZXJJbmZvXSBvYmplY3RGb3JLZXk6QCJBWEVuaGFuY2VkVXNlckludGVyZmFjZSJdIGJv
b2xWYWx1ZV0pOworICAgIH1dOworCisgICAgbV9hdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnROb3Rp
ZmljYXRpb25PYnNlcnZlciA9IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0g
YWRkT2JzZXJ2ZXJGb3JOYW1lOk5TU3BlbGxDaGVja2VyRGlkQ2hhbmdlQXV0b21hdGljVGV4dFJl
cGxhY2VtZW50Tm90aWZpY2F0aW9uIG9iamVjdDpuaWwgcXVldWU6W05TT3BlcmF0aW9uUXVldWUg
Y3VycmVudFF1ZXVlXSB1c2luZ0Jsb2NrOl4oTlNOb3RpZmljYXRpb24gKm5vdGlmaWNhdGlvbikg
eworICAgICAgICBUZXh0Q2hlY2tlcjo6ZGlkQ2hhbmdlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50
RW5hYmxlZCgpOworICAgICAgICB0ZXh0Q2hlY2tlclN0YXRlQ2hhbmdlZCgpOworICAgIH1dOwor
ICAgIAorICAgIG1fYXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uTm90aWZpY2F0aW9uT2JzZXJ2
ZXIgPSBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyRm9y
TmFtZTpOU1NwZWxsQ2hlY2tlckRpZENoYW5nZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbk5v
dGlmaWNhdGlvbiBvYmplY3Q6bmlsIHF1ZXVlOltOU09wZXJhdGlvblF1ZXVlIGN1cnJlbnRRdWV1
ZV0gdXNpbmdCbG9jazpeKE5TTm90aWZpY2F0aW9uICpub3RpZmljYXRpb24pIHsKKyAgICAgICAg
VGV4dENoZWNrZXI6OmRpZENoYW5nZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQo
KTsKKyAgICAgICAgdGV4dENoZWNrZXJTdGF0ZUNoYW5nZWQoKTsKKyAgICB9XTsKKworI2lmIF9f
TUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAorICAgIG1fYXV0b21hdGljUXVv
dGVTdWJzdGl0dXRpb25Ob3RpZmljYXRpb25PYnNlcnZlciA9IFtbTlNOb3RpZmljYXRpb25DZW50
ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXJGb3JOYW1lOk5TU3BlbGxDaGVja2VyRGlkQ2hh
bmdlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25Ob3RpZmljYXRpb24gb2JqZWN0Om5pbCBxdWV1
ZTpbTlNPcGVyYXRpb25RdWV1ZSBjdXJyZW50UXVldWVdIHVzaW5nQmxvY2s6XihOU05vdGlmaWNh
dGlvbiAqbm90aWZpY2F0aW9uKSB7CisgICAgICAgIFRleHRDaGVja2VyOjpkaWRDaGFuZ2VBdXRv
bWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKTsKKyAgICAgICAgdGV4dENoZWNrZXJTdGF0
ZUNoYW5nZWQoKTsKKyAgICB9XTsKKworICAgIG1fYXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbk5v
dGlmaWNhdGlvbk9ic2VydmVyID0gW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVy
XSBhZGRPYnNlcnZlckZvck5hbWU6TlNTcGVsbENoZWNrZXJEaWRDaGFuZ2VBdXRvbWF0aWNEYXNo
U3Vic3RpdHV0aW9uTm90aWZpY2F0aW9uIG9iamVjdDpuaWwgcXVldWU6W05TT3BlcmF0aW9uUXVl
dWUgY3VycmVudFF1ZXVlXSB1c2luZ0Jsb2NrOl4oTlNOb3RpZmljYXRpb24gKm5vdGlmaWNhdGlv
bikgeworICAgICAgICBUZXh0Q2hlY2tlcjo6ZGlkQ2hhbmdlQXV0b21hdGljRGFzaFN1YnN0aXR1
dGlvbkVuYWJsZWQoKTsKKyAgICAgICAgdGV4dENoZWNrZXJTdGF0ZUNoYW5nZWQoKTsKKyAgICB9
XTsKKyNlbmRpZgorI2VuZGlmIC8vICFQTEFURk9STShJT1MpCit9CisKK3ZvaWQgV2ViQ29udGV4
dDo6dW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpCit7CisjaWYgIVBMQVRGT1JNKElP
UykKKyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2Vy
dmVyOm1fZW5oYW5jZWRBY2Nlc3NpYmlsaXR5T2JzZXJ2ZXIuZ2V0KCldOyAgICAKKyAgICBbW05T
Tm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fYXV0b21h
dGljVGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uT2JzZXJ2ZXIuZ2V0KCldOworICAgIFtbTlNO
b3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9hdXRvbWF0
aWNTcGVsbGluZ0NvcnJlY3Rpb25Ob3RpZmljYXRpb25PYnNlcnZlci5nZXQoKV07CisjaWYgX19N
QUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCisgICAgW1tOU05vdGlmaWNhdGlv
bkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX2F1dG9tYXRpY1F1b3RlU3Vi
c3RpdHV0aW9uTm90aWZpY2F0aW9uT2JzZXJ2ZXIuZ2V0KCldOworICAgIFtbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9hdXRvbWF0aWNEYXNoU3Vi
c3RpdHV0aW9uTm90aWZpY2F0aW9uT2JzZXJ2ZXIuZ2V0KCldOworI2VuZGlmCisjZW5kaWYgLy8g
IVBMQVRGT1JNKElPUykKK30KKworI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJT
SU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCitzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBw
cml2YXRlQnJvd3NpbmdTZXNzaW9uKCkKK3sKKyAgICBzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lv
blJlZiBzZXNzaW9uOworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZTsKKyAgICBkaXNw
YXRjaF9vbmNlKCZvbmNlLCBeeworICAgICAgICBOU1N0cmluZyAqaWRlbnRpZmllciA9IFtOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAuUHJpdmF0ZUJyb3dzaW5nIiwgW1tOU0J1bmRsZSBt
YWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXV07CisKKyAgICAgICAgc2Vzc2lvbiA9IFdLQ3Jl
YXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKChDRlN0cmluZ1JlZilpZGVudGlmaWVyKTsKKyAgICB9
KTsKKworICAgIHJldHVybiBzZXNzaW9uOworfQorI2VuZGlmCisKK2Jvb2wgV2ViQ29udGV4dDo6
aXNVUkxLbm93bkhTVFNIb3N0KGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBib29sIHByaXZhdGVC
cm93c2luZ0VuYWJsZWQpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19Y
X1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKKyAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVy
bCA9IFVSTChVUkwoKSwgdXJsU3RyaW5nKS5jcmVhdGVDRlVSTCgpOworCisgICAgcmV0dXJuIF9D
Rk5ldHdvcmtJc0tub3duSFNUU0hvc3RXaXRoU2Vzc2lvbih1cmwuZ2V0KCksIHByaXZhdGVCcm93
c2luZ0VuYWJsZWQgPyBwcml2YXRlQnJvd3NpbmdTZXNzaW9uKCkgOiBudWxscHRyKTsKKyNlbHNl
CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgV2ViQ29udGV4dDo6cmVzZXRI
U1RTSG9zdHMoKQoreworI2lmIFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01J
Tl9SRVFVSVJFRCA+PSAxMDkwCisgICAgX0NGTmV0d29ya1Jlc2V0SFNUU0hvc3RzV2l0aFNlc3Np
b24obnVsbHB0cik7CisgICAgX0NGTmV0d29ya1Jlc2V0SFNUU0hvc3RzV2l0aFNlc3Npb24ocHJp
dmF0ZUJyb3dzaW5nU2Vzc2lvbigpKTsKKyNlbmRpZgorfQorCitpbnQgbmV0d29ya1Byb2Nlc3NM
YXRlbmN5UU9TKCkKK3sKKyAgICBzdGF0aWMgaW50IHFvcyA9IFtbTlNVc2VyRGVmYXVsdHMgc3Rh
bmRhcmRVc2VyRGVmYXVsdHNdIGludGVnZXJGb3JLZXk6QCJXZWJLaXROZXR3b3JrUHJvY2Vzc0xh
dGVuY3lRT1MiXTsKKyAgICByZXR1cm4gcW9zOworfQorCitpbnQgbmV0d29ya1Byb2Nlc3NUaHJv
dWdocHV0UU9TKCkKK3sKKyAgICBzdGF0aWMgaW50IHFvcyA9IFtbTlNVc2VyRGVmYXVsdHMgc3Rh
bmRhcmRVc2VyRGVmYXVsdHNdIGludGVnZXJGb3JLZXk6QCJXZWJLaXROZXR3b3JrUHJvY2Vzc1Ro
cm91Z2hwdXRRT1MiXTsKKyAgICByZXR1cm4gcW9zOworfQorCitpbnQgd2ViUHJvY2Vzc0xhdGVu
Y3lRT1MoKQoreworICAgIHN0YXRpYyBpbnQgcW9zID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFy
ZFVzZXJEZWZhdWx0c10gaW50ZWdlckZvcktleTpAIldlYktpdFdlYlByb2Nlc3NMYXRlbmN5UU9T
Il07CisgICAgcmV0dXJuIHFvczsKK30KKworaW50IHdlYlByb2Nlc3NUaHJvdWdocHV0UU9TKCkK
K3sKKyAgICBzdGF0aWMgaW50IHFvcyA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVm
YXVsdHNdIGludGVnZXJGb3JLZXk6QCJXZWJLaXRXZWJQcm9jZXNzVGhyb3VnaHB1dFFPUyJdOwor
ICAgIHJldHVybiBxb3M7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0JKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
cm9jZXNzUG9vbENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8K
IAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJDb250ZXh0LmgiCisjaW1wb3J0ICJX
ZWJQcm9jZXNzUG9vbC5oIgogCiAjaW1wb3J0ICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgogI2lt
cG9ydCAiU2FuZGJveFV0aWxpdGllcy5oIgpAQCAtMTAzLDcgKzEwMyw3IEBAIHN0YXRpYyB2b2lk
IHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQKICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5k
YXJkVXNlckRlZmF1bHRzXSByZWdpc3RlckRlZmF1bHRzOnJlZ2lzdHJhdGlvbkRpY3Rpb25hcnld
OwogfQogCi12b2lkIFdlYkNvbnRleHQ6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCkK
K3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCkKIHsK
ICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQogICAgIGlmIChtX3VzZXNOZXR3b3JrUHJvY2Vz
cyAmJiBtX25ldHdvcmtQcm9jZXNzKQpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgV2ViQ29udGV4
dDo6dXBkYXRlUHJvY2Vzc1N1cHByZXNzaW8KICNlbmRpZgogfQogCi1OU011dGFibGVEaWN0aW9u
YXJ5ICpXZWJDb250ZXh0OjplbnN1cmVCdW5kbGVQYXJhbWV0ZXJzKCkKK05TTXV0YWJsZURpY3Rp
b25hcnkgKldlYlByb2Nlc3NQb29sOjplbnN1cmVCdW5kbGVQYXJhbWV0ZXJzKCkKIHsKICAgICBp
ZiAoIW1fYnVuZGxlUGFyYW1ldGVycykKICAgICAgICAgbV9idW5kbGVQYXJhbWV0ZXJzID0gYWRv
cHROUyhbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKQEAgLTEyNiw3ICsxMjYs
NyBAQCBOU011dGFibGVEaWN0aW9uYXJ5ICpXZWJDb250ZXh0OjplbnN1cmVCCiAgICAgcmV0dXJu
IG1fYnVuZGxlUGFyYW1ldGVycy5nZXQoKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0OjpwbGF0Zm9y
bUluaXRpYWxpemUoKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplKCkK
IHsKICAgICByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7CiAgICAgcmVnaXN0ZXJOb3Rp
ZmljYXRpb25PYnNlcnZlcnMoKTsKQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lkIFdlYkNvbnRleHQ6
OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAjZW5kaWYKIH0KIAotU3RyaW5nIFdlYkNvbnRleHQ6OnBs
YXRmb3JtRGVmYXVsdEFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoKSBjb25zdAorU3RyaW5nIFdl
YlByb2Nlc3NQb29sOjpwbGF0Zm9ybURlZmF1bHRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkg
Y29uc3QKIHsKICAgICBOU1N0cmluZyAqYXBwTmFtZSA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
YnVuZGxlSWRlbnRpZmllcl07CiAgICAgaWYgKCFhcHBOYW1lKQpAQCAtMTY0LDcgKzE2NCw3IEBA
IFN0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRBcHBsaWMKICAgICByZXR1cm4gc3Ry
aW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aChbY2FjaGVQYXRoIHN0cmluZ0J5U3RhbmRhcmRp
emluZ1BhdGhdKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0OjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQ
cm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit2b2lkIFdl
YlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgcGFyYW1ldGVycy5wcmVzZW50ZXJB
cHBsaWNhdGlvblBpZCA9IGdldHBpZCgpOwogCkBAIC0yMjcsNyArMjI3LDcgQEAgdm9pZCBXZWJD
b250ZXh0OjpwbGF0Zm9ybUluaXRpYWxpemVXZWJQcgogfQogCiAjaWYgRU5BQkxFKE5FVFdPUktf
UFJPQ0VTUykKLXZvaWQgV2ViQ29udGV4dDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nl
c3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit2b2lkIFdl
YlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsKICAgICBOU1VSTENhY2hlICp1
cmxDYWNoZSA9IFtOU1VSTENhY2hlIHNoYXJlZFVSTENhY2hlXTsKICAgICBwYXJhbWV0ZXJzLm5z
VVJMQ2FjaGVNZW1vcnlDYXBhY2l0eSA9IFt1cmxDYWNoZSBtZW1vcnlDYXBhY2l0eV07CkBAIC0y
NDQsMTIgKzI0NCwxMiBAQCB2b2lkIFdlYkNvbnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdv
CiB9CiAjZW5kaWYKIAotdm9pZCBXZWJDb250ZXh0OjpwbGF0Zm9ybUludmFsaWRhdGVDb250ZXh0
KCkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQogewog
ICAgIHVucmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKIH0KIAotU3RyaW5nIFdlYkNv
bnRleHQ6OnBsYXRmb3JtRGVmYXVsdERpc2tDYWNoZURpcmVjdG9yeSgpIGNvbnN0CitTdHJpbmcg
V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtRGVmYXVsdERpc2tDYWNoZURpcmVjdG9yeSgpIGNvbnN0
CiB7CiAgICAgUmV0YWluUHRyPE5TU3RyaW5nPiBjYWNoZVBhdGggPSBhZG9wdE5TKChOU1N0cmlu
ZyAqKVdLQ29weUZvdW5kYXRpb25DYWNoZURpcmVjdG9yeSgpKTsKICAgICBpZiAoIWNhY2hlUGF0
aCkKQEAgLTI1Nyw3ICsyNTcsNyBAQCBTdHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0
RGlza0NhCiAgICAgcmV0dXJuIHN0cmluZ0J5UmVzb2x2aW5nU3ltbGlua3NJblBhdGgoW2NhY2hl
UGF0aCBzdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRoXSk7CiB9CiAKLVN0cmluZyBXZWJDb250ZXh0
OjpwbGF0Zm9ybURlZmF1bHRDb29raWVTdG9yYWdlRGlyZWN0b3J5KCkgY29uc3QKK1N0cmluZyBX
ZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1EZWZhdWx0Q29va2llU3RvcmFnZURpcmVjdG9yeSgpIGNv
bnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIFN0cmluZyBwYXRoID0gcGF0aEZvclByb2Nl
c3NDb250YWluZXIoKTsKQEAgLTI3NCw3ICsyNzQsNyBAQCBTdHJpbmcgV2ViQ29udGV4dDo6cGxh
dGZvcm1EZWZhdWx0Q29va2llCiB9CiAKICNpZiBQTEFURk9STShJT1MpCi1TdHJpbmcgV2ViQ29u
dGV4dDo6b3BlbkdMQ2FjaGVEaXJlY3RvcnkoKSBjb25zdAorU3RyaW5nIFdlYlByb2Nlc3NQb29s
OjpvcGVuR0xDYWNoZURpcmVjdG9yeSgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHBhdGggPSBwYXRo
Rm9yUHJvY2Vzc0NvbnRhaW5lcigpOwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKQEAgLTI4NCwx
MiArMjg0LDEyIEBAIFN0cmluZyBXZWJDb250ZXh0OjpvcGVuR0xDYWNoZURpcmVjdG9yeSgKICAg
ICByZXR1cm4gc3RyaW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aChwYXRoKTsKIH0KIAotU3Ry
aW5nIFdlYkNvbnRleHQ6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpIGNvbnN0CitTdHJpbmcgV2Vi
UHJvY2Vzc1Bvb2w6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IFtbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZVBhdGhdIHN0cmluZ0J5U3RhbmRhcmRpemlu
Z1BhdGhdOwogfQogCi1TdHJpbmcgV2ViQ29udGV4dDo6bmV0d29ya2luZ0hTVFNEYXRhYmFzZVBh
dGgoKSBjb25zdAorU3RyaW5nIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nSFNUU0RhdGFiYXNl
UGF0aCgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHBhdGggPSBwYXRoRm9yUHJvY2Vzc0NvbnRhaW5l
cigpOwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKQEAgLTMwOCw3ICszMDgsNyBAQCBTdHJpbmcg
V2ViQ29udGV4dDo6bmV0d29ya2luZ0hTVFNEYXRhYmFzCiAgICAgcmV0dXJuIHBhdGggKyAiL0hT
VFMucGxpc3QiOwogfQogCi1TdHJpbmcgV2ViQ29udGV4dDo6d2ViQ29udGVudEhTVFNEYXRhYmFz
ZVBhdGgoKSBjb25zdAorU3RyaW5nIFdlYlByb2Nlc3NQb29sOjp3ZWJDb250ZW50SFNUU0RhdGFi
YXNlUGF0aCgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHBhdGggPSBwYXRoRm9yUHJvY2Vzc0NvbnRh
aW5lcigpOwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKQEAgLTMyNywxNCArMzI3LDE0IEBAIFN0
cmluZyBXZWJDb250ZXh0Ojp3ZWJDb250ZW50SFNUU0RhdGFiYXMKICAgICByZXR1cm4gcGF0aCAr
ICIvSFNUUy5wbGlzdCI7CiB9CiAKLVN0cmluZyBXZWJDb250ZXh0Ojpjb250YWluZXJUZW1wb3Jh
cnlEaXJlY3RvcnkoKSBjb25zdAorU3RyaW5nIFdlYlByb2Nlc3NQb29sOjpjb250YWluZXJUZW1w
b3JhcnlEaXJlY3RvcnkoKSBjb25zdAogewogICAgIFN0cmluZyBwYXRoID0gTlNUZW1wb3JhcnlE
aXJlY3RvcnkoKTsKICAgICByZXR1cm4gc3RyaW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aChw
YXRoKTsKIH0KICNlbmRpZgogCi1TdHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0V2Vi
U1FMRGF0YWJhc2VEaXJlY3RvcnkoKQorU3RyaW5nIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybURl
ZmF1bHRXZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpCiB7CiAgICAgTlNTdHJpbmcgKmRhdGFiYXNl
c0RpcmVjdG9yeSA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIG9iamVj
dEZvcktleTpXZWJEYXRhYmFzZURpcmVjdG9yeURlZmF1bHRzS2V5XTsKICAgICBpZiAoIWRhdGFi
YXNlc0RpcmVjdG9yeSB8fCAhW2RhdGFiYXNlc0RpcmVjdG9yeSBpc0tpbmRPZkNsYXNzOltOU1N0
cmluZyBjbGFzc11dKQpAQCAtMzQyLDcgKzM0Miw3IEBAIFN0cmluZyBXZWJDb250ZXh0OjpwbGF0
Zm9ybURlZmF1bHRXZWJTUUwKICAgICByZXR1cm4gc3RyaW5nQnlSZXNvbHZpbmdTeW1saW5rc0lu
UGF0aChbZGF0YWJhc2VzRGlyZWN0b3J5IHN0cmluZ0J5U3RhbmRhcmRpemluZ1BhdGhdKTsKIH0K
IAotU3RyaW5nIFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdEluZGV4ZWREQkRhdGFiYXNlRGly
ZWN0b3J5KCkKK1N0cmluZyBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1EZWZhdWx0SW5kZXhlZERC
RGF0YWJhc2VEaXJlY3RvcnkoKQogewogICAgIC8vIEluZGV4ZWQgZGF0YWJhc2VzIGV4aXN0IGlu
IGEgc3ViZGlyZWN0b3J5IG9mIHRoZSAiZGF0YWJhc2UgZGlyZWN0b3J5IHBhdGguIgogICAgIC8v
IEN1cnJlbnRseSwgdGhlIHRvcCBsZXZlbCBvZiB0aGF0IGRpcmVjdG9yeSBjb250YWlucyBlbnRp
dGllcyByZWxhdGVkIHRvIFdlYlNRTCBkYXRhYmFzZXMuCkBAIC0zNTEsNyArMzUxLDcgQEAgU3Ry
aW5nIFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdEluZGV4ZQogICAgIHJldHVybiBwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQocGxhdGZvcm1EZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnko
KSwgIl9fX0luZGV4ZWREQiIpOwogfQogCi1TdHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZh
dWx0SWNvbkRhdGFiYXNlUGF0aCgpIGNvbnN0CitTdHJpbmcgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRm
b3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiA8cmRh
cjovL3Byb2JsZW0vOTEzODgxNz4gLSBBZnRlciB0aGlzICJiYWNrd2FyZHMgY29tcGF0aWJpbGl0
eSIgcmFkYXIgaXMgcmVtb3ZlZCwgdGhpcyBjb2RlIHNob3VsZCBiZSByZW1vdmVkIHRvIG9ubHkg
cmV0dXJuIGFuIGVtcHR5IFN0cmluZy4KICAgICBOU1N0cmluZyAqZGF0YWJhc2VzRGlyZWN0b3J5
ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9yS2V5Oldl
Ykljb25EYXRhYmFzZURpcmVjdG9yeURlZmF1bHRzS2V5XTsKQEAgLTM2MCw3ICszNjAsNyBAQCBT
dHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0SWNvbkRhCiAgICAgcmV0dXJuIHN0cmlu
Z0J5UmVzb2x2aW5nU3ltbGlua3NJblBhdGgoW2RhdGFiYXNlc0RpcmVjdG9yeSBzdHJpbmdCeVN0
YW5kYXJkaXppbmdQYXRoXSk7CiB9CiAKLVN0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1
bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKQorU3RyaW5nIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9y
bURlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKQogewogICAgIE5TU3RyaW5nICpsb2NhbFN0
b3JhZ2VEaXJlY3RvcnkgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBv
YmplY3RGb3JLZXk6V2ViU3RvcmFnZURpcmVjdG9yeURlZmF1bHRzS2V5XTsKICAgICBpZiAoIWxv
Y2FsU3RvcmFnZURpcmVjdG9yeSB8fCAhW2xvY2FsU3RvcmFnZURpcmVjdG9yeSBpc0tpbmRPZkNs
YXNzOltOU1N0cmluZyBjbGFzc11dKQpAQCAtMzY4LDcgKzM2OCw3IEBAIFN0cmluZyBXZWJDb250
ZXh0OjpwbGF0Zm9ybURlZmF1bHRMb2NhbFMKICAgICByZXR1cm4gc3RyaW5nQnlSZXNvbHZpbmdT
eW1saW5rc0luUGF0aChbbG9jYWxTdG9yYWdlRGlyZWN0b3J5IHN0cmluZ0J5U3RhbmRhcmRpemlu
Z1BhdGhdKTsKIH0KIAotU3RyaW5nIFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdE1lZGlhS2V5
c1N0b3JhZ2VEaXJlY3RvcnkoKQorU3RyaW5nIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybURlZmF1
bHRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCkKIHsKICAgICBOU1N0cmluZyAqbWVkaWFLZXlz
U3RvcmFnZURpcmVjdG9yeSA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
IG9iamVjdEZvcktleTpXZWJLaXRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5RGVmYXVsdHNLZXld
OwogICAgIGlmICghbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSB8fCAhW21lZGlhS2V5c1N0b3Jh
Z2VEaXJlY3RvcnkgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKQEAgLTM3NiwyOCAr
Mzc2LDI4IEBAIFN0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRNZWRpYUsKICAgICBy
ZXR1cm4gc3RyaW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aChbbWVkaWFLZXlzU3RvcmFnZURp
cmVjdG9yeSBzdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRoXSk7CiB9CiAKLWJvb2wgV2ViQ29udGV4
dDo6b21pdFBERlN1cHBvcnQoKQorYm9vbCBXZWJQcm9jZXNzUG9vbDo6b21pdFBERlN1cHBvcnQo
KQogewogICAgIC8vIFNpbmNlIHRoaXMgaXMgYSAic2VjcmV0IGRlZmF1bHQiIHdlIGRvbid0IGJv
dGhlciByZWdpc3RlcmluZyBpdC4KICAgICByZXR1cm4gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFy
ZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIldlYktpdE9taXRQREZTdXBwb3J0Il07CiB9CiAK
LXZvaWQgV2ViQ29udGV4dDo6Z2V0UGFzdGVib2FyZFR5cGVzKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUsIFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMpCit2b2lkIFdlYlByb2Nl
c3NQb29sOjpnZXRQYXN0ZWJvYXJkVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
VmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcykKIHsKICAgICBQbGF0Zm9ybVBhc3RlYm9h
cmQocGFzdGVib2FyZE5hbWUpLmdldFR5cGVzKHBhc3RlYm9hcmRUeXBlcyk7CiB9CiAKLXZvaWQg
V2ViQ29udGV4dDo6Z2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgVmVjdG9yPFN0cmlu
Zz4mIHBhdGhuYW1lcykKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdldFBhc3RlYm9hcmRQYXRobmFt
ZXNGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZFR5cGUsIFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMpCiB7CiAgICAgUGxhdGZvcm1Q
YXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5nZXRQYXRobmFtZXNGb3JUeXBlKHBhdGhuYW1lcywg
cGFzdGVib2FyZFR5cGUpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OmdldFBhc3RlYm9hcmRTdHJp
bmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZFR5cGUsIFN0cmluZyYgc3RyaW5nKQordm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2V0UGFz
dGVib2FyZFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgc3RyaW5nID0g
UGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zdHJpbmdGb3JUeXBlKHBhc3RlYm9h
cmRUeXBlKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0OjpnZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlw
ZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRU
eXBlLCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaGFuZGxlLCB1aW50NjRfdCYgc2l6ZSkKK3ZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OmdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFNoYXJlZE1lbW9y
eTo6SGFuZGxlJiBoYW5kbGUsIHVpbnQ2NF90JiBzaXplKQogewogICAgIFJlZlB0cjxTaGFyZWRC
dWZmZXI+IGJ1ZmZlciA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuYnVmZmVy
Rm9yVHlwZShwYXN0ZWJvYXJkVHlwZSk7CiAgICAgaWYgKCFidWZmZXIpCkBAIC00MTAsNTIgKzQx
MCw1MiBAQCB2b2lkIFdlYkNvbnRleHQ6OmdldFBhc3RlYm9hcmRCdWZmZXJGb3JUCiAgICAgc2hh
cmVkTWVtb3J5QnVmZmVyLT5jcmVhdGVIYW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRP
bmx5KTsKIH0KIAotdm9pZCBXZWJDb250ZXh0OjpwYXN0ZWJvYXJkQ29weShjb25zdCBTdHJpbmcm
IGZyb21QYXN0ZWJvYXJkLCBjb25zdCBTdHJpbmcmIHRvUGFzdGVib2FyZCwgdWludDY0X3QmIG5l
d0NoYW5nZUNvdW50KQordm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFzdGVib2FyZENvcHkoY29uc3Qg
U3RyaW5nJiBmcm9tUGFzdGVib2FyZCwgY29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQsIHVpbnQ2
NF90JiBuZXdDaGFuZ2VDb3VudCkKIHsKICAgICBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFz
dGVib2FyZCh0b1Bhc3RlYm9hcmQpLmNvcHkoZnJvbVBhc3RlYm9hcmQpOwogfQogCi12b2lkIFdl
YkNvbnRleHQ6OmdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lLCB1aW50NjRfdCYgY2hhbmdlQ291bnQpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpnZXRQ
YXN0ZWJvYXJkQ2hhbmdlQ291bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgdWludDY0
X3QmIGNoYW5nZUNvdW50KQogewogICAgIGNoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJk
KHBhc3RlYm9hcmROYW1lKS5jaGFuZ2VDb3VudCgpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6Omdl
dFBhc3RlYm9hcmRVbmlxdWVOYW1lKFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCit2b2lkIFdlYlBy
b2Nlc3NQb29sOjpnZXRQYXN0ZWJvYXJkVW5pcXVlTmFtZShTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KQogewogICAgIHBhc3RlYm9hcmROYW1lID0gUGxhdGZvcm1QYXN0ZWJvYXJkOjp1bmlxdWVOYW1l
KCk7CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6Z2V0UGFzdGVib2FyZENvbG9yKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKK3ZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OmdldFBhc3RlYm9hcmRDb2xvcihjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBX
ZWJDb3JlOjpDb2xvciYgY29sb3IpCiB7CiAgICAgY29sb3IgPSBQbGF0Zm9ybVBhc3RlYm9hcmQo
cGFzdGVib2FyZE5hbWUpLmNvbG9yKCk7ICAgIAogfQogCi12b2lkIFdlYkNvbnRleHQ6OmdldFBh
c3RlYm9hcmRVUkwoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgV1RGOjpTdHJpbmcmIHVy
bFN0cmluZykKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdldFBhc3RlYm9hcmRVUkwoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgV1RGOjpTdHJpbmcmIHVybFN0cmluZykKIHsKICAgICB1cmxT
dHJpbmcgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnVybCgpLnN0cmluZygp
OwogfQogCi12b2lkIFdlYkNvbnRleHQ6OmFkZFBhc3RlYm9hcmRUeXBlcyhjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCB1
aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpCit2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRQYXN0ZWJv
YXJkVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhc3RlYm9hcmRUeXBlcywgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KQogewogICAgIG5l
d0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5hZGRUeXBl
cyhwYXN0ZWJvYXJkVHlwZXMpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6OnNldFBhc3RlYm9hcmRU
eXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGFzdGVib2FyZFR5cGVzLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpCit2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXRQYXN0ZWJvYXJkVHlwZXMoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgdWludDY0X3QmIG5ld0NoYW5n
ZUNvdW50KQogewogICAgIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3Rl
Ym9hcmROYW1lKS5zZXRUeXBlcyhwYXN0ZWJvYXJkVHlwZXMpOwogfQogCi12b2lkIFdlYkNvbnRl
eHQ6OnNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXRobmFtZXMsIHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCkKK3ZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXRobmFtZXMsIHVpbnQ2NF90JiBuZXdDaGFuZ2VDb3VudCkKIHsKICAgICBuZXdDaGFuZ2VD
b3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuc2V0UGF0aG5hbWVzRm9y
VHlwZShwYXRobmFtZXMsIHBhc3RlYm9hcmRUeXBlKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0Ojpz
ZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHN0cmluZywgdWludDY0
X3QmIG5ld0NoYW5nZUNvdW50KQordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0UGFzdGVib2FyZFN0
cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIHVpbnQ2NF90JiBuZXdDaGFuZ2VD
b3VudCkKIHsKICAgICBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJv
YXJkTmFtZSkuc2V0U3RyaW5nRm9yVHlwZShzdHJpbmcsIHBhc3RlYm9hcmRUeXBlKTsKIH0KIAot
dm9pZCBXZWJDb250ZXh0OjpzZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTaGFy
ZWRNZW1vcnk6OkhhbmRsZSYgaGFuZGxlLCB1aW50NjRfdCBzaXplLCB1aW50NjRfdCYgbmV3Q2hh
bmdlQ291bnQpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlw
ZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRU
eXBlLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaGFuZGxlLCB1aW50NjRfdCBzaXplLCB1
aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpCiB7CiAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkgewog
ICAgICAgICBuZXdDaGFuZ2VDb3VudCA9IFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFt
ZSkuc2V0QnVmZmVyRm9yVHlwZSgwLCBwYXN0ZWJvYXJkVHlwZSk7CkBAIC00NjcsMzIgKzQ2Nywz
MiBAQCB2b2lkIFdlYkNvbnRleHQ6OnNldFBhc3RlYm9hcmRCdWZmZXJGb3JUCiB9CiAKICNpZiBQ
TEFURk9STShJT1MpCi12b2lkIFdlYkNvbnRleHQ6OndyaXRlV2ViQ29udGVudFRvUGFzdGVib2Fy
ZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkKK3ZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OndyaXRlV2ViQ29udGVudFRvUGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQ
YXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkKIHsKICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQo
KS53cml0ZShjb250ZW50KTsKIH0KIAotdm9pZCBXZWJDb250ZXh0Ojp3cml0ZUltYWdlVG9QYXN0
ZWJvYXJkKGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSYgcGFzdGVib2FyZEltYWdlKQor
dm9pZCBXZWJQcm9jZXNzUG9vbDo6d3JpdGVJbWFnZVRvUGFzdGVib2FyZChjb25zdCBXZWJDb3Jl
OjpQYXN0ZWJvYXJkSW1hZ2UmIHBhc3RlYm9hcmRJbWFnZSkKIHsKICAgICBQbGF0Zm9ybVBhc3Rl
Ym9hcmQoKS53cml0ZShwYXN0ZWJvYXJkSW1hZ2UpOwogfQogCi12b2lkIFdlYkNvbnRleHQ6Ondy
aXRlU3RyaW5nVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0
IFN0cmluZyYgdGV4dCkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OndyaXRlU3RyaW5nVG9QYXN0ZWJv
YXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsK
ICAgICBQbGF0Zm9ybVBhc3RlYm9hcmQoKS53cml0ZShwYXN0ZWJvYXJkVHlwZSwgdGV4dCk7CiB9
CiAKLXZvaWQgV2ViQ29udGV4dDo6cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGlu
ZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBXVEY6OlN0cmluZyYgdmFsdWUpCit2
b2lkIFdlYlByb2Nlc3NQb29sOjpyZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQodWludDY0X3QgaW5k
ZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFdURjo6U3RyaW5nJiB2YWx1ZSkKIHsK
ICAgICB2YWx1ZSA9IFBsYXRmb3JtUGFzdGVib2FyZCgpLnJlYWRTdHJpbmcoaW5kZXgsIHBhc3Rl
Ym9hcmRUeXBlKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0OjpyZWFkVVJMRnJvbVBhc3RlYm9hcmQo
dWludDY0X3QgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFN0cmluZyYgdXJs
KQordm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVhZFVSTEZyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGlu
ZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTdHJpbmcmIHVybCkKIHsKICAgICB1
cmwgPSBQbGF0Zm9ybVBhc3RlYm9hcmQoKS5yZWFkVVJMKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSk7
CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6cmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKHVpbnQ2NF90
IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTaGFyZWRNZW1vcnk6OkhhbmRs
ZSYgaGFuZGxlLCB1aW50NjRfdCYgc2l6ZSkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlYWRCdWZm
ZXJGcm9tUGFzdGVib2FyZCh1aW50NjRfdCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
VHlwZSwgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGhhbmRsZSwgdWludDY0X3QmIHNpemUpCiB7CiAg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gUGxhdGZvcm1QYXN0ZWJvYXJkKCkucmVh
ZEJ1ZmZlcihpbmRleCwgcGFzdGVib2FyZFR5cGUpOwogICAgIGlmICghYnVmZmVyKQpAQCAtNTA1
LDE5ICs1MDUsMTkgQEAgdm9pZCBXZWJDb250ZXh0OjpyZWFkQnVmZmVyRnJvbVBhc3RlYm9hcgog
ICAgIHNoYXJlZE1lbW9yeUJ1ZmZlci0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5
OjpSZWFkT25seSk7CiB9CiAKLXZvaWQgV2ViQ29udGV4dDo6Z2V0UGFzdGVib2FyZEl0ZW1zQ291
bnQodWludDY0X3QmIGl0ZW1zQ291bnQpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpnZXRQYXN0ZWJv
YXJkSXRlbXNDb3VudCh1aW50NjRfdCYgaXRlbXNDb3VudCkKIHsKICAgICBpdGVtc0NvdW50ID0g
UGxhdGZvcm1QYXN0ZWJvYXJkKCkuY291bnQoKTsKIH0KIAogI2VuZGlmCiAKLWJvb2wgV2ViQ29u
dGV4dDo6cHJvY2Vzc1N1cHByZXNzaW9uRW5hYmxlZCgpIGNvbnN0Citib29sIFdlYlByb2Nlc3NQ
b29sOjpwcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gIW1f
dXNlck9ic2VydmFibGVQYWdlQ291bnRlci52YWx1ZSgpICYmICFtX3Byb2Nlc3NTdXBwcmVzc2lv
bkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKTsKIH0KIAotdm9pZCBXZWJDb250ZXh0Ojpy
ZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpCit2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdp
c3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpCiB7CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICAv
LyBMaXN0ZW4gZm9yIGVuaGFuY2VkIGFjY2Vzc2liaWxpdHkgY2hhbmdlcyBhbmQgcHJvcGFnYXRl
IHRoZW0gdG8gdGhlIFdlYlByb2Nlc3MuCkBAIC01NDksNyArNTQ5LDcgQEAgdm9pZCBXZWJDb250
ZXh0OjpyZWdpc3Rlck5vdGlmaWNhdGlvbk9icwogI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiB9
CiAKLXZvaWQgV2ViQ29udGV4dDo6dW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpCit2
b2lkIFdlYlByb2Nlc3NQb29sOjp1bnJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCkKIHsK
ICNpZiAhUExBVEZPUk0oSU9TKQogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENl
bnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6bV9lbmhhbmNlZEFjY2Vzc2liaWxpdHlPYnNlcnZlci5nZXQo
KV07ICAgIApAQCAtNTc3LDcgKzU3Nyw3IEBAIHN0YXRpYyBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVm
IHByaXZhdGVCcm8KIH0KICNlbmRpZgogCi1ib29sIFdlYkNvbnRleHQ6OmlzVVJMS25vd25IU1RT
SG9zdChjb25zdCBTdHJpbmcmIHVybFN0cmluZywgYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVk
KSBjb25zdAorYm9vbCBXZWJQcm9jZXNzUG9vbDo6aXNVUkxLbm93bkhTVFNIb3N0KGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nLCBib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpIGNvbnN0CiB7CiAj
aWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEw
OTAKICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybCA9IFVSTChVUkwoKSwgdXJsU3RyaW5nKS5j
cmVhdGVDRlVSTCgpOwpAQCAtNTg4LDcgKzU4OCw3IEBAIGJvb2wgV2ViQ29udGV4dDo6aXNVUkxL
bm93bkhTVFNIb3N0KGNvbnMKICNlbmRpZgogfQogCi12b2lkIFdlYkNvbnRleHQ6OnJlc2V0SFNU
U0hvc3RzKCkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlc2V0SFNUU0hvc3RzKCkKIHsKICNpZiBQ
TEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA5MAog
ICAgIF9DRk5ldHdvcmtSZXNldEhTVFNIb3N0c1dpdGhTZXNzaW9uKG51bGxwdHIpOwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RhdGFiYXNlcy9EYXRhYmFzZVByb2Nlc3NQcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0RhdGFiYXNlcy9EYXRh
YmFzZVByb2Nlc3NQcm94eS5jcHAJKHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9EYXRhYmFzZXMvRGF0YWJhc2VQcm9jZXNzUHJveHkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw5ICsyOCw5IEBACiAKICNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3NNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRl
ICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eS5oIgog
I2luY2x1ZGUgIldlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUg
IldlYlByb2Nlc3NQb29sLmgiCiAKICNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKIApAQCAt
MzgsMTMgKzM4LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAotUGFzc1JlZlB0cjxEYXRhYmFzZVByb2Nlc3NQcm94eT4gRGF0YWJhc2VQcm9jZXNz
UHJveHk6OmNyZWF0ZShXZWJDb250ZXh0KiBjb250ZXh0KQorUGFzc1JlZlB0cjxEYXRhYmFzZVBy
b2Nlc3NQcm94eT4gRGF0YWJhc2VQcm9jZXNzUHJveHk6OmNyZWF0ZShXZWJQcm9jZXNzUG9vbCog
cHJvY2Vzc1Bvb2wpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZVByb2Nlc3NQ
cm94eShjb250ZXh0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhYmFzZVByb2Nlc3NQ
cm94eShwcm9jZXNzUG9vbCkpOwogfQogCi1EYXRhYmFzZVByb2Nlc3NQcm94eTo6RGF0YWJhc2VQ
cm9jZXNzUHJveHkoV2ViQ29udGV4dCogY29udGV4dCkKLSAgICA6IG1fd2ViQ29udGV4dChjb250
ZXh0KQorRGF0YWJhc2VQcm9jZXNzUHJveHk6OkRhdGFiYXNlUHJvY2Vzc1Byb3h5KFdlYlByb2Nl
c3NQb29sKiBwcm9jZXNzUG9vbCkKKyAgICA6IG1fcHJvY2Vzc1Bvb2wocHJvY2Vzc1Bvb2wpCiAg
ICAgLCBtX251bVBlbmRpbmdDb25uZWN0aW9uUmVxdWVzdHMoMCkKIHsKICAgICBjb25uZWN0KCk7
CkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgRGF0YWJhc2VQcm9jZXNzUHJveHk6OmRpZFJlY2VpdmVN
ZXMKICAgICB9CiAKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVz
c2FnZXM6OldlYk9yaWdpbkRhdGFNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkg
ewotICAgICAgICBtX3dlYkNvbnRleHQtPnN1cHBsZW1lbnQ8V2ViT3JpZ2luRGF0YU1hbmFnZXJQ
cm94eT4oKS0+ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CisgICAgICAg
IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViT3JpZ2luRGF0YU1hbmFnZXJQcm94eT4oKS0+
ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiB9CkBAIC0xMDksOSArMTA5LDggQEAgdm9pZCBEYXRhYmFzZVByb2Nlc3NQcm94eTo6
ZGlkQ2xvc2UoSVBDOgogI2VuZGlmCiAgICAgfQogCi0gICAgLy8gVGVsbCBXZWJDb250ZXh0IHRv
IGZvcmdldCBhYm91dCB0aGlzIGRhdGFiYXNlIHByb2Nlc3MuIFRoaXMgbWF5IGNhdXNlIHVzIHRv
IGJlIGRlbGV0ZWQuCi0gICAgbV93ZWJDb250ZXh0LT5kYXRhYmFzZVByb2Nlc3NDcmFzaGVkKHRo
aXMpOwotICAgIAorICAgIC8vIFRlbGwgUHJvY2Vzc1Bvb2wgdG8gZm9yZ2V0IGFib3V0IHRoaXMg
ZGF0YWJhc2UgcHJvY2Vzcy4gVGhpcyBtYXkgY2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4KKyAgICBt
X3Byb2Nlc3NQb29sLT5kYXRhYmFzZVByb2Nlc3NDcmFzaGVkKHRoaXMpOwogfQogCiB2b2lkIERh
dGFiYXNlUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uKiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJp
bmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RGF0YWJhc2VzL0RhdGFiYXNlUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0RhdGFiYXNlcy9EYXRhYmFzZVByb2Nlc3NQcm94eS5oCShyZXZpc2lv
biAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRGF0YWJhc2VzL0RhdGFiYXNl
UHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE3ICszNSwxNyBAQAogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViQ29udGV4dDsKK2NsYXNzIFdlYlByb2Nlc3NQb29s
OwogCiBjbGFzcyBEYXRhYmFzZVByb2Nlc3NQcm94eSA6IHB1YmxpYyBDaGlsZFByb2Nlc3NQcm94
eSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VQcm9jZXNzUHJveHk+
IGNyZWF0ZShXZWJDb250ZXh0Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YWJhc2VQcm9j
ZXNzUHJveHk+IGNyZWF0ZShXZWJQcm9jZXNzUG9vbCopOwogICAgIH5EYXRhYmFzZVByb2Nlc3NQ
cm94eSgpOwogCiAgICAgdm9pZCBnZXREYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uKFBhc3NSZWZQ
dHI8TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0RGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlv
bjo6RGVsYXllZFJlcGx5Pik7CiAKIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VQcm9jZXNzUHJveHko
V2ViQ29udGV4dCopOworICAgIERhdGFiYXNlUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQb29sKik7
CiAKICAgICAvLyBDaGlsZFByb2Nlc3NQcm94eQogICAgIHZpcnR1YWwgdm9pZCBnZXRMYXVuY2hP
cHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYpIG92ZXJyaWRlOwpAQCAtNjcs
NyArNjcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwbGF0Zm9ybUdldExhdW5jaE9wdGlvbnMo
UHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJik7CiAKLSAgICBXZWJDb250ZXh0KiBtX3dl
YkNvbnRleHQ7CisgICAgV2ViUHJvY2Vzc1Bvb2wqIG1fcHJvY2Vzc1Bvb2w7CiAKICAgICB1bnNp
Z25lZCBtX251bVBlbmRpbmdDb25uZWN0aW9uUmVxdWVzdHM7CiAgICAgRGVxdWU8UmVmUHRyPE1l
c3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldERhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb246OkRl
bGF5ZWRSZXBseT4+IG1fcGVuZGluZ0Nvbm5lY3Rpb25SZXBsaWVzOwpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCShy
ZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rv
d25sb2FkUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVk
ZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIkRhdGFSZWZlcmVu
Y2UuaCIKICNpbmNsdWRlICJEb3dubG9hZFByb3h5TWFwLmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4
dC5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nl
c3NQb29sLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCkBAIC01MSwxNCArNTEsMTQgQEAgc3RhdGljIHVpbnQ2NF90IGdl
bmVyYXRlRG93bmxvYWRJRCgpCiAgICAgcmV0dXJuICsrdW5pcXVlRG93bmxvYWRJRDsKIH0KICAg
ICAKLVBhc3NSZWZQdHI8RG93bmxvYWRQcm94eT4gRG93bmxvYWRQcm94eTo6Y3JlYXRlKERvd25s
b2FkUHJveHlNYXAmIGRvd25sb2FkUHJveHlNYXAsIFdlYkNvbnRleHQmIHdlYkNvbnRleHQsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0KQorUGFzc1JlZlB0cjxEb3dubG9h
ZFByb3h5PiBEb3dubG9hZFByb3h5OjpjcmVhdGUoRG93bmxvYWRQcm94eU1hcCYgZG93bmxvYWRQ
cm94eU1hcCwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlc291cmNlUmVxdWVzdCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IERvd25sb2Fk
UHJveHkoZG93bmxvYWRQcm94eU1hcCwgd2ViQ29udGV4dCwgcmVzb3VyY2VSZXF1ZXN0KSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEb3dubG9hZFByb3h5KGRvd25sb2FkUHJveHlNYXAsIHBy
b2Nlc3NQb29sLCByZXNvdXJjZVJlcXVlc3QpKTsKIH0KIAotRG93bmxvYWRQcm94eTo6RG93bmxv
YWRQcm94eShEb3dubG9hZFByb3h5TWFwJiBkb3dubG9hZFByb3h5TWFwLCBXZWJDb250ZXh0JiB3
ZWJDb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKK0Rvd25s
b2FkUHJveHk6OkRvd25sb2FkUHJveHkoRG93bmxvYWRQcm94eU1hcCYgZG93bmxvYWRQcm94eU1h
cCwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
c291cmNlUmVxdWVzdCkKICAgICA6IG1fZG93bmxvYWRQcm94eU1hcChkb3dubG9hZFByb3h5TWFw
KQotICAgICwgbV93ZWJDb250ZXh0KCZ3ZWJDb250ZXh0KQorICAgICwgbV9wcm9jZXNzUG9vbCgm
cHJvY2Vzc1Bvb2wpCiAgICAgLCBtX2Rvd25sb2FkSUQoZ2VuZXJhdGVEb3dubG9hZElEKCkpCiAg
ICAgLCBtX3JlcXVlc3QocmVzb3VyY2VSZXF1ZXN0KQogewpAQCAtNjYsOTMgKzY2LDkzIEBAIERv
d25sb2FkUHJveHk6OkRvd25sb2FkUHJveHkoRG93bmxvYWRQcm8KIAogRG93bmxvYWRQcm94eTo6
fkRvd25sb2FkUHJveHkoKQogewotICAgIEFTU0VSVCghbV93ZWJDb250ZXh0KTsKKyAgICBBU1NF
UlQoIW1fcHJvY2Vzc1Bvb2wpOwogfQogCiB2b2lkIERvd25sb2FkUHJveHk6OmNhbmNlbCgpCiB7
Ci0gICAgaWYgKCFtX3dlYkNvbnRleHQpCisgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAg
ICByZXR1cm47CiAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotICAgIGlmIChtX3dlYkNv
bnRleHQtPnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAgIGlmIChOZXR3b3JrUHJvY2Vz
c1Byb3h5KiBuZXR3b3JrUHJvY2VzcyA9IG1fd2ViQ29udGV4dC0+bmV0d29ya1Byb2Nlc3MoKSkK
KyAgICBpZiAobV9wcm9jZXNzUG9vbC0+dXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICAgICAg
aWYgKE5ldHdvcmtQcm9jZXNzUHJveHkqIG5ldHdvcmtQcm9jZXNzID0gbV9wcm9jZXNzUG9vbC0+
bmV0d29ya1Byb2Nlc3MoKSkKICAgICAgICAgICAgIG5ldHdvcmtQcm9jZXNzLT5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDYW5jZWxEb3dubG9hZChtX2Rvd25s
b2FkSUQpLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCi0gICAgbV93ZWJD
b250ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkNhbmNlbERv
d25sb2FkKG1fZG93bmxvYWRJRCkpOworICAgIG1fcHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6Q2FuY2VsRG93bmxvYWQobV9kb3dubG9hZElEKSk7
CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgQVNTRVJUKG1f
d2ViQ29udGV4dCk7Ci0gICAgbV93ZWJDb250ZXh0ID0gMDsKKyAgICBBU1NFUlQobV9wcm9jZXNz
UG9vbCk7CisgICAgbV9wcm9jZXNzUG9vbCA9IG51bGxwdHI7CiB9CiAKIHZvaWQgRG93bmxvYWRQ
cm94eTo6cHJvY2Vzc0RpZENsb3NlKCkKIHsKLSAgICBpZiAoIW1fd2ViQ29udGV4dCkKKyAgICBp
ZiAoIW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fd2ViQ29udGV4dC0+
ZG93bmxvYWRDbGllbnQoKS5wcm9jZXNzRGlkQ3Jhc2gobV93ZWJDb250ZXh0LmdldCgpLCB0aGlz
KTsKKyAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLnByb2Nlc3NEaWRDcmFzaCht
X3Byb2Nlc3NQb29sLmdldCgpLCB0aGlzKTsKIH0KIAogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRT
dGFydChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgbV9yZXF1ZXN0ID0g
cmVxdWVzdDsKIAotICAgIGlmICghbV93ZWJDb250ZXh0KQorICAgIGlmICghbV9wcm9jZXNzUG9v
bCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJDb250ZXh0LT5kb3dubG9hZENsaWVudCgp
LmRpZFN0YXJ0KG1fd2ViQ29udGV4dC5nZXQoKSwgdGhpcyk7CisgICAgbV9wcm9jZXNzUG9vbC0+
ZG93bmxvYWRDbGllbnQoKS5kaWRTdGFydChtX3Byb2Nlc3NQb29sLmdldCgpLCB0aGlzKTsKIH0K
IAogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCB1
aW50NjRfdCBjaGFsbGVuZ2VJRCkKIHsKLSAgICBpZiAoIW1fd2ViQ29udGV4dCkKKyAgICBpZiAo
IW1fcHJvY2Vzc1Bvb2wpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVByb3h5PiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5ID0gQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VQcm94eTo6Y3JlYXRlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBj
aGFsbGVuZ2VJRCwgbV93ZWJDb250ZXh0LT5uZXR3b3JraW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKSk7
CisgICAgUmVmUHRyPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+IGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlUHJveHkgPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5OjpjcmVhdGUoYXV0
aGVudGljYXRpb25DaGFsbGVuZ2UsIGNoYWxsZW5nZUlELCBtX3Byb2Nlc3NQb29sLT5uZXR3b3Jr
aW5nUHJvY2Vzc0Nvbm5lY3Rpb24oKSk7CiAKLSAgICBtX3dlYkNvbnRleHQtPmRvd25sb2FkQ2xp
ZW50KCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKG1fd2ViQ29udGV4dC5nZXQo
KSwgdGhpcywgYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5nZXQoKSk7CisgICAgbV9wcm9j
ZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UobV9wcm9jZXNzUG9vbC5nZXQoKSwgdGhpcywgYXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eS5nZXQoKSk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIGlmICghbV93ZWJDb250ZXh0
KQorICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJD
b250ZXh0LT5kb3dubG9hZENsaWVudCgpLmRpZFJlY2VpdmVSZXNwb25zZShtX3dlYkNvbnRleHQu
Z2V0KCksIHRoaXMsIHJlc3BvbnNlKTsKKyAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVu
dCgpLmRpZFJlY2VpdmVSZXNwb25zZShtX3Byb2Nlc3NQb29sLmdldCgpLCB0aGlzLCByZXNwb25z
ZSk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkUmVjZWl2ZURhdGEodWludDY0X3QgbGVu
Z3RoKQogewotICAgIGlmICghbV93ZWJDb250ZXh0KQorICAgIGlmICghbV9wcm9jZXNzUG9vbCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJDb250ZXh0LT5kb3dubG9hZENsaWVudCgpLmRp
ZFJlY2VpdmVEYXRhKG1fd2ViQ29udGV4dC5nZXQoKSwgdGhpcywgbGVuZ3RoKTsKKyAgICBtX3By
b2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRpZFJlY2VpdmVEYXRhKG1fcHJvY2Vzc1Bvb2wu
Z2V0KCksIHRoaXMsIGxlbmd0aCk7CiB9CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6c2hvdWxkRGVj
b2RlU291cmNlRGF0YU9mTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgYm9vbCYgcmVz
dWx0KQogewogICAgIHJlc3VsdCA9IGZhbHNlOwogCi0gICAgaWYgKCFtX3dlYkNvbnRleHQpCisg
ICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAKLSAgICByZXN1bHQgPSBt
X3dlYkNvbnRleHQtPmRvd25sb2FkQ2xpZW50KCkuc2hvdWxkRGVjb2RlU291cmNlRGF0YU9mTUlN
RVR5cGUobV93ZWJDb250ZXh0LmdldCgpLCB0aGlzLCBtaW1lVHlwZSk7CisgICAgcmVzdWx0ID0g
bV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5zaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZN
SU1FVHlwZShtX3Byb2Nlc3NQb29sLmdldCgpLCB0aGlzLCBtaW1lVHlwZSk7CiB9CiAKIHZvaWQg
RG93bmxvYWRQcm94eTo6ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoY29u
c3QgU3RyaW5nJiBmaWxlbmFtZSwgU3RyaW5nJiBkZXN0aW5hdGlvbiwgYm9vbCYgYWxsb3dPdmVy
d3JpdGUsIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkK
IHsKICAgICBhbGxvd092ZXJ3cml0ZSA9IGZhbHNlOwogCi0gICAgaWYgKCFtX3dlYkNvbnRleHQp
CisgICAgaWYgKCFtX3Byb2Nlc3NQb29sKQogICAgICAgICByZXR1cm47CiAKLSAgICBkZXN0aW5h
dGlvbiA9IG1fd2ViQ29udGV4dC0+ZG93bmxvYWRDbGllbnQoKS5kZWNpZGVEZXN0aW5hdGlvbldp
dGhTdWdnZXN0ZWRGaWxlbmFtZShtX3dlYkNvbnRleHQuZ2V0KCksIHRoaXMsIGZpbGVuYW1lLCBh
bGxvd092ZXJ3cml0ZSk7CisgICAgZGVzdGluYXRpb24gPSBtX3Byb2Nlc3NQb29sLT5kb3dubG9h
ZENsaWVudCgpLmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKG1fcHJvY2Vz
c1Bvb2wuZ2V0KCksIHRoaXMsIGZpbGVuYW1lLCBhbGxvd092ZXJ3cml0ZSk7CiAKICAgICBpZiAo
IWRlc3RpbmF0aW9uLmlzTnVsbCgpKQogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVI
YW5kbGUoZGVzdGluYXRpb24sIFNhbmRib3hFeHRlbnNpb246OlJlYWRXcml0ZSwgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZSk7CkBAIC0xNjAsMTggKzE2MCwxOCBAQCB2b2lkIERvd25sb2FkUHJveHk6
OmRlY2lkZURlc3RpbmF0aW9uV2l0CiAKIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlkQ3JlYXRlRGVz
dGluYXRpb24oY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIGlmICghbV93ZWJDb250ZXh0KQor
ICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93ZWJDb250
ZXh0LT5kb3dubG9hZENsaWVudCgpLmRpZENyZWF0ZURlc3RpbmF0aW9uKG1fd2ViQ29udGV4dC5n
ZXQoKSwgdGhpcywgcGF0aCk7CisgICAgbV9wcm9jZXNzUG9vbC0+ZG93bmxvYWRDbGllbnQoKS5k
aWRDcmVhdGVEZXN0aW5hdGlvbihtX3Byb2Nlc3NQb29sLmdldCgpLCB0aGlzLCBwYXRoKTsKIH0K
IAogdm9pZCBEb3dubG9hZFByb3h5OjpkaWRGaW5pc2goKQogewotICAgIGlmICghbV93ZWJDb250
ZXh0KQorICAgIGlmICghbV9wcm9jZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV93
ZWJDb250ZXh0LT5kb3dubG9hZENsaWVudCgpLmRpZEZpbmlzaChtX3dlYkNvbnRleHQuZ2V0KCks
IHRoaXMpOworICAgIG1fcHJvY2Vzc1Bvb2wtPmRvd25sb2FkQ2xpZW50KCkuZGlkRmluaXNoKG1f
cHJvY2Vzc1Bvb2wuZ2V0KCksIHRoaXMpOwogCiAgICAgLy8gVGhpcyBjYW4gY2F1c2UgdGhlIERv
d25sb2FkUHJveHkgb2JqZWN0IHRvIGJlIGRlbGV0ZWQuCiAgICAgbV9kb3dubG9hZFByb3h5TWFw
LmRvd25sb2FkRmluaXNoZWQodGhpcyk7CkBAIC0xODcsMTIgKzE4NywxMiBAQCBzdGF0aWMgUGFz
c1JlZlB0cjxBUEk6OkRhdGE+IGNyZWF0ZURhdGEoCiAKIHZvaWQgRG93bmxvYWRQcm94eTo6ZGlk
RmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvciwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiByZXN1bWVEYXRhKQogewotICAgIGlmICghbV93ZWJDb250ZXh0KQorICAgIGlmICghbV9wcm9j
ZXNzUG9vbCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9yZXN1bWVEYXRhID0gY3JlYXRlRGF0
YShyZXN1bWVEYXRhKTsKIAotICAgIG1fd2ViQ29udGV4dC0+ZG93bmxvYWRDbGllbnQoKS5kaWRG
YWlsKG1fd2ViQ29udGV4dC5nZXQoKSwgdGhpcywgZXJyb3IpOworICAgIG1fcHJvY2Vzc1Bvb2wt
PmRvd25sb2FkQ2xpZW50KCkuZGlkRmFpbChtX3Byb2Nlc3NQb29sLmdldCgpLCB0aGlzLCBlcnJv
cik7CiAKICAgICAvLyBUaGlzIGNhbiBjYXVzZSB0aGUgRG93bmxvYWRQcm94eSBvYmplY3QgdG8g
YmUgZGVsZXRlZC4KICAgICBtX2Rvd25sb2FkUHJveHlNYXAuZG93bmxvYWRGaW5pc2hlZCh0aGlz
KTsKQEAgLTIwMiw3ICsyMDIsNyBAQCB2b2lkIERvd25sb2FkUHJveHk6OmRpZENhbmNlbChjb25z
dCBJUEM6CiB7CiAgICAgbV9yZXN1bWVEYXRhID0gY3JlYXRlRGF0YShyZXN1bWVEYXRhKTsKIAot
ICAgIG1fd2ViQ29udGV4dC0+ZG93bmxvYWRDbGllbnQoKS5kaWRDYW5jZWwobV93ZWJDb250ZXh0
LmdldCgpLCB0aGlzKTsKKyAgICBtX3Byb2Nlc3NQb29sLT5kb3dubG9hZENsaWVudCgpLmRpZENh
bmNlbChtX3Byb2Nlc3NQb29sLmdldCgpLCB0aGlzKTsKIAogICAgIC8vIFRoaXMgY2FuIGNhdXNl
IHRoZSBEb3dubG9hZFByb3h5IG9iamVjdCB0byBiZSBkZWxldGVkLgogICAgIG1fZG93bmxvYWRQ
cm94eU1hcC5kb3dubG9hZEZpbmlzaGVkKHRoaXMpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5LmgJKHJldmlzaW9uIDE3NzY5
MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7Ci1jbGFzcyBXZWJD
b250ZXh0OwogY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiAKIGNs
YXNzIERvd25sb2FkUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpU
eXBlOjpEb3dubG9hZD4sIHB1YmxpYyBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8RG93bmxvYWRQcm94eT4gY3JlYXRlKERvd25sb2FkUHJveHlN
YXAmLCBXZWJDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8RG93bmxvYWRQcm94eT4gY3JlYXRlKERvd25sb2FkUHJveHlNYXAm
LCBXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwogICAg
IH5Eb3dubG9hZFByb3h5KCk7CiAKICAgICB1aW50NjRfdCBkb3dubG9hZElEKCkgY29uc3QgeyBy
ZXR1cm4gbV9kb3dubG9hZElEOyB9CkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGRpZFJlY2VpdmVTeW5jRG93bmxvYWRQcm94eU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uKiwgSVBD
OjpNZXNzYWdlRGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYp
OwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IERvd25sb2FkUHJveHkoRG93bmxvYWRQcm94eU1h
cCYsIFdlYkNvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICBl
eHBsaWNpdCBEb3dubG9hZFByb3h5KERvd25sb2FkUHJveHlNYXAmLCBXZWJQcm9jZXNzUG9vbCYs
IGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwogCiAgICAgLy8gSVBDOjpNZXNzYWdl
UmVjZWl2ZXIKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uKiwgSVBDOjpNZXNzYWdlRGVjb2RlciYpIG92ZXJyaWRlOwpAQCAtODYsNyArODYsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgZGlkQ2FuY2VsKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgcmVz
dW1lRGF0YSk7CiAKICAgICBEb3dubG9hZFByb3h5TWFwJiBtX2Rvd25sb2FkUHJveHlNYXA7Ci0g
ICAgUmVmUHRyPFdlYkNvbnRleHQ+IG1fd2ViQ29udGV4dDsKKyAgICBSZWZQdHI8V2ViUHJvY2Vz
c1Bvb2w+IG1fcHJvY2Vzc1Bvb2w7CiAgICAgdWludDY0X3QgbV9kb3dubG9hZElEOwogCiAgICAg
UmVmUHRyPEFQSTo6RGF0YT4gbV9yZXN1bWVEYXRhOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwCShyZXZp
c2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkUHJveHlNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw5IEBAIERvd25sb2Fk
UHJveHlNYXA6On5Eb3dubG9hZFByb3h5TWFwKCkKICAgICBBU1NFUlQobV9kb3dubG9hZHMuaXNF
bXB0eSgpKTsKIH0KIAotRG93bmxvYWRQcm94eSogRG93bmxvYWRQcm94eU1hcDo6Y3JlYXRlRG93
bmxvYWRQcm94eShXZWJDb250ZXh0JiB3ZWJDb250ZXh0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKK0Rvd25sb2FkUHJveHkqIERvd25sb2FkUHJveHlN
YXA6OmNyZWF0ZURvd25sb2FkUHJveHkoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlc291cmNlUmVxdWVzdCkKIHsKLSAgICBSZWZQ
dHI8RG93bmxvYWRQcm94eT4gZG93bmxvYWRQcm94eSA9IERvd25sb2FkUHJveHk6OmNyZWF0ZSgq
dGhpcywgd2ViQ29udGV4dCwgcmVzb3VyY2VSZXF1ZXN0KTsKKyAgICBSZWZQdHI8RG93bmxvYWRQ
cm94eT4gZG93bmxvYWRQcm94eSA9IERvd25sb2FkUHJveHk6OmNyZWF0ZSgqdGhpcywgcHJvY2Vz
c1Bvb2wsIHJlc291cmNlUmVxdWVzdCk7CiAgICAgbV9kb3dubG9hZHMuc2V0KGRvd25sb2FkUHJv
eHktPmRvd25sb2FkSUQoKSwgZG93bmxvYWRQcm94eSk7CiAKICAgICBtX3Byb2Nlc3MtPmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RG93bmxvYWRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBkb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCksICpkb3dubG9hZFByb3h5KTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQ
cm94eU1hcC5oCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
RG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQ2hpbGRQcm9jZXNzUHJveHk7CiBjbGFz
cyBEb3dubG9hZFByb3h5OwotY2xhc3MgV2ViQ29udGV4dDsKK2NsYXNzIFdlYlByb2Nlc3NQb29s
OwogCiBjbGFzcyBEb3dubG9hZFByb3h5TWFwIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShE
b3dubG9hZFByb3h5TWFwKTsKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0
IERvd25sb2FkUHJveHlNYXAoQ2hpbGRQcm9jZXNzUHJveHkqKTsKICAgICB+RG93bmxvYWRQcm94
eU1hcCgpOwogCi0gICAgRG93bmxvYWRQcm94eSogY3JlYXRlRG93bmxvYWRQcm94eShXZWJDb250
ZXh0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgRG93bmxvYWRQcm94
eSogY3JlYXRlRG93bmxvYWRQcm94eShXZWJQcm9jZXNzUG9vbCYsIGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYpOwogICAgIHZvaWQgZG93bmxvYWRGaW5pc2hlZChEb3dubG9hZFByb3h5
Kik7CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2Rvd25sb2Fkcy5pc0Vt
cHR5KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQAogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNZXNz
YWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAj
aW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkNvbnRleHQu
aCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNz
UG9vbC5oIgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKICNpZiBFTkFCTEUoU0VDX0lURU1f
U0hJTSkKQEAgLTU4LDE1ICs1OCwxNSBAQCBzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVDYWxsYmFj
a0lEKCkKICAgICByZXR1cm4gKytjYWxsYmFja0lEOwogfQogCi1QYXNzUmVmUHRyPE5ldHdvcmtQ
cm9jZXNzUHJveHk+IE5ldHdvcmtQcm9jZXNzUHJveHk6OmNyZWF0ZShXZWJDb250ZXh0JiB3ZWJD
b250ZXh0KQorUGFzc1JlZlB0cjxOZXR3b3JrUHJvY2Vzc1Byb3h5PiBOZXR3b3JrUHJvY2Vzc1By
b3h5OjpjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQogewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTmV0d29ya1Byb2Nlc3NQcm94eSh3ZWJDb250ZXh0KSk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBOZXR3b3JrUHJvY2Vzc1Byb3h5KHByb2Nlc3NQb29sKSk7CiB9CiAKLU5l
dHdvcmtQcm9jZXNzUHJveHk6Ok5ldHdvcmtQcm9jZXNzUHJveHkoV2ViQ29udGV4dCYgd2ViQ29u
dGV4dCkKLSAgICA6IG1fd2ViQ29udGV4dCh3ZWJDb250ZXh0KQorTmV0d29ya1Byb2Nlc3NQcm94
eTo6TmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCisgICAg
OiBtX3Byb2Nlc3NQb29sKHByb2Nlc3NQb29sKQogICAgICwgbV9udW1QZW5kaW5nQ29ubmVjdGlv
blJlcXVlc3RzKDApCi0gICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5KHRoaXMsIHdl
YkNvbnRleHQpCisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5KHRoaXMsIHByb2Nl
c3NQb29sKQogewogICAgIGNvbm5lY3QoKTsKIH0KQEAgLTExMiw3ICsxMTIsNyBAQCBEb3dubG9h
ZFByb3h5KiBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpjcmVhCiAgICAgaWYgKCFtX2Rvd25sb2FkUHJv
eHlNYXApCiAgICAgICAgIG1fZG93bmxvYWRQcm94eU1hcCA9IHN0ZDo6bWFrZV91bmlxdWU8RG93
bmxvYWRQcm94eU1hcD4odGhpcyk7CiAKLSAgICByZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5j
cmVhdGVEb3dubG9hZFByb3h5KG1fd2ViQ29udGV4dCwgcmVzb3VyY2VSZXF1ZXN0KTsKKyAgICBy
ZXR1cm4gbV9kb3dubG9hZFByb3h5TWFwLT5jcmVhdGVEb3dubG9hZFByb3h5KG1fcHJvY2Vzc1Bv
b2wsIHJlc291cmNlUmVxdWVzdCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGVs
ZXRlV2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgV2Vic2l0ZURhdGFU
eXBlcyBkYXRhVHlwZXMsIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9k
aWZpZWRTaW5jZSwgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xNDMsNyArMTQzLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpuZXR3b3JrUHJvY2Vz
cwogICAgIG1fcGVuZGluZ0RlbGV0ZVdlYnNpdGVEYXRhQ2FsbGJhY2tzLmNsZWFyKCk7CiAKICAg
ICAvLyBUZWxsIHRoZSBuZXR3b3JrIHByb2Nlc3MgbWFuYWdlciB0byBmb3JnZXQgYWJvdXQgdGhp
cyBuZXR3b3JrIHByb2Nlc3MgcHJveHkuIFRoaXMgbWF5IGNhdXNlIHVzIHRvIGJlIGRlbGV0ZWQu
Ci0gICAgbV93ZWJDb250ZXh0Lm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCh0aGlzKTsKKyAgICBtX3By
b2Nlc3NQb29sLm5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCh0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rp
b24sIElQQzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIpCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWRSZWNlaXZlTWVzcwogICAgIGlmIChkaXNwYXRjaE1l
c3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICht
X3dlYkNvbnRleHQuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKQorICAgIGlm
IChtX3Byb2Nlc3NQb29sLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgZGlkUmVjZWl2ZU5ldHdvcmtQcm9jZXNzUHJveHlNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpOwpAQCAtMjI0LDcgKzIyNCw3IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1bmMKICAgICBtX251bVBlbmRpbmdDb25uZWN0aW9uUmVx
dWVzdHMgPSAwOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKG1fd2ViQ29udGV4dC5w
cm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCkpCisgICAgaWYgKG1fcHJvY2Vzc1Bvb2wucHJvY2Vz
c1N1cHByZXNzaW9uRW5hYmxlZCgpKQogICAgICAgICBzZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFi
bGVkKHRydWUpOwogI2VuZGlmCiAgICAgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCShyZXZpc2lvbiAxNzc2
OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDEyICs1MCwxMiBAQCBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogY2xhc3MgRG93bmxvYWRQcm94eTsKIGNsYXNzIERvd25sb2FkUHJveHlNYXA7Ci1jbGFz
cyBXZWJDb250ZXh0OworY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBzdHJ1Y3QgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM7CiAKIGNsYXNzIE5ldHdvcmtQcm9jZXNzUHJveHkgOiBwdWJs
aWMgQ2hpbGRQcm9jZXNzUHJveHkgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5l
dHdvcmtQcm9jZXNzUHJveHk+IGNyZWF0ZShXZWJDb250ZXh0Jik7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TmV0d29ya1Byb2Nlc3NQcm94eT4gY3JlYXRlKFdlYlByb2Nlc3NQb29sJik7CiAgICAg
fk5ldHdvcmtQcm9jZXNzUHJveHkoKTsKIAogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uKFBhc3NSZWZQdHI8TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0TmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHk+KTsKQEAgLTY5LDcgKzY5LDcgQEAgcHVibGlj
OgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJDb250ZXh0
Jik7CisgICAgTmV0d29ya1Byb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYpOwogCiAgICAgLy8g
Q2hpbGRQcm9jZXNzUHJveHkKICAgICB2aXJ0dWFsIHZvaWQgZ2V0TGF1bmNoT3B0aW9ucyhQcm9j
ZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmKSBvdmVycmlkZTsKQEAgLTk0LDcgKzk0LDcgQEAg
cHJpdmF0ZToKICAgICAvLyBQcm9jZXNzTGF1bmNoZXI6OkNsaWVudAogICAgIHZpcnR1YWwgdm9p
ZCBkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiwgSVBDOjpDb25uZWN0aW9uOjpJ
ZGVudGlmaWVyKSBvdmVycmlkZTsKIAotICAgIFdlYkNvbnRleHQmIG1fd2ViQ29udGV4dDsKKyAg
ICBXZWJQcm9jZXNzUG9vbCYgbV9wcm9jZXNzUG9vbDsKICAgICAKICAgICB1bnNpZ25lZCBtX251
bVBlbmRpbmdDb25uZWN0aW9uUmVxdWVzdHM7CiAgICAgRGVxdWU8UmVmUHRyPE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzUHJveHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5
Pj4gbV9wZW5kaW5nQ29ubmVjdGlvblJlcGxpZXM7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Q
cm90b2NvbHMvQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHkuaAkocmV2aXNpb24gMTc3NjkwKQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9tUHJvdG9jb2xzL0N1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDExICs0MSwxMSBA
QCBjbGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQ2hp
bGRQcm9jZXNzUHJveHk7Ci1jbGFzcyBXZWJDb250ZXh0OworY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7
CiAKIGNsYXNzIEN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5IDogcHVibGljIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBDdXN0b21Qcm90b2NvbE1hbmFnZXJQ
cm94eShDaGlsZFByb2Nlc3NQcm94eSosIFdlYkNvbnRleHQmKTsKKyAgICBleHBsaWNpdCBDdXN0
b21Qcm90b2NvbE1hbmFnZXJQcm94eShDaGlsZFByb2Nlc3NQcm94eSosIFdlYlByb2Nlc3NQb29s
Jik7CiAKICAgICB2b2lkIHN0YXJ0TG9hZGluZyh1aW50NjRfdCBjdXN0b21Qcm90b2NvbElELCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKICAgICB2b2lkIHN0b3BMb2FkaW5nKHVp
bnQ2NF90IGN1c3RvbVByb3RvY29sSUQpOwpAQCAtNTUsNyArNTUsNyBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24qLCBJUEM6Ok1l
c3NhZ2VEZWNvZGVyJikgb3ZlcnJpZGU7CiAKICAgICBDaGlsZFByb2Nlc3NQcm94eSogbV9jaGls
ZFByb2Nlc3NQcm94eTsKLSAgICBXZWJDb250ZXh0JiBtX3dlYkNvbnRleHQ7CisgICAgV2ViUHJv
Y2Vzc1Bvb2wmIG1fcHJvY2Vzc1Bvb2w7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB0eXBl
ZGVmIEhhc2hNYXA8dWludDY0X3QsIFJldGFpblB0cjxXS0N1c3RvbVByb3RvY29sTG9hZGVyPj4g
TG9hZGVyTWFwOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvQ3VzdG9t
UHJvdG9jb2xzL21hYy9DdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvbWFj
L0N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWFjLm1tCShyZXZpc2lvbiAxNzc2OTApCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9DdXN0b21Qcm90b2NvbHMvbWFjL0N1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsOSArMTIw
LDkgQEAgLSAodm9pZCljb25uZWN0aW9uRGlkRmluaXNoTG9hZGluZzooTlNVUgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAotQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6OkN1c3RvbVByb3RvY29s
TWFuYWdlclByb3h5KENoaWxkUHJvY2Vzc1Byb3h5KiBjaGlsZFByb2Nlc3NQcm94eSwgV2ViQ29u
dGV4dCYgd2ViQ29udGV4dCkKK0N1c3RvbVByb3RvY29sTWFuYWdlclByb3h5OjpDdXN0b21Qcm90
b2NvbE1hbmFnZXJQcm94eShDaGlsZFByb2Nlc3NQcm94eSogY2hpbGRQcm9jZXNzUHJveHksIFdl
YlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKICAgICA6IG1fY2hpbGRQcm9jZXNzUHJveHkoY2hp
bGRQcm9jZXNzUHJveHkpCi0gICAgLCBtX3dlYkNvbnRleHQod2ViQ29udGV4dCkKKyAgICAsIG1f
cHJvY2Vzc1Bvb2wocHJvY2Vzc1Bvb2wpCiB7CiAgICAgQVNTRVJUKG1fY2hpbGRQcm9jZXNzUHJv
eHkpOwogICAgIG1fY2hpbGRQcm9jZXNzUHJveHktPmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgKnRo
aXMpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90
aWZpY2F0aW9uTWFuYWdlclByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTm90aWZpY2F0aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHkuY3BwCShy
ZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTm90aWZpY2F0aW9u
cy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
MCArMjksMTAgQEAKICNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSVNlY3VyaXR5
T3JpZ2luLmgiCiAjaW5jbHVkZSAiSW1tdXRhYmxlRGljdGlvbmFyeS5oIgotI2luY2x1ZGUgIldl
YkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJOb3RpZmljYXRpb24uaCIKICNpbmNsdWRlICJXZWJO
b3RpZmljYXRpb25NYW5hZ2VyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
KyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5o
IgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTUwLDEzICs1MCwxMyBAQCBjb25zdCBj
aGFyKiBXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk6CiAgICAgcmV0dXJuICJXZWJOb3RpZmlj
YXRpb25NYW5hZ2VyUHJveHkiOwogfQogCi1QYXNzUmVmUHRyPFdlYk5vdGlmaWNhdGlvbk1hbmFn
ZXJQcm94eT4gV2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5OjpjcmVhdGUoV2ViQ29udGV4dCog
Y29udGV4dCkKK1Bhc3NSZWZQdHI8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5PiBXZWJOb3Rp
ZmljYXRpb25NYW5hZ2VyUHJveHk6OmNyZWF0ZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHko
Y29udGV4dCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViTm90aWZpY2F0aW9uTWFuYWdl
clByb3h5KHByb2Nlc3NQb29sKSk7CiB9CiAKLVdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eTo6
V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5KFdlYkNvbnRleHQqIGNvbnRleHQpCi0gICAgOiBX
ZWJDb250ZXh0U3VwcGxlbWVudChjb250ZXh0KQorV2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5
OjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHkoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29s
KQorICAgIDogV2ViQ29udGV4dFN1cHBsZW1lbnQocHJvY2Vzc1Bvb2wpCiB7CiB9CiAKQEAgLTY4
LDcgKzY4LDcgQEAgdm9pZCBXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk6OmluaXRpYQogCiAv
LyBXZWJDb250ZXh0U3VwcGxlbWVudAogCi12b2lkIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94
eTo6Y29udGV4dERlc3Ryb3llZCgpCit2b2lkIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eTo6
cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKQogewogICAgIG1fcHJvdmlkZXIucmVtb3ZlTm90aWZpY2F0
aW9uTWFuYWdlcih0aGlzKTsKIH0KQEAgLTIzMiwxNSArMjMyLDE1IEBAIHZvaWQgV2ViTm90aWZp
Y2F0aW9uTWFuYWdlclByb3h5Ojpwcm92aWQKIAogdm9pZCBXZWJOb3RpZmljYXRpb25NYW5hZ2Vy
UHJveHk6OnByb3ZpZGVyRGlkVXBkYXRlTm90aWZpY2F0aW9uUG9saWN5KGNvbnN0IEFQSTo6U2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbiwgYm9vbCBhbGxvd2VkKQogewotICAgIGlmICghY29udGV4dCgp
KQorICAgIGlmICghcHJvY2Vzc1Bvb2woKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29udGV4
dCgpLT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6
OkRpZFVwZGF0ZU5vdGlmaWNhdGlvbkRlY2lzaW9uKG9yaWdpbi0+c2VjdXJpdHlPcmlnaW4oKS50
b1N0cmluZygpLCBhbGxvd2VkKSk7CisgICAgcHJvY2Vzc1Bvb2woKS0+c2VuZFRvQWxsUHJvY2Vz
c2VzKE1lc3NhZ2VzOjpXZWJOb3RpZmljYXRpb25NYW5hZ2VyOjpEaWRVcGRhdGVOb3RpZmljYXRp
b25EZWNpc2lvbihvcmlnaW4tPnNlY3VyaXR5T3JpZ2luKCkudG9TdHJpbmcoKSwgYWxsb3dlZCkp
OwogfQogCiB2b2lkIFdlYk5vdGlmaWNhdGlvbk1hbmFnZXJQcm94eTo6cHJvdmlkZXJEaWRSZW1v
dmVOb3RpZmljYXRpb25Qb2xpY2llcyhBUEk6OkFycmF5KiBvcmlnaW5zKQogewotICAgIGlmICgh
Y29udGV4dCgpKQorICAgIGlmICghcHJvY2Vzc1Bvb2woKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgc2l6ZV90IHNpemUgPSBvcmlnaW5zLT5zaXplKCk7CkBAIC0yNTMsNyArMjUzLDcgQEAgdm9p
ZCBXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk6OnByb3ZpZAogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBvcmlnaW5TdHJpbmdzLmFwcGVuZChvcmlnaW5z
LT5hdDxBUEk6OlNlY3VyaXR5T3JpZ2luPihpKS0+c2VjdXJpdHlPcmlnaW4oKS50b1N0cmluZygp
KTsKICAgICAKLSAgICBjb250ZXh0KCktPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2Vi
Tm90aWZpY2F0aW9uTWFuYWdlcjo6RGlkUmVtb3ZlTm90aWZpY2F0aW9uRGVjaXNpb25zKG9yaWdp
blN0cmluZ3MpKTsKKyAgICBwcm9jZXNzUG9vbCgpLT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2Fn
ZXM6OldlYk5vdGlmaWNhdGlvbk1hbmFnZXI6OkRpZFJlbW92ZU5vdGlmaWNhdGlvbkRlY2lzaW9u
cyhvcmlnaW5TdHJpbmdzKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNhdGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdl
clByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05vdGlmaWNh
dGlvbnMvV2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5LmgJKHJldmlzaW9uIDE3NzY5MCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1h
bmFnZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNSArNDIsMTUgQEAgY2xhc3MgU2Vj
dXJpdHlPcmlnaW47CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBXZWJDb250ZXh0Owog
Y2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiAKIGNsYXNzIFdlYk5v
dGlmaWNhdGlvbk1hbmFnZXJQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmpl
Y3Q6OlR5cGU6Ok5vdGlmaWNhdGlvbk1hbmFnZXI+LCBwdWJsaWMgV2ViQ29udGV4dFN1cHBsZW1l
bnQgewogcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHN1cHBsZW1lbnROYW1lKCk7
CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+IGNy
ZWF0ZShXZWJDb250ZXh0Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViTm90aWZpY2F0aW9u
TWFuYWdlclByb3h5PiBjcmVhdGUoV2ViUHJvY2Vzc1Bvb2wqKTsKIAogICAgIHZvaWQgaW5pdGlh
bGl6ZVByb3ZpZGVyKGNvbnN0IFdLTm90aWZpY2F0aW9uUHJvdmlkZXJCYXNlKik7CiAgICAgdm9p
ZCBwb3B1bGF0ZUNvcHlPZk5vdGlmaWNhdGlvblBlcm1pc3Npb25zKEhhc2hNYXA8U3RyaW5nLCBi
b29sPiYpOwpAQCAtNzEsMTMgKzcxLDEzIEBAIHB1YmxpYzoKICAgICB1c2luZyBBUEk6Ok9iamVj
dDo6ZGVyZWY7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgV2ViTm90aWZpY2F0aW9uTWFuYWdl
clByb3h5KFdlYkNvbnRleHQqKTsKKyAgICBleHBsaWNpdCBXZWJOb3RpZmljYXRpb25NYW5hZ2Vy
UHJveHkoV2ViUHJvY2Vzc1Bvb2wqKTsKIAogICAgIHR5cGVkZWYgYm9vbCAoKk5vdGlmaWNhdGlv
bkZpbHRlckZ1bmN0aW9uKSh1aW50NjRfdCBwYWdlSUQsIHVpbnQ2NF90IHBhZ2VOb3RpZmljYXRp
b25JRCwgdWludDY0X3QgZGVzaXJlZFBhZ2VJRCwgY29uc3QgVmVjdG9yPHVpbnQ2NF90PiYgZGVz
aXJlZFBhZ2VOb3RpZmljYXRpb25JRHMpOwogICAgIHZvaWQgY2xlYXJOb3RpZmljYXRpb25zKFdl
YlBhZ2VQcm94eSosIGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIHBhZ2VOb3RpZmljYXRpb25JRHMs
IE5vdGlmaWNhdGlvbkZpbHRlckZ1bmN0aW9uKTsKIAogICAgIC8vIFdlYkNvbnRleHRTdXBwbGVt
ZW50Ci0gICAgdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgcHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgcmVmV2ViQ29udGV4dFN1cHBsZW1lbnQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgZGVyZWZXZWJDb250ZXh0U3VwcGxlbWVudCgpIG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnSW5BdXRvU3RhcnRQcm92aWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z0luQXV0b1N0
YXJ0UHJvdmlkZXIuY3BwCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvUGx1Z2lucy9QbHVnSW5BdXRvU3RhcnRQcm92aWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDkgKzI4LDkgQEAKIAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiSW1t
dXRhYmxlRGljdGlvbmFyeS5oIgotI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJX
ZWJDb250ZXh0Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0zOSw4ICszOSw4IEBAIHN0YXRpYyBjb25zdCBk
b3VibGUgcGx1Z0luQXV0b1N0YXJ0RXhwaXIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBsdWdJ
bkF1dG9TdGFydFByb3ZpZGVyOjpQbHVnSW5BdXRvU3RhcnRQcm92aWRlcihXZWJDb250ZXh0KiBj
b250ZXh0KQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCitQbHVnSW5BdXRvU3RhcnRQcm92aWRl
cjo6UGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIoV2ViUHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sKQor
ICAgIDogbV9wcm9jZXNzUG9vbChwcm9jZXNzUG9vbCkKIHsKICAgICBtX2hhc2hUb09yaWdpbk1h
cC5hZGQoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIEhhc2hNYXA8dW5zaWduZWQsIFN0
cmluZz4oKSk7CiAgICAgbV9hdXRvU3RhcnRUYWJsZS5hZGQoU2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCksIEF1dG9TdGFydFRhYmxlKCkpOwpAQCAtNjcsMTAgKzY3LDEwIEBAIHZvaWQgUGx1
Z0luQXV0b1N0YXJ0UHJvdmlkZXI6OmFkZEF1dG9TdGEKICAgICBpdC0+dmFsdWUuc2V0KHBsdWdJ
bk9yaWdpbkhhc2gsIGV4cGlyYXRpb25UaW1lKTsKICAgICBzZXNzaW9uSXRlcmF0b3ItPnZhbHVl
LnNldChwbHVnSW5PcmlnaW5IYXNoLCBwYWdlT3JpZ2luKTsKIAotICAgIG1fY29udGV4dC0+c2Vu
ZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpEaWRBZGRQbHVnSW5BdXRvU3Rh
cnRPcmlnaW5IYXNoKHBsdWdJbk9yaWdpbkhhc2gsIGV4cGlyYXRpb25UaW1lLCBzZXNzaW9uSUQp
KTsKKyAgICBtX3Byb2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OkRpZEFkZFBsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2gocGx1Z0luT3JpZ2luSGFzaCwg
ZXhwaXJhdGlvblRpbWUsIHNlc3Npb25JRCkpOwogCiAgICAgaWYgKCFzZXNzaW9uSUQuaXNFcGhl
bWVyYWwoKSkKLSAgICAgICAgbV9jb250ZXh0LT5jbGllbnQoKS5wbHVnSW5BdXRvU3RhcnRPcmln
aW5IYXNoZXNDaGFuZ2VkKG1fY29udGV4dCk7CisgICAgICAgIG1fcHJvY2Vzc1Bvb2wtPmNsaWVu
dCgpLnBsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2hlc0NoYW5nZWQobV9wcm9jZXNzUG9vbCk7CiB9
CiAKIFNlc3Npb25QbHVnSW5BdXRvU3RhcnRPcmlnaW5NYXAgUGx1Z0luQXV0b1N0YXJ0UHJvdmlk
ZXI6OmF1dG9TdGFydE9yaWdpbkhhc2hlc0NvcHkoKSBjb25zdApAQCAtMTU0LDcgKzE1NCw3IEBA
IHZvaWQgUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXI6OnNldEF1dG9TdGEKICAgICAgICAgICAgIGFz
dC5zZXQoc3RyRGljdC5rZXksIGhhc2hlcyk7CiAgICAgfQogCi0gICAgbV9jb250ZXh0LT5zZW5k
VG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlc2V0UGx1Z0luQXV0b1N0YXJ0
T3JpZ2luRGVmYXVsdEhhc2hlcyhoYXNoTWFwKSk7CisgICAgbV9wcm9jZXNzUG9vbC0+c2VuZFRv
QWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZXNldFBsdWdJbkF1dG9TdGFydE9y
aWdpbkRlZmF1bHRIYXNoZXMoaGFzaE1hcCkpOwogfQogCiB2b2lkIFBsdWdJbkF1dG9TdGFydFBy
b3ZpZGVyOjpzZXRBdXRvU3RhcnRPcmlnaW5zQXJyYXkoQVBJOjpBcnJheSYgb3JpZ2luTGlzdCkK
QEAgLTE4NCw4ICsxODQsOCBAQCB2b2lkIFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyOjpkaWRSZWNl
aXZlCiAKICAgICBkb3VibGUgbmV3RXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZUZyb21O
b3coKTsKICAgICBtX2F1dG9TdGFydFRhYmxlLmFkZChzZXNzaW9uSUQsIEF1dG9TdGFydFRhYmxl
KCkpLml0ZXJhdG9yLT52YWx1ZS5hZGQoaXQtPnZhbHVlLCBQbHVnSW5BdXRvU3RhcnRPcmlnaW5N
YXAoKSkuaXRlcmF0b3ItPnZhbHVlLnNldChwbHVnSW5PcmlnaW5IYXNoLCBuZXdFeHBpcmF0aW9u
VGltZSk7Ci0gICAgbV9jb250ZXh0LT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OkRpZEFkZFBsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2gocGx1Z0luT3JpZ2luSGFzaCwg
bmV3RXhwaXJhdGlvblRpbWUsIHNlc3Npb25JRCkpOwotICAgIG1fY29udGV4dC0+Y2xpZW50KCku
cGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzQ2hhbmdlZChtX2NvbnRleHQpOworICAgIG1fcHJv
Y2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6RGlkQWRk
UGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaChwbHVnSW5PcmlnaW5IYXNoLCBuZXdFeHBpcmF0aW9u
VGltZSwgc2Vzc2lvbklEKSk7CisgICAgbV9wcm9jZXNzUG9vbC0+Y2xpZW50KCkucGx1Z0luQXV0
b1N0YXJ0T3JpZ2luSGFzaGVzQ2hhbmdlZChtX3Byb2Nlc3NQb29sKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVn
SW5BdXRvU3RhcnRQcm92aWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmgJKHJldmlzaW9uIDE3NzY5MCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdJbkF1dG9TdGFydFByb3Zp
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgUGx1Z0luQXV0
b1N0YXJ0UHJvdmlkZXJfaAogI2RlZmluZSBQbHVnSW5BdXRvU3RhcnRQcm92aWRlcl9oCiAKLSNp
bmNsdWRlIDxXZWJDb3JlL1Nlc3Npb25JREhhc2guaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Nlc3Np
b25JRC5oPgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBBcnJheTsK
IG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBJbW11dGFibGVEaWN0aW9uYXJ5OwotY2xhc3Mg
V2ViQ29udGV4dDsKK2NsYXNzIFdlYlByb2Nlc3NQb29sOwogCiB0eXBlZGVmIEhhc2hNYXA8dW5z
aWduZWQsIGRvdWJsZT4gUGx1Z0luQXV0b1N0YXJ0T3JpZ2luTWFwOwogdHlwZWRlZiBIYXNoTWFw
PFdlYkNvcmU6OlNlc3Npb25JRCwgUGx1Z0luQXV0b1N0YXJ0T3JpZ2luTWFwPiBTZXNzaW9uUGx1
Z0luQXV0b1N0YXJ0T3JpZ2luTWFwOwpAQCAtNTEsNyArNTEsNyBAQCB0eXBlZGVmIFZlY3RvcjxT
dHJpbmc+IFBsdWdJbkF1dG9TdGFydE9yCiBjbGFzcyBQbHVnSW5BdXRvU3RhcnRQcm92aWRlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIpOwogcHVi
bGljOgotICAgIGV4cGxpY2l0IFBsdWdJbkF1dG9TdGFydFByb3ZpZGVyKFdlYkNvbnRleHQqKTsK
KyAgICBleHBsaWNpdCBQbHVnSW5BdXRvU3RhcnRQcm92aWRlcihXZWJQcm9jZXNzUG9vbCopOwog
CiAgICAgdm9pZCBhZGRBdXRvU3RhcnRPcmlnaW5IYXNoKGNvbnN0IFN0cmluZyYgcGFnZU9yaWdp
biwgdW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCwgV2ViQ29yZTo6U2Vzc2lvbklEKTsKICAgICB2
b2lkIGRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24odW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCwg
V2ViQ29yZTo6U2Vzc2lvbklEKTsKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIGNvbnN0
IFBsdWdJbkF1dG9TdGFydE9yaWdpbnMmIGF1dG9TdGFydE9yaWdpbnMoKSBjb25zdCB7IHJldHVy
biBtX2F1dG9TdGFydE9yaWdpbnM7IH0KIAogcHJpdmF0ZToKLSAgICBXZWJDb250ZXh0KiBtX2Nv
bnRleHQ7CisgICAgV2ViUHJvY2Vzc1Bvb2wqIG1fcHJvY2Vzc1Bvb2w7CiAKICAgICB2b2lkIHNl
dEF1dG9TdGFydE9yaWdpbnNUYWJsZVdpdGhJdGVtc1Bhc3NpbmdUZXN0KEltbXV0YWJsZURpY3Rp
b25hcnkmLCBzdGQ6OmZ1bmN0aW9uPGJvb2woZG91YmxlIGV4cGlyYXRpb25UaW1lc3RhbXApPik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5Qcm9jZXNzTWFuYWdlci5jcHAJKHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQogCiAjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSAiV2ViQ29udGV4
dC5oIgogI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQ
cm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luUHJvY2Vzc1Byb3h5LmNwcAkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsOSArMzIsOSBAQAogI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaCIKICNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgogI2luY2x1ZGUgIlBs
dWdpblByb2Nlc3NNZXNzYWdlcy5oIgotI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRl
ICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQbHVnaW5TaXRlRGF0YU1h
bmFnZXIuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1ZGUgIldlYlByb2Nl
c3NQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvUnVuTG9vcC5oPgpAQCAtMTY2LDkgKzE2Niw5IEBAIHZvaWQgUGx1Z2luUHJvY2Vzc1By
b3h5OjpkaWRDbG9zZShJUEM6OkMKICAgICAgICAgZXhpdEZ1bGxzY3JlZW4oKTsKICNlbmRpZgog
Ci0gICAgY29uc3QgVmVjdG9yPFdlYkNvbnRleHQqPiYgY29udGV4dHMgPSBXZWJDb250ZXh0Ojph
bGxDb250ZXh0cygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udGV4dHMuc2l6ZSgp
OyArK2kpCi0gICAgICAgIGNvbnRleHRzW2ldLT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OlBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcjo6UGx1Z2luUHJvY2Vzc0NyYXNoZWQobV9w
bHVnaW5Qcm9jZXNzVG9rZW4pKTsKKyAgICBjb25zdCBWZWN0b3I8V2ViUHJvY2Vzc1Bvb2wqPiYg
cHJvY2Vzc1Bvb2xzID0gV2ViUHJvY2Vzc1Bvb2w6OmFsbFByb2Nlc3NQb29scygpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvY2Vzc1Bvb2xzLnNpemUoKTsgKytpKQorICAgICAgICBw
cm9jZXNzUG9vbHNbaV0tPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6UGx1Z2luUHJvY2Vz
c0Nvbm5lY3Rpb25NYW5hZ2VyOjpQbHVnaW5Qcm9jZXNzQ3Jhc2hlZChtX3BsdWdpblByb2Nlc3NU
b2tlbikpOwogCiAgICAgLy8gVGhpcyB3aWxsIGNhdXNlIHVzIHRvIGJlIGRlbGV0ZWQuCiAgICAg
cGx1Z2luUHJvY2Vzc0NyYXNoZWRPckZhaWxlZFRvTGF1bmNoKCk7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNpdGVE
YXRhTWFuYWdlci5jcHAJKHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNpdGVEYXRhTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDggKzMwLDggQEAKIAogI2luY2x1ZGUgIkFQSUFycmF5LmgiCiAjaW5jbHVkZSAiUGx1
Z2luUHJvY2Vzc01hbmFnZXIuaCIKLSNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAi
V2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIGV4
cGxpY2l0IEdldFNpdGVzV2l0aERhdGFTdGF0ZShXZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIqIHdl
YlBsdWdpblNpdGVEYXRhTWFuYWdlciwgdWludDY0X3QgY2FsbGJhY2tJRCkKICAgICAgICAgOiBt
X3dlYlBsdWdpblNpdGVEYXRhTWFuYWdlcih3ZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIpCiAgICAg
ICAgICwgbV9jYWxsYmFja0lEKGNhbGxiYWNrSUQpCi0gICAgICAgICwgbV9wbHVnaW5zKHdlYlBs
dWdpblNpdGVEYXRhTWFuYWdlci0+bV93ZWJDb250ZXh0LT5wbHVnaW5JbmZvU3RvcmUoKS5wbHVn
aW5zKCkpCisgICAgICAgICwgbV9wbHVnaW5zKHdlYlBsdWdpblNpdGVEYXRhTWFuYWdlci0+bV9w
cm9jZXNzUG9vbC0+cGx1Z2luSW5mb1N0b3JlKCkucGx1Z2lucygpKQogICAgIHsKICAgICB9CiAK
QEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgICAgICAsIG1fZmxhZ3MoZmxhZ3MpCiAgICAg
ICAgICwgbV9tYXhBZ2VJblNlY29uZHMobWF4QWdlSW5TZWNvbmRzKQogICAgICAgICAsIG1fY2Fs
bGJhY2tJRChjYWxsYmFja0lEKQotICAgICAgICAsIG1fcGx1Z2lucyh3ZWJQbHVnaW5TaXRlRGF0
YU1hbmFnZXItPm1fd2ViQ29udGV4dC0+cGx1Z2luSW5mb1N0b3JlKCkucGx1Z2lucygpKQorICAg
ICAgICAsIG1fcGx1Z2lucyh3ZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXItPm1fcHJvY2Vzc1Bvb2wt
PnBsdWdpbkluZm9TdG9yZSgpLnBsdWdpbnMoKSkKICAgICB7CiAgICAgfQogCkBAIC0xMTIsMTMg
KzExMiwxMyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxQbHVnaW5Nb2R1bGVJbmZvPiBtX3BsdWdp
bnM7CiB9OwogCi1QYXNzUmVmUHRyPFdlYlBsdWdpblNpdGVEYXRhTWFuYWdlcj4gV2ViUGx1Z2lu
U2l0ZURhdGFNYW5hZ2VyOjpjcmVhdGUoV2ViQ29udGV4dCogd2ViQ29udGV4dCkKK1Bhc3NSZWZQ
dHI8V2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyPiBXZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXI6OmNy
ZWF0ZShXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIod2ViQ29udGV4dCkpOworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgV2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyKHByb2Nlc3NQb29sKSk7CiB9CiAK
LVdlYlBsdWdpblNpdGVEYXRhTWFuYWdlcjo6V2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyKFdlYkNv
bnRleHQqIHdlYkNvbnRleHQpCi0gICAgOiBtX3dlYkNvbnRleHQod2ViQ29udGV4dCkKK1dlYlBs
dWdpblNpdGVEYXRhTWFuYWdlcjo6V2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyKFdlYlByb2Nlc3NQ
b29sKiBwcm9jZXNzUG9vbCkKKyAgICA6IG1fcHJvY2Vzc1Bvb2wocHJvY2Vzc1Bvb2wpCiB7CiB9
CiAKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIFdlYlBsdWdpblNpdGVEYXRhTWFuYWdlcjo6Z2V0
U2l0ZXNXCiB7CiAgICAgUmVmUHRyPEFycmF5Q2FsbGJhY2s+IGNhbGxiYWNrID0gQXJyYXlDYWxs
YmFjazo6Y3JlYXRlKFdURjo6bW92ZShjYWxsYmFja0Z1bmN0aW9uKSk7CiAKLSAgICBpZiAoIW1f
d2ViQ29udGV4dCkgeworICAgIGlmICghbV9wcm9jZXNzUG9vbCkgewogICAgICAgICBjYWxsYmFj
ay0+aW52YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTcxLDcgKzE3MSw3
IEBAIHZvaWQgV2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyOjpkaWRHZXRTaXQKIHZvaWQgV2ViUGx1
Z2luU2l0ZURhdGFNYW5hZ2VyOjpjbGVhclNpdGVEYXRhKEFQSTo6QXJyYXkqIHNpdGVzLCB1aW50
NjRfdCBmbGFncywgdWludDY0X3QgbWF4QWdlSW5TZWNvbmRzLCBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KENhbGxiYWNrQmFzZTo6RXJyb3IpPiBjYWxsYmFja0Z1bmN0aW9uKQogewogICAgIFJlZlB0cjxW
b2lkQ2FsbGJhY2s+IGNhbGxiYWNrID0gVm9pZENhbGxiYWNrOjpjcmVhdGUoV1RGOjptb3ZlKGNh
bGxiYWNrRnVuY3Rpb24pKTsKLSAgICBpZiAoIW1fd2ViQ29udGV4dCkgeworICAgIGlmICghbV9w
cm9jZXNzUG9vbCkgewogICAgICAgICAvLyBGSVhNRTogSWYgdGhlIGNvbnRleHQgaXMgaW52YWxp
ZCB3ZSBzaG91bGQgbm90IGNhbGwgdGhlIGNhbGxiYWNrLiBJdCdkIGJlIGJldHRlciB0byBqdXN0
IHJldHVybiBmYWxzZSBmcm9tIGNsZWFyU2l0ZURhdGEuCiAgICAgICAgIGNhbGxiYWNrLT5pbnZh
bGlkYXRlKENhbGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVyV2FzSW52YWxpZGF0ZWQpOwogICAgICAg
ICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVn
aW5TaXRlRGF0YU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuaAkocmV2aXNpb24gMTc3NjkwKQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luU2l0ZURhdGFNYW5h
Z2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE4ICszNywxOCBAQAogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAotY2xhc3MgV2ViQ29udGV4dDsKK2NsYXNzIFdlYlByb2Nlc3NQb29sOwogY2xhc3Mg
V2ViUHJvY2Vzc1Byb3h5OwogCiB0eXBlZGVmIEdlbmVyaWNDYWxsYmFjazxBUEk6OkFycmF5Kj4g
QXJyYXlDYWxsYmFjazsKIAogY2xhc3MgV2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyIDogcHVibGlj
IEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6UGx1Z2luU2l0ZURhdGFNYW5hZ2Vy
PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViUGx1Z2luU2l0ZURhdGFNYW5h
Z2VyPiBjcmVhdGUoV2ViQ29udGV4dCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlBsdWdp
blNpdGVEYXRhTWFuYWdlcj4gY3JlYXRlKFdlYlByb2Nlc3NQb29sKik7CiAgICAgdmlydHVhbCB+
V2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyKCk7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsKLSAg
ICB2b2lkIGNsZWFyQ29udGV4dCgpIHsgbV93ZWJDb250ZXh0ID0gMDsgfQorICAgIHZvaWQgY2xl
YXJQcm9jZXNzUG9vbCgpIHsgbV9wcm9jZXNzUG9vbCA9IG51bGxwdHI7IH0KIAogICAgIHZvaWQg
Z2V0U2l0ZXNXaXRoRGF0YShzdGQ6OmZ1bmN0aW9uPHZvaWQgKEFQSTo6QXJyYXkqLCBDYWxsYmFj
a0Jhc2U6OkVycm9yKT4pOwogICAgIHZvaWQgZGlkR2V0U2l0ZXNXaXRoRGF0YShjb25zdCBWZWN0
b3I8U3RyaW5nPiYgc2l0ZXMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwpAQCAtNjAsOSArNjAsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkaWRDbGVhclNpdGVEYXRhRm9yU2luZ2xlUGx1Z2luKHVpbnQ2
NF90IGNhbGxiYWNrSUQpOyAgICAKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBXZWJQbHVnaW5T
aXRlRGF0YU1hbmFnZXIoV2ViQ29udGV4dCopOworICAgIGV4cGxpY2l0IFdlYlBsdWdpblNpdGVE
YXRhTWFuYWdlcihXZWJQcm9jZXNzUG9vbCopOwogCi0gICAgV2ViQ29udGV4dCogbV93ZWJDb250
ZXh0OworICAgIFdlYlByb2Nlc3NQb29sKiBtX3Byb2Nlc3NQb29sOwogICAgIEhhc2hNYXA8dWlu
dDY0X3QsIFJlZlB0cjxBcnJheUNhbGxiYWNrPj4gbV9hcnJheUNhbGxiYWNrczsKICAgICBIYXNo
TWFwPHVpbnQ2NF90LCBSZWZQdHI8Vm9pZENhbGxiYWNrPj4gbV92b2lkQ2FsbGJhY2tzOwogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9y
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRh
L1dlYnNpdGVEYXRhU3RvcmUuY3BwCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJz
aXRlRGF0YVN0b3JlLmgiCiAKLSNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2Vi
UHJvY2Vzc1Bvb2wuaCIKICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKQEAgLTE0NSwxOSArMTQ1LDE5IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6cmVtb3Zl
RGF0YShXZWJzaXQKIAogICAgIGF1dG8gbmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlID0gY29tcHV0
ZU5ldHdvcmtQcm9jZXNzQWNjZXNzVHlwZShkYXRhVHlwZXMsIGlzTm9uUGVyc2lzdGVudCgpKTsK
ICAgICBpZiAobmV0d29ya1Byb2Nlc3NBY2Nlc3NUeXBlICE9IFByb2Nlc3NBY2Nlc3NUeXBlOjpO
b25lKSB7Ci0gICAgICAgIEhhc2hTZXQ8V2ViQ29udGV4dCo+IGNvbnRleHRzOworICAgICAgICBI
YXNoU2V0PFdlYlByb2Nlc3NQb29sKj4gcHJvY2Vzc1Bvb2xzOwogICAgICAgICBmb3IgKGF1dG8m
IHdlYlBhZ2UgOiBtX3dlYlBhZ2VzKQotICAgICAgICAgICAgY29udGV4dHMuYWRkKCZ3ZWJQYWdl
LT5wcm9jZXNzKCkuY29udGV4dCgpKTsKKyAgICAgICAgICAgIHByb2Nlc3NQb29scy5hZGQoJndl
YlBhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpKTsKIAotICAgICAgICBmb3IgKGF1dG8mIGNv
bnRleHQgOiBjb250ZXh0cykgeworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJv
Y2Vzc1Bvb2xzKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5ldHdvcmtQcm9jZXNzQWNjZXNzVHlw
ZSkgewogICAgICAgICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6T25seUlmTGF1bmNoZWQ6
Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5uZXR3b3JrUHJvY2VzcygpKQorICAgICAg
ICAgICAgICAgIGlmICghcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAg
ICBjYXNlIFByb2Nlc3NBY2Nlc3NUeXBlOjpMYXVuY2g6Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgICAgICAgICBwcm9jZXNzUG9vbC0+
ZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICAgICAgY2FzZSBQcm9jZXNzQWNjZXNzVHlwZTo6Tm9uZToKQEAgLTE2NSw3ICsxNjUsNyBAQCB2
b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZURhdGEoV2Vic2l0CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+YWRkUGVuZGluZ0NhbGxiYWNrKCk7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5uZXR3b3JrUHJvY2VzcygpLT5kZWxldGVXZWJzaXRlRGF0YSht
X3Nlc3Npb25JRCwgZGF0YVR5cGVzLCBtb2RpZmllZFNpbmNlLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
XSB7CisgICAgICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+ZGVsZXRlV2Vi
c2l0ZURhdGEobV9zZXNzaW9uSUQsIGRhdGFUeXBlcywgbW9kaWZpZWRTaW5jZSwgW2NhbGxiYWNr
QWdncmVnYXRvcl0gewogICAgICAgICAgICAgICAgIGNhbGxiYWNrQWdncmVnYXRvci0+cmVtb3Zl
UGVuZGluZ0NhbGxiYWNrKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCShy
ZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNyArMjM5LDcgQEAgdm9pZCBQYWdl
Q2xpZW50SW1wbDo6dG9vbFRpcENoYW5nZWQoY29ucwogCiBib29sIFBhZ2VDbGllbnRJbXBsOjpk
ZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYkZyYW1lUHJveHkm
IGZyYW1lLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIEdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3RQcm94eSYgcmVxdWVzdCkKIHsKLSAgICBbW3dyYXBwZXIobV93ZWJWaWV3LT5fcGFn
ZS0+cHJvY2VzcygpLmNvbnRleHQoKSkgX2dlb2xvY2F0aW9uUHJvdmlkZXJdIGRlY2lkZVBvbGlj
eUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21PcmlnaW46b3JpZ2luLnNlY3VyaXR5T3JpZ2luKCkg
ZnJhbWU6ZnJhbWUgcmVxdWVzdDpyZXF1ZXN0IHZpZXc6bV93ZWJWaWV3XTsKKyAgICBbW3dyYXBw
ZXIobV93ZWJWaWV3LT5fcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkpIF9nZW9sb2NhdGlv
blByb3ZpZGVyXSBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luOm9y
aWdpbi5zZWN1cml0eU9yaWdpbigpIGZyYW1lOmZyYW1lIHJlcXVlc3Q6cmVxdWVzdCB2aWV3Om1f
d2ViVmlld107CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5oCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcuaAkod29ya2luZyBjb3B5KQpA
QCAtNDEsOSArNDEsOSBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIERyYXdpbmdBcmVhUHJv
eHk7CiBjbGFzcyBHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UHJveHk7CiBjbGFzcyBSZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbjsKLWNsYXNzIFdlYkNvbnRleHQ7CiBjbGFzcyBXZWJGcmFt
ZVByb3h5OwogY2xhc3MgV2ViUGFnZVByb3h5OworY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiBzdHJ1
Y3QgV2ViUGFnZUNvbmZpZ3VyYXRpb247CiB9CiAKQEAgLTYxLDcgKzYxLDcgQEAgc3RydWN0IFdl
YlBhZ2VDb25maWd1cmF0aW9uOwogQHByb3BlcnR5IChub25hdG9taWMsIGdldHRlcj1pc1Nob3dp
bmdJbnNwZWN0b3JJbmRpY2F0aW9uKSBCT09MIHNob3dpbmdJbnNwZWN0b3JJbmRpY2F0aW9uOwog
QHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBCT09MIGlzQmFja2dyb3VuZDsKIAotLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZSBjb250ZXh0OihXZWJLaXQ6
OldlYkNvbnRleHQmKWNvbnRleHQgY29uZmlndXJhdGlvbjooV2ViS2l0OjpXZWJQYWdlQ29uZmln
dXJhdGlvbil3ZWJQYWdlQ29uZmlndXJhdGlvbiB3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3
OworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KENHUmVjdClmcmFtZSBwcm9jZXNzUG9v
bDooV2ViUHJvY2Vzc1Bvb2wmKXByb2Nlc3NQb29sIGNvbmZpZ3VyYXRpb246KFdlYktpdDo6V2Vi
UGFnZUNvbmZpZ3VyYXRpb24pd2ViUGFnZUNvbmZpZ3VyYXRpb24gd2ViVmlldzooV0tXZWJWaWV3
ICopd2ViVmlldzsKIAogLSAodm9pZClkaWRVcGRhdGVWaXNpYmxlUmVjdDooQ0dSZWN0KXZpc2li
bGVSZWN0IHVub2JzY3VyZWRSZWN0OihDR1JlY3QpdW5vYnNjdXJlZFJlY3QKICAgICB1bm9ic2N1
cmVkUmVjdEluU2Nyb2xsVmlld0Nvb3JkaW5hdGVzOihDR1JlY3QpdW5vYnNjdXJlZFJlY3RJblNj
cm9sbFZpZXdDb29yZGluYXRlcwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlldy5tbQkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMSAr
MzksMTEgQEAKICNpbXBvcnQgIldLUHJvY2Vzc0dyb3VwUHJpdmF0ZS5oIgogI2ltcG9ydCAiV0tX
ZWJWaWV3Q29uZmlndXJhdGlvbi5oIgogI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKLSNp
bXBvcnQgIldlYkNvbnRleHQuaCIKICNpbXBvcnQgIldlYkZyYW1lUHJveHkuaCIKICNpbXBvcnQg
IldlYktpdDJJbml0aWFsaXplLmgiCiAjaW1wb3J0ICJXZWJLaXRTeXN0ZW1JbnRlcmZhY2VJT1Mu
aCIKICNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Bvb2wuaCIK
ICNpbXBvcnQgIldlYlN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0Nv
cmVHcmFwaGljcy5oPgogI2ltcG9ydCA8VUlLaXQvVUlXaW5kb3dfUHJpdmF0ZS5oPgpAQCAtMTgy
LDcgKzE4Miw3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihDR1JlY3QpZnIKICAg
ICBSZXRhaW5QdHI8TlNVbmRvTWFuYWdlcj4gX3VuZG9NYW5hZ2VyOwogfQogCi0tIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lIGNvbnRleHQ6KFdlYktpdDo6V2ViQ29u
dGV4dCYpY29udGV4dCBjb25maWd1cmF0aW9uOihXZWJLaXQ6OldlYlBhZ2VDb25maWd1cmF0aW9u
KXdlYlBhZ2VDb25maWd1cmF0aW9uIHdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcKKy0gKGlu
c3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihDR1JlY3QpZnJhbWUgcHJvY2Vzc1Bvb2w6KFdlYktp
dDo6V2ViUHJvY2Vzc1Bvb2wmKXByb2Nlc3NQb29sIGNvbmZpZ3VyYXRpb246KFdlYktpdDo6V2Vi
UGFnZUNvbmZpZ3VyYXRpb24pd2ViUGFnZUNvbmZpZ3VyYXRpb24gd2ViVmlldzooV0tXZWJWaWV3
ICopd2ViVmlldwogewogICAgIGlmICghKHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhGcmFtZTpmcmFt
ZV0pKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtMTkxLDcgKzE5MSw3IEBAIC0gKGluc3RhbmNl
dHlwZSlpbml0V2l0aEZyYW1lOihDR1JlY3QpZnIKIAogICAgIF9wYWdlQ2xpZW50ID0gc3RkOjpt
YWtlX3VuaXF1ZTxQYWdlQ2xpZW50SW1wbD4oc2VsZiwgd2ViVmlldyk7CiAKLSAgICBfcGFnZSA9
IGNvbnRleHQuY3JlYXRlV2ViUGFnZSgqX3BhZ2VDbGllbnQsIFdURjo6bW92ZSh3ZWJQYWdlQ29u
ZmlndXJhdGlvbikpOworICAgIF9wYWdlID0gcHJvY2Vzc1Bvb2wuY3JlYXRlV2ViUGFnZSgqX3Bh
Z2VDbGllbnQsIFdURjo6bW92ZSh3ZWJQYWdlQ29uZmlndXJhdGlvbikpOwogICAgIF9wYWdlLT5p
bml0aWFsaXplV2ViUGFnZSgpOwogICAgIF9wYWdlLT5zZXRJbnRyaW5zaWNEZXZpY2VTY2FsZUZh
Y3RvcihXS0dldFNjYWxlRmFjdG9yRm9yU2NyZWVuKFtVSVNjcmVlbiBtYWluU2NyZWVuXSkpOwog
ICAgIF9wYWdlLT5zZXRVc2VGaXhlZExheW91dCh0cnVlKTsKQEAgLTIwMSw3ICsyMDEsNyBAQCAt
IChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooQ0dSZWN0KWZyCiAgICAgCiAgICAgX2lzQmFj
a2dyb3VuZCA9IFtVSUFwcGxpY2F0aW9uIHNoYXJlZEFwcGxpY2F0aW9uXS5hcHBsaWNhdGlvblN0
YXRlID09IFVJQXBwbGljYXRpb25TdGF0ZUJhY2tncm91bmQ7CiAKLSAgICBXZWJDb250ZXh0Ojpz
dGF0aXN0aWNzKCkud2tWaWV3Q291bnQrKzsKKyAgICBXZWJQcm9jZXNzUG9vbDo6c3RhdGlzdGlj
cygpLndrVmlld0NvdW50Kys7CiAKICAgICBfcm9vdENvbnRlbnRWaWV3ID0gYWRvcHROUyhbW1VJ
VmlldyBhbGxvY10gaW5pdF0pOwogICAgIFtfcm9vdENvbnRlbnRWaWV3IGxheWVyXS5tYXNrc1Rv
Qm91bmRzID0gTk87CkBAIC0yMzgsNyArMjM4LDcgQEAgLSAodm9pZClkZWFsbG9jCiAKICAgICBf
cGFnZS0+Y2xvc2UoKTsKIAotICAgIFdlYkNvbnRleHQ6OnN0YXRpc3RpY3MoKS53a1ZpZXdDb3Vu
dC0tOworICAgIFdlYlByb2Nlc3NQb29sOjpzdGF0aXN0aWNzKCkud2tWaWV3Q291bnQtLTsKIAog
ICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9XS0dlb2xvY2F0aW9uUHJvdmlkZXJJT1MuaAkocmV2aXNpb24gMTc3
NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0dlb2xvY2F0aW9uUHJvdmlk
ZXJJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsOCBAQAogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIGNsYXNzIEdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eTsKLWNsYXNzIFdl
YkNvbnRleHQ7CiBjbGFzcyBXZWJGcmFtZVByb3h5OworY2xhc3MgV2ViUHJvY2Vzc1Bvb2w7CiB9
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgU2VjdXJpdHlP
cmlnaW47CiBAY2xhc3MgV0tXZWJWaWV3OwogCiBAaW50ZXJmYWNlIFdLR2VvbG9jYXRpb25Qcm92
aWRlcklPUyA6IE5TT2JqZWN0Ci0tKGlkKWluaXRXaXRoQ29udGV4dDooV2ViS2l0OjpXZWJDb250
ZXh0Kiljb250ZXh0OworLShpZClpbml0V2l0aFByb2Nlc3NQb29sOihXZWJLaXQ6OldlYlByb2Nl
c3NQb29sJilwcm9jZXNzUG9vbDsKIC0odm9pZClkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJl
cXVlc3RGcm9tT3JpZ2luOihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYpb3JpZ2luIGZyYW1lOihX
ZWJLaXQ6OldlYkZyYW1lUHJveHkmKWZyYW1lIHJlcXVlc3Q6KFdlYktpdDo6R2VvbG9jYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdFByb3h5JilwZXJtaXNzaW9uUmVxdWVzdCB2aWV3OihXS1dlYlZpZXcq
KXZpZXc7CiBAZW5kCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tHZW9s
b2NhdGlvblByb3ZpZGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9pb3MvV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tCShyZXZpc2lvbiAxNzc2OTApCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLR2VvbG9jYXRpb25Qcm92aWRlcklPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMzIsMTYgKzMyLDE2IEBACiAjaW1wb3J0ICJHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0UHJveHkuaCIKICNpbXBvcnQgIldLVUlEZWxlZ2F0ZVByaXZhdGUu
aCIKICNpbXBvcnQgIldLV2ViVmlldy5oIgotI2ltcG9ydCAiV2ViQ29udGV4dC5oIgogI2ltcG9y
dCAiV2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHkuaCIKLSNpbXBvcnQgPFdlYkdlb2xvY2F0aW9u
UG9zaXRpb24uaD4KKyNpbXBvcnQgIldlYlByb2Nlc3NQb29sLmgiCiAjaW1wb3J0IDxXZWJDb3Jl
L0dlb2xvY2F0aW9uUG9zaXRpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvVVJMLmg+CisjaW1wb3J0
IDxXZWJHZW9sb2NhdGlvblBvc2l0aW9uLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2ltcG9ydCA8d3RmL0hhc2hTZXQuaD4KICNpbXBvcnQgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW1w
b3J0IDx3dGYvUmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3
dGYvSGFzaFNldC5oPgogCiAvLyBGSVhNRTogUmVtb3ZlIHVzZSBvZiBXZWJLaXQxIGZyb20gV2Vi
S2l0MgogI2ltcG9ydCA8V2ViS2l0L1dlYkdlb2xvY2F0aW9uQ29yZUxvY2F0aW9uUHJvdmlkZXIu
aD4KQEAgLTEzNSwxMiArMTM1LDEyIEBAIC0oaWQpaW5pdAogICAgIHJldHVybiBuaWw7CiB9CiAK
LS0oaWQpaW5pdFdpdGhDb250ZXh0OihXZWJDb250ZXh0Kiljb250ZXh0CistKGlkKWluaXRXaXRo
UHJvY2Vzc1Bvb2w6KFdlYlByb2Nlc3NQb29sJilwcm9jZXNzUG9vbAogewogICAgIHNlbGYgPSBb
c3VwZXIgaW5pdF07CiAgICAgaWYgKCFzZWxmKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIF9n
ZW9sb2NhdGlvbk1hbmFnZXIgPSBjb250ZXh0LT5zdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFu
YWdlclByb3h5PigpOworICAgIF9nZW9sb2NhdGlvbk1hbmFnZXIgPSBwcm9jZXNzUG9vbC5zdXBw
bGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5PigpOwogICAgIFdLR2VvbG9jYXRpb25Q
cm92aWRlciBwcm92aWRlckNhbGxiYWNrID0gewogICAgICAgICBrV0tHZW9sb2NhdGlvblByb3Zp
ZGVyQ3VycmVudFZlcnNpb24sCiAgICAgICAgIHNlbGYsCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvaW9zL1dlYlByb2Nlc3NQcm94eUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlByb2Nlc3NQcm94eUlPUy5tbQkocmV2aXNpb24gMTc3
NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJQcm9jZXNzUHJveHlJT1Mu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2ltcG9ydCA8V2ViQ29yZS9O
b3RJbXBsZW1lbnRlZC5oPgogCi0jaW1wb3J0ICJXZWJDb250ZXh0LmgiCiAjaW1wb3J0ICJXZWJQ
cm9jZXNzTWVzc2FnZXMuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1NlcnZpY2VzQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2VydmljZXNDb250cm9sbGVyLmgJKHJldmlzaW9u
IDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2VydmljZXNDb250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDYgQEAKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLWNsYXNzIFdlYkNvbnRleHQ7Ci0KIGNsYXNzIFNlcnZpY2VzQ29udHJvbGxlciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2VydmljZXNDb250cm9sbGVyKTsKICAgICBmcmllbmQg
Y2xhc3MgTmV2ZXJEZXN0cm95ZWQ8U2VydmljZXNDb250cm9sbGVyPjsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2VydmljZXNDb250cm9sbGVyLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2VydmljZXNDb250cm9sbGVyLm1tCShyZXZp
c2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1NlcnZpY2VzQ29u
dHJvbGxlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogCiAjaWYgRU5BQkxF
KFNFUlZJQ0VfQ09OVFJPTFMpCiAKLSNpbXBvcnQgIldlYkNvbnRleHQuaCIKICNpbXBvcnQgIldl
YlByb2Nlc3NNZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbXBvcnQg
PFdlYkNvcmUvTlNFeHRlbnNpb25TUEkuaD4KICNpbXBvcnQgPFdlYkNvcmUvTlNTaGFyaW5nU2Vy
dmljZVBpY2tlclNQSS5oPgogI2ltcG9ydCA8V2ViQ29yZS9OU1NoYXJpbmdTZXJ2aWNlU1BJLmg+
CkBAIC0xMDUsOCArMTA1LDggQEAgdm9pZCBTZXJ2aWNlc0NvbnRyb2xsZXI6OnJlZnJlc2hFeGlz
dGluZwogICAgICAgICAgICAgbV9oYXNSaWNoQ29udGVudFNlcnZpY2VzID0gaGFzUmljaENvbnRl
bnRTZXJ2aWNlczsKIAogICAgICAgICAgICAgaWYgKGF2YWlsYWJsZVNlcnZpY2VzQ2hhbmdlZCkg
ewotICAgICAgICAgICAgICAgIGZvciAoYXV0byYgY29udGV4dCA6IFdlYkNvbnRleHQ6OmFsbENv
bnRleHRzKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0RW5hYmxlZFNlcnZpY2VzKG1faGFzSW1hZ2VTZXJ2
aWNlcywgbV9oYXNTZWxlY3Rpb25TZXJ2aWNlcywgbV9oYXNSaWNoQ29udGVudFNlcnZpY2VzKSk7
CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29s
OjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNl
bmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0RW5hYmxlZFNlcnZpY2Vz
KG1faGFzSW1hZ2VTZXJ2aWNlcywgbV9oYXNTZWxlY3Rpb25TZXJ2aWNlcywgbV9oYXNSaWNoQ29u
dGVudFNlcnZpY2VzKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1faGFzUGVuZGlu
Z1JlZnJlc2ggPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tB
Y3Rpb25NZW51Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1dLQWN0aW9uTWVudUNvbnRyb2xsZXIubW0JKHJldmlzaW9uIDE3NzY5MCkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tBY3Rpb25NZW51Q29udHJvbGxlci5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDExIEBACiAKICNpbXBvcnQgIldLTlNVUkxFeHRy
YXMuaCIKICNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJDb250ZXh0Lmgi
CiAjaW1wb3J0ICJXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgIldlYlBhZ2VNZXNz
YWdlcy5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHlN
ZXNzYWdlcy5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbXBvcnQgIldlYlByb2Nl
c3NQcm94eS5oIgogI2ltcG9ydCA8Rm91bmRhdGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxJ
bWFnZUlPL0ltYWdlSU8uaD4KQEAgLTI0MCw3ICsyNDAsNyBAQCAtICh2b2lkKV9jb3B5VmlkZW9V
Ukw6KGlkKXNlbmRlcgogLSAodm9pZClfc2F2ZVZpZGVvVG9Eb3dubG9hZHM6KGlkKXNlbmRlcgog
ewogICAgIFJlZlB0cjxXZWJIaXRUZXN0UmVzdWx0PiBoaXRUZXN0UmVzdWx0ID0gW3NlbGYgX3dl
YkhpdFRlc3RSZXN1bHRdOwotICAgIF9wYWdlLT5wcm9jZXNzKCkuY29udGV4dCgpLmRvd25sb2Fk
KF9wYWdlLCBoaXRUZXN0UmVzdWx0LT5hYnNvbHV0ZU1lZGlhVVJMKCkpOworICAgIF9wYWdlLT5w
cm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5kb3dubG9hZChfcGFnZSwgaGl0VGVzdFJlc3VsdC0+YWJz
b2x1dGVNZWRpYVVSTCgpKTsKIH0KIAogI3ByYWdtYSBtYXJrIEltYWdlIGFjdGlvbnMKQEAgLTI4
OCw3ICsyODgsNyBAQCAtICh2b2lkKV9jb3B5SW1hZ2U6KGlkKXNlbmRlcgogLSAodm9pZClfc2F2
ZUltYWdlVG9Eb3dubG9hZHM6KGlkKXNlbmRlcgogewogICAgIFJlZlB0cjxXZWJIaXRUZXN0UmVz
dWx0PiBoaXRUZXN0UmVzdWx0ID0gW3NlbGYgX3dlYkhpdFRlc3RSZXN1bHRdOwotICAgIF9wYWdl
LT5wcm9jZXNzKCkuY29udGV4dCgpLmRvd25sb2FkKF9wYWdlLCBoaXRUZXN0UmVzdWx0LT5hYnNv
bHV0ZUltYWdlVVJMKCkpOworICAgIF9wYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5kb3du
bG9hZChfcGFnZSwgaGl0VGVzdFJlc3VsdC0+YWJzb2x1dGVJbWFnZVVSTCgpKTsKIH0KIAogLy8g
RklYTUU6IFdlIHNob3VsZCB0cnkgdG8gc2hhcmUgdGhpcyB3aXRoIFdlYlBhZ2VQcm94eU1hYydz
IHNpbWlsYXIgUERGIGZ1bmN0aW9ucy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV0tGdWxsS2V5Ym9hcmRBY2Nlc3NXYXRjaGVyLm1tCShyZXZp
c2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dLRnVsbEtleWJv
YXJkQWNjZXNzV2F0Y2hlci5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAj
aWYgUExBVEZPUk0oTUFDKQogCi0jaW1wb3J0ICJXZWJDb250ZXh0LmgiCisjaW1wb3J0ICJXZWJQ
cm9jZXNzUG9vbC5oIgogCiBOU1N0cmluZyAqIGNvbnN0IEtleWJvYXJkVUlNb2RlRGlkQ2hhbmdl
Tm90aWZpY2F0aW9uID0gQCJjb20uYXBwbGUuS2V5Ym9hcmRVSU1vZGVEaWRDaGFuZ2UiOwogY29u
c3QgQ0ZTdHJpbmdSZWYgQXBwbGVLZXlib2FyZFVJTW9kZSA9IENGU1RSKCJBcHBsZUtleWJvYXJk
VUlNb2RlIik7CkBAIC0zNywxMSArMzcsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAog
QGltcGxlbWVudGF0aW9uIFdLRnVsbEtleWJvYXJkQWNjZXNzV2F0Y2hlcgogCi0tICh2b2lkKW5v
dGlmeUFsbFdlYkNvbnRleHRzCistICh2b2lkKW5vdGlmeUFsbFByb2Nlc3NQb29scwogewotICAg
IGNvbnN0IFZlY3RvcjxXZWJDb250ZXh0Kj4mIGNvbnRleHRzID0gV2ViQ29udGV4dDo6YWxsQ29u
dGV4dHMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbnRleHRzLnNpemUoKTsgKytp
KQotICAgICAgICBjb250ZXh0c1tpXS0+ZnVsbEtleWJvYXJkQWNjZXNzTW9kZUNoYW5nZWQoZnVs
bEtleWJvYXJkQWNjZXNzRW5hYmxlZCk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdl
YlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPmZ1
bGxLZXlib2FyZEFjY2Vzc01vZGVDaGFuZ2VkKGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQpOwog
fQogCiAtICh2b2lkKXJldHJpZXZlS2V5Ym9hcmRVSU1vZGVGcm9tUHJlZmVyZW5jZXM6KE5TTm90
aWZpY2F0aW9uICopbm90aWZpY2F0aW9uCkBAIC02MCw3ICs1OSw3IEBAIC0gKHZvaWQpcmV0cmll
dmVLZXlib2FyZFVJTW9kZUZyb21QcmVmZXIKICAgICB9CiAKICAgICBpZiAoZnVsbEtleWJvYXJk
QWNjZXNzRW5hYmxlZCAhPSBvbGRWYWx1ZSkKLSAgICAgICAgW3NlbGYgbm90aWZ5QWxsV2ViQ29u
dGV4dHNdOworICAgICAgICBbc2VsZiBub3RpZnlBbGxQcm9jZXNzUG9vbHNdOwogfQogCiAtIChp
ZClpbml0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0
TWFjLm1tCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L1dlYkNvbnRleHRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsNjIzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIldlYkNvbnRleHQuaCIKLQotI2lt
cG9ydCAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKLSNpbXBvcnQgIlNhbmRib3hVdGlsaXRpZXMu
aCIKLSNpbXBvcnQgIlRleHRDaGVja2VyLmgiCi0jaW1wb3J0ICJXS0Jyb3dzaW5nQ29udGV4dENv
bnRyb2xsZXJJbnRlcm5hbC5oIgotI2ltcG9ydCAiV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVy
SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYktpdFN5c3RlbUludGVyZmFjZS5oIgotI2ltcG9ydCAi
V2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLmgiCi0jaW1wb3J0ICJXZWJQYWdlR3JvdXAuaCIK
LSNpbXBvcnQgIldlYlByZWZlcmVuY2VzS2V5cy5oIgotI2ltcG9ydCAiV2ViUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5oIgotI2ltcG9ydCAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCi0jaW1wb3J0
ICJXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLmgiCi0jaW1wb3J0IDxXZWJDb3JlL0NGTmV0d29ya1NQ
SS5oPgotI2ltcG9ydCA8V2ViQ29yZS9Db2xvci5oPgotI2ltcG9ydCA8V2ViQ29yZS9GaWxlU3lz
dGVtLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL1BsYXRmb3JtUGFzdGVib2FyZC5oPgotI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIu
aD4KLSNpbXBvcnQgPHN5cy9wYXJhbS5oPgotCi0jaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykK
LSNpbXBvcnQgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCi0jaW1wb3J0ICJO
ZXR3b3JrUHJvY2Vzc1Byb3h5LmgiCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKElPUykKLSNpbXBv
cnQgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzSU9TLmg+Ci0jZWxzZQotI2ltcG9y
dCA8UXVhcnR6Q29yZS9DQVJlbW90ZUxheWVyU2VydmVyLmg+Ci0jZW5kaWYKLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLU5TU3RyaW5nICpXZWJEYXRhYmFzZURpcmVjdG9yeURlZmF1bHRz
S2V5ID0gQCJXZWJEYXRhYmFzZURpcmVjdG9yeSI7Ci1OU1N0cmluZyAqV2ViS2l0TG9jYWxDYWNo
ZURlZmF1bHRzS2V5ID0gQCJXZWJLaXRMb2NhbENhY2hlIjsKLU5TU3RyaW5nICpXZWJTdG9yYWdl
RGlyZWN0b3J5RGVmYXVsdHNLZXkgPSBAIldlYktpdExvY2FsU3RvcmFnZURhdGFiYXNlUGF0aFBy
ZWZlcmVuY2VLZXkiOwotTlNTdHJpbmcgKldlYktpdEtlcm5pbmdBbmRMaWdhdHVyZXNFbmFibGVk
QnlEZWZhdWx0RGVmYXVsdHNLZXkgPSBAIldlYktpdEtlcm5pbmdBbmRMaWdhdHVyZXNFbmFibGVk
QnlEZWZhdWx0IjsKLU5TU3RyaW5nICpXZWJLaXRKU0NKSVRFbmFibGVkRGVmYXVsdHNLZXkgPSBA
IldlYktpdEpTQ0pJVEVuYWJsZWREZWZhdWx0c0tleSI7Ci1OU1N0cmluZyAqV2ViS2l0SlNDRlRM
SklURW5hYmxlZERlZmF1bHRzS2V5ID0gQCJXZWJLaXRKU0NGVExKSVRFbmFibGVkRGVmYXVsdHNL
ZXkiOwotTlNTdHJpbmcgKldlYktpdE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnlEZWZhdWx0c0tl
eSA9IEAiV2ViS2l0TWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSI7Ci0KLSNpZiAhUExBVEZPUk0o
SU9TKQotc3RhdGljIE5TU3RyaW5nICpXZWJLaXRBcHBsaWNhdGlvbkRpZENoYW5nZUFjY2Vzc2li
aWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VOb3RpZmljYXRpb24gPSBAIk5TQXBwbGljYXRpb25E
aWRDaGFuZ2VBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNlTm90aWZpY2F0aW9uIjsK
LSNlbmRpZgotCi0vLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzkxMzg4MTc+IC0gQWZ0ZXIgdGhp
cyAiYmFja3dhcmRzIGNvbXBhdGliaWxpdHkiIHJhZGFyIGlzIHJlbW92ZWQsIHRoaXMgY29kZSBz
aG91bGQgYmUgcmVtb3ZlZCB0byBvbmx5IHJldHVybiBhbiBlbXB0eSBTdHJpbmcuCi1OU1N0cmlu
ZyAqV2ViSWNvbkRhdGFiYXNlRGlyZWN0b3J5RGVmYXVsdHNLZXkgPSBAIldlYkljb25EYXRhYmFz
ZURpcmVjdG9yeURlZmF1bHRzS2V5IjsKLQotI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCi1z
dGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJLaXQySFRUUFByb3h5RGVmYXVsdHNLZXkgPSBAIldl
YktpdDJIVFRQUHJveHkiOwotc3RhdGljIE5TU3RyaW5nICogY29uc3QgV2ViS2l0MkhUVFBTUHJv
eHlEZWZhdWx0c0tleSA9IEAiV2ViS2l0MkhUVFBTUHJveHkiOwotI2VuZGlmCi0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1OU1N0cmluZyAqU2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2xSZWdpc3RlcmVk
Tm90aWZpY2F0aW9uTmFtZSA9IEAiV2ViS2l0U2NoZW1lRm9yQ3VzdG9tUHJvdG9jb2xSZWdpc3Rl
cmVkTm90aWZpY2F0aW9uIjsKLU5TU3RyaW5nICpTY2hlbWVGb3JDdXN0b21Qcm90b2NvbFVucmVn
aXN0ZXJlZE5vdGlmaWNhdGlvbk5hbWUgPSBAIldlYktpdFNjaGVtZUZvckN1c3RvbVByb3RvY29s
VW5yZWdpc3RlcmVkTm90aWZpY2F0aW9uIjsKLQotc3RhdGljIHZvaWQgcmVnaXN0ZXJVc2VyRGVm
YXVsdHNJZk5lZWRlZCgpCi17Ci0gICAgc3RhdGljIGJvb2wgZGlkUmVnaXN0ZXI7Ci0gICAgaWYg
KGRpZFJlZ2lzdGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkaWRSZWdpc3RlciA9IHRydWU7
Ci0gICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqcmVnaXN0cmF0aW9uRGljdGlvbmFyeSA9IFtOU011
dGFibGVEaWN0aW9uYXJ5IGRpY3Rpb25hcnldOwotICAgIAotICAgIFtyZWdpc3RyYXRpb25EaWN0
aW9uYXJ5IHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSBmb3JLZXk6V2Vi
S2l0SlNDSklURW5hYmxlZERlZmF1bHRzS2V5XTsKLSAgICBbcmVnaXN0cmF0aW9uRGljdGlvbmFy
eSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5OldlYktpdEpT
Q0ZUTEpJVEVuYWJsZWREZWZhdWx0c0tleV07Ci0gICAgCi0jaWYgUExBVEZPUk0oSU9TKSB8fCBf
X01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKLSAgICBbcmVnaXN0cmF0aW9u
RGljdGlvbmFyeSBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10gZm9yS2V5
OldlYktpdEtlcm5pbmdBbmRMaWdhdHVyZXNFbmFibGVkQnlEZWZhdWx0RGVmYXVsdHNLZXldOwot
I2VuZGlmCi0KLSAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSByZWdp
c3RlckRlZmF1bHRzOnJlZ2lzdHJhdGlvbkRpY3Rpb25hcnldOwotfQotCi12b2lkIFdlYkNvbnRl
eHQ6OnVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCkKLXsKLSNpZiBFTkFCTEUoTkVUV09S
S19QUk9DRVNTKQotICAgIGlmIChtX3VzZXNOZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9j
ZXNzKQotICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFi
bGVkKHByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKSk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShO
RVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlmICghbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxl
ZEZvclBhZ2VDb3VudGVyLnZhbHVlKCkpCi0gICAgICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXJQ
cm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2VuID0gbnVsbHB0cjsKLSAgICBlbHNlIGlmICgh
bV9wbHVnaW5Qcm9jZXNzTWFuYWdlclByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4pCi0g
ICAgICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXJQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRv
a2VuID0gUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNoYXJlZCgpLnByb2Nlc3NTdXBwcmVzc2lvbkRp
c2FibGVkVG9rZW4oKTsKLSNlbmRpZgotfQotCi1OU011dGFibGVEaWN0aW9uYXJ5ICpXZWJDb250
ZXh0OjplbnN1cmVCdW5kbGVQYXJhbWV0ZXJzKCkKLXsKLSAgICBpZiAoIW1fYnVuZGxlUGFyYW1l
dGVycykKLSAgICAgICAgbV9idW5kbGVQYXJhbWV0ZXJzID0gYWRvcHROUyhbW05TTXV0YWJsZURp
Y3Rpb25hcnkgYWxsb2NdIGluaXRdKTsKLQotICAgIHJldHVybiBtX2J1bmRsZVBhcmFtZXRlcnMu
Z2V0KCk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6cGxhdGZvcm1Jbml0aWFsaXplKCkKLXsKLSAg
ICByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7Ci0gICAgcmVnaXN0ZXJOb3RpZmljYXRp
b25PYnNlcnZlcnMoKTsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBXZWJLaXQ6OldlYk1lbW9y
eVByZXNzdXJlSGFuZGxlcjo6c2hhcmVkKCk7Ci0jZW5kaWYKLX0KLQotU3RyaW5nIFdlYkNvbnRl
eHQ6OnBsYXRmb3JtRGVmYXVsdEFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoKSBjb25zdAotewot
ICAgIE5TU3RyaW5nICphcHBOYW1lID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVu
dGlmaWVyXTsKLSAgICBpZiAoIWFwcE5hbWUpCi0gICAgICAgIGFwcE5hbWUgPSBbW05TUHJvY2Vz
c0luZm8gcHJvY2Vzc0luZm9dIHByb2Nlc3NOYW1lXTsKLSNpZiBQTEFURk9STShJT1MpCi0gICAg
Ly8gVGhpcyBxdWlyayB1c2VkIHRvIG1ha2UgdGhlc2UgYXBwcyBzaGFyZSBhcHBsaWNhdGlvbiBj
YWNoZSBzdG9yYWdlLCBidXQgZG9lc24ndCBhY2NvbXBsaXNoIHRoYXQgYW55IG1vcmUuCi0gICAg
Ly8gUHJlc2VydmluZyBpdCBhdm9pZHMgdGhlIG5lZWQgdG8gbWlncmF0ZSBkYXRhIHdoZW4gdXBn
cmFkaW5nLgotICAgIGlmIChhcHBsaWNhdGlvbklzTW9iaWxlU2FmYXJpKCkgfHwgYXBwbGljYXRp
b25Jc1dlYkFwcCgpKQotICAgICAgICBhcHBOYW1lID0gQCJjb20uYXBwbGUuV2ViQXBwQ2FjaGUi
OwotI2VuZGlmCi0KLSAgICBBU1NFUlQoYXBwTmFtZSk7Ci0KLSNpZiBQTEFURk9STShJT1MpCi0g
ICAgTlNTdHJpbmcgKmNhY2hlRGlyID0gW05TSG9tZURpcmVjdG9yeSgpIHN0cmluZ0J5QXBwZW5k
aW5nUGF0aENvbXBvbmVudDpAIkxpYnJhcnkvQ2FjaGVzIl07Ci0jZWxzZQotICAgIGNoYXIgY2Fj
aGVEaXJlY3RvcnlbTUFYUEFUSExFTl07Ci0gICAgc2l6ZV90IGNhY2hlRGlyZWN0b3J5TGVuID0g
Y29uZnN0cihfQ1NfREFSV0lOX1VTRVJfQ0FDSEVfRElSLCBjYWNoZURpcmVjdG9yeSwgTUFYUEFU
SExFTik7Ci0gICAgaWYgKCFjYWNoZURpcmVjdG9yeUxlbikKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotCi0gICAgTlNTdHJpbmcgKmNhY2hlRGlyID0gW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRN
YW5hZ2VyXSBzdHJpbmdXaXRoRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uOmNhY2hlRGlyZWN0b3J5
IGxlbmd0aDpjYWNoZURpcmVjdG9yeUxlbiAtIDFdOwotI2VuZGlmCi0gICAgTlNTdHJpbmcqIGNh
Y2hlUGF0aCA9IFtjYWNoZURpciBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6YXBwTmFt
ZV07Ci0gICAgcmV0dXJuIHN0cmluZ0J5UmVzb2x2aW5nU3ltbGlua3NJblBhdGgoW2NhY2hlUGF0
aCBzdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRoXSk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6cGxh
dGZvcm1Jbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBw
YXJhbWV0ZXJzKQotewotICAgIHBhcmFtZXRlcnMucHJlc2VudGVyQXBwbGljYXRpb25QaWQgPSBn
ZXRwaWQoKTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBwYXJhbWV0ZXJzLmFjY2Vzc2liaWxp
dHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkID0gW1tOU0FwcCBhY2Nlc3NpYmlsaXR5QXR0
cmlidXRlVmFsdWU6QCJBWEVuaGFuY2VkVXNlckludGVyZmFjZSJdIGJvb2xWYWx1ZV07Ci0jZWxz
ZQotICAgIHBhcmFtZXRlcnMuYWNjZXNzaWJpbGl0eUVuaGFuY2VkVXNlckludGVyZmFjZUVuYWJs
ZWQgPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgTlNVUkxDYWNoZSAqdXJsQ2FjaGUgPSBbTlNVUkxD
YWNoZSBzaGFyZWRVUkxDYWNoZV07Ci0gICAgcGFyYW1ldGVycy5uc1VSTENhY2hlTWVtb3J5Q2Fw
YWNpdHkgPSBbdXJsQ2FjaGUgbWVtb3J5Q2FwYWNpdHldOwotICAgIHBhcmFtZXRlcnMubnNVUkxD
YWNoZURpc2tDYXBhY2l0eSA9IFt1cmxDYWNoZSBkaXNrQ2FwYWNpdHldOwotCi0jaWYgIVBMQVRG
T1JNKElPUykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi0gICAg
cGFyYW1ldGVycy5zaG91bGRGb3JjZVNjcmVlbkZvbnRTdWJzdGl0dXRpb24gPSBbW05TVXNlckRl
ZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiTlNGb250RGVmYXVsdFNj
cmVlbkZvbnRTdWJzdGl0dXRpb25FbmFibGVkIl07Ci0jZW5kaWYKLSAgICBwYXJhbWV0ZXJzLnNo
b3VsZEVuYWJsZUtlcm5pbmdBbmRMaWdhdHVyZXNCeURlZmF1bHQgPSBbW05TVXNlckRlZmF1bHRz
IHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OldlYktpdEtlcm5pbmdBbmRMaWdhdHVy
ZXNFbmFibGVkQnlEZWZhdWx0RGVmYXVsdHNLZXldOwotICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5h
YmxlSklUID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktl
eTpXZWJLaXRKU0NKSVRFbmFibGVkRGVmYXVsdHNLZXldOwotICAgIHBhcmFtZXRlcnMuc2hvdWxk
RW5hYmxlRlRMSklUID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9v
bEZvcktleTpXZWJLaXRKU0NGVExKSVRFbmFibGVkRGVmYXVsdHNLZXldOwotICAgIHBhcmFtZXRl
cnMuc2hvdWxkRW5hYmxlTWVtb3J5UHJlc3N1cmVSZWxpZWZMb2dnaW5nID0gW1tOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkxvZ01lbW9yeUpldHNhbURl
dGFpbHMiXTsKLSAgICAKLSNpZiBIQVZFKEhPU1RFRF9DT1JFX0FOSU1BVElPTikKLSNpZiAhUExB
VEZPUk0oSU9TKQotICAgIHBhcmFtZXRlcnMuYWNjZWxlcmF0ZWRDb21wb3NpdGluZ1BvcnQgPSBN
YWNoU2VuZFJpZ2h0OjpjcmVhdGUoW0NBUmVtb3RlTGF5ZXJTZXJ2ZXIgc2hhcmVkU2VydmVyXS5z
ZXJ2ZXJQb3J0KTsKLSNlbmRpZgotI2VuZGlmCi0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
cmVhbGx5IGJlIGNvbmZpZ3VyYWJsZTsgd2Ugc2hvdWxkbid0IGp1c3QgYmxpbmRseSBhbGxvdyBy
ZWFkIGFjY2VzcyB0byB0aGUgVUkgcHJvY2VzcyBidW5kbGUuCi0gICAgcGFyYW1ldGVycy51aVBy
b2Nlc3NCdW5kbGVSZXNvdXJjZVBhdGggPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIHJlc291cmNl
UGF0aF07Ci0gICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlKHBhcmFtZXRlcnMudWlQ
cm9jZXNzQnVuZGxlUmVzb3VyY2VQYXRoLCBTYW5kYm94RXh0ZW5zaW9uOjpSZWFkT25seSwgcGFy
YW1ldGVycy51aVByb2Nlc3NCdW5kbGVSZXNvdXJjZVBhdGhFeHRlbnNpb25IYW5kbGUpOwotCi0g
ICAgcGFyYW1ldGVycy51aVByb2Nlc3NCdW5kbGVJZGVudGlmaWVyID0gU3RyaW5nKFtbTlNCdW5k
bGUgbWFpbkJ1bmRsZV0gYnVuZGxlSWRlbnRpZmllcl0pOwotCi0jaWYgRU5BQkxFKE5FVFdPUktf
UFJPQ0VTUykKLSAgICBpZiAoIW1fdXNlc05ldHdvcmtQcm9jZXNzKSB7Ci0jZW5kaWYKLSAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBzY2hlbWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVBy
b3RvY29sSGFuZGxlcnMoKSkKLSAgICAgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lz
dGVyZWRGb3JDdXN0b21Qcm90b2NvbHMuYXBwZW5kKHNjaGVtZSk7Ci0jaWYgRU5BQkxFKE5FVFdP
UktfUFJPQ0VTUykKLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChtX2J1bmRsZVBhcmFtZXRlcnMp
IHsKLSAgICAgICAgYXV0byBkYXRhID0gYWRvcHROUyhbW05TTXV0YWJsZURhdGEgYWxsb2NdIGlu
aXRdKTsKLSAgICAgICAgYXV0byBrZXllZEFyY2hpdmVyID0gYWRvcHROUyhbW05TS2V5ZWRBcmNo
aXZlciBhbGxvY10gaW5pdEZvcldyaXRpbmdXaXRoTXV0YWJsZURhdGE6ZGF0YS5nZXQoKV0pOwot
Ci0gICAgICAgIFtrZXllZEFyY2hpdmVyIHNldFJlcXVpcmVzU2VjdXJlQ29kaW5nOllFU107Ci0K
LSAgICAgICAgQHRyeSB7Ci0gICAgICAgICAgICBba2V5ZWRBcmNoaXZlciBlbmNvZGVPYmplY3Q6
bV9idW5kbGVQYXJhbWV0ZXJzLmdldCgpIGZvcktleTpAInBhcmFtZXRlcnMiXTsKLSAgICAgICAg
ICAgIFtrZXllZEFyY2hpdmVyIGZpbmlzaEVuY29kaW5nXTsKLSAgICAgICAgfSBAY2F0Y2ggKE5T
RXhjZXB0aW9uICpleGNlcHRpb24pIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGVuY29kZSBidW5kbGUgcGFyYW1ldGVyczogJUAiLCBleGNlcHRpb24pOwotICAgICAgICB9Ci0K
LSAgICAgICAgcGFyYW1ldGVycy5idW5kbGVQYXJhbWV0ZXJEYXRhID0gQVBJOjpEYXRhOjpjcmVh
dGVXaXRob3V0Q29weWluZygoY29uc3QgdW5zaWduZWQgY2hhciopW2RhdGEgYnl0ZXNdLCBbZGF0
YSBsZW5ndGhdLCBbXSAodW5zaWduZWQgY2hhciosIGNvbnN0IHZvaWQqIGRhdGEpIHsKLSAgICAg
ICAgICAgIFsoTlNEYXRhICopZGF0YSByZWxlYXNlXTsKLSAgICAgICAgfSwgZGF0YS5sZWFrUmVm
KCkpOwotICAgIH0KLX0KLQotI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCi12b2lkIFdlYkNv
bnRleHQ6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQotewotICAgIE5TVVJMQ2FjaGUgKnVybENhY2hl
ID0gW05TVVJMQ2FjaGUgc2hhcmVkVVJMQ2FjaGVdOwotICAgIHBhcmFtZXRlcnMubnNVUkxDYWNo
ZU1lbW9yeUNhcGFjaXR5ID0gW3VybENhY2hlIG1lbW9yeUNhcGFjaXR5XTsKLSAgICBwYXJhbWV0
ZXJzLm5zVVJMQ2FjaGVEaXNrQ2FwYWNpdHkgPSBbdXJsQ2FjaGUgZGlza0NhcGFjaXR5XTsKLQot
ICAgIHBhcmFtZXRlcnMucGFyZW50UHJvY2Vzc05hbWUgPSBbW05TUHJvY2Vzc0luZm8gcHJvY2Vz
c0luZm9dIHByb2Nlc3NOYW1lXTsKLSAgICBwYXJhbWV0ZXJzLnVpUHJvY2Vzc0J1bmRsZUlkZW50
aWZpZXIgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZUlkZW50aWZpZXJdOwotCi0gICAg
Zm9yIChjb25zdCBhdXRvJiBzY2hlbWUgOiBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3Rv
Y29sSGFuZGxlcnMoKSkKLSAgICAgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEZv
ckN1c3RvbVByb3RvY29scy5hcHBlbmQoc2NoZW1lKTsKLQotICAgIHBhcmFtZXRlcnMuaHR0cFBy
b3h5ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc3RyaW5nRm9yS2V5
OldlYktpdDJIVFRQUHJveHlEZWZhdWx0c0tleV07Ci0gICAgcGFyYW1ldGVycy5odHRwc1Byb3h5
ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc3RyaW5nRm9yS2V5Oldl
YktpdDJIVFRQU1Byb3h5RGVmYXVsdHNLZXldOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViQ29udGV4
dDo6cGxhdGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCi17Ci0gICAgdW5yZWdpc3Rlck5vdGlmaWNh
dGlvbk9ic2VydmVycygpOwotfQotCi1TdHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0
RGlza0NhY2hlRGlyZWN0b3J5KCkgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IGNh
Y2hlUGF0aCA9IGFkb3B0TlMoKE5TU3RyaW5nICopV0tDb3B5Rm91bmRhdGlvbkNhY2hlRGlyZWN0
b3J5KCkpOwotICAgIGlmICghY2FjaGVQYXRoKQotICAgICAgICBjYWNoZVBhdGggPSBAIn4vTGli
cmFyeS9DYWNoZXMvY29tLmFwcGxlLldlYktpdC5XZWJQcm9jZXNzIjsKLSAgICByZXR1cm4gc3Ry
aW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aChbY2FjaGVQYXRoIHN0cmluZ0J5U3RhbmRhcmRp
emluZ1BhdGhdKTsKLX0KLQotU3RyaW5nIFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdENvb2tp
ZVN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdAotewotI2lmIFBMQVRGT1JNKElPUykKLSAgICBTdHJp
bmcgcGF0aCA9IHBhdGhGb3JQcm9jZXNzQ29udGFpbmVyKCk7Ci0gICAgaWYgKHBhdGguaXNFbXB0
eSgpKQotICAgICAgICBwYXRoID0gTlNIb21lRGlyZWN0b3J5KCk7Ci0KLSAgICBwYXRoID0gcGF0
aCArICIvTGlicmFyeS9Db29raWVzIjsKLSAgICBwYXRoID0gc3RyaW5nQnlSZXNvbHZpbmdTeW1s
aW5rc0luUGF0aChwYXRoKTsKLSAgICByZXR1cm4gcGF0aDsKLSNlbHNlCi0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICByZXR1cm4gW0AiIiBzdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRoXTsKLSNl
bmRpZgotfQotCi0jaWYgUExBVEZPUk0oSU9TKQotU3RyaW5nIFdlYkNvbnRleHQ6Om9wZW5HTENh
Y2hlRGlyZWN0b3J5KCkgY29uc3QKLXsKLSAgICBTdHJpbmcgcGF0aCA9IHBhdGhGb3JQcm9jZXNz
Q29udGFpbmVyKCk7Ci0gICAgaWYgKHBhdGguaXNFbXB0eSgpKQotICAgICAgICBwYXRoID0gTlNI
b21lRGlyZWN0b3J5KCk7Ci0KLSAgICBwYXRoID0gcGF0aCArICIvTGlicmFyeS9DYWNoZXMvY29t
LmFwcGxlLldlYktpdC5XZWJDb250ZW50L2NvbS5hcHBsZS5vcGVuZ2wvIjsKLSAgICByZXR1cm4g
c3RyaW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aChwYXRoKTsKLX0KLQotU3RyaW5nIFdlYkNv
bnRleHQ6OnBhcmVudEJ1bmRsZURpcmVjdG9yeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFtbW05T
QnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZVBhdGhdIHN0cmluZ0J5U3RhbmRhcmRpemluZ1BhdGhd
OwotfQotCi1TdHJpbmcgV2ViQ29udGV4dDo6bmV0d29ya2luZ0hTVFNEYXRhYmFzZVBhdGgoKSBj
b25zdAotewotICAgIFN0cmluZyBwYXRoID0gcGF0aEZvclByb2Nlc3NDb250YWluZXIoKTsKLSAg
ICBpZiAocGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHBhdGggPSBOU0hvbWVEaXJlY3RvcnkoKTsK
LQotICAgIHBhdGggPSBwYXRoICsgIi9MaWJyYXJ5L0NhY2hlcy9jb20uYXBwbGUuV2ViS2l0Lk5l
dHdvcmtpbmcvIjsKLSAgICBwYXRoID0gc3RyaW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aChw
YXRoKTsKLQotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAgIE5TU3RyaW5nKiBuc1BhdGgg
PSBwYXRoOwotICAgIGlmICghW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjcmVhdGVE
aXJlY3RvcnlBdFBhdGg6bnNQYXRoIHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0
cmlidXRlczpuaWwgZXJyb3I6JmVycm9yXSkgewotICAgICAgICBOU0xvZyhAImNvdWxkIG5vdCBj
cmVhdGUgXCIlQFwiLCBlcnJvciAlQCIsIG5zUGF0aCwgZXJyb3IpOwotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhdGggKyAiL0hTVFMucGxpc3QiOwotfQot
Ci1TdHJpbmcgV2ViQ29udGV4dDo6d2ViQ29udGVudEhTVFNEYXRhYmFzZVBhdGgoKSBjb25zdAot
ewotICAgIFN0cmluZyBwYXRoID0gcGF0aEZvclByb2Nlc3NDb250YWluZXIoKTsKLSAgICBpZiAo
cGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHBhdGggPSBOU0hvbWVEaXJlY3RvcnkoKTsKLQotICAg
IHBhdGggPSBwYXRoICsgIi9MaWJyYXJ5L0NhY2hlcy9jb20uYXBwbGUuV2ViS2l0LldlYkNvbnRl
bnQvIjsKLSAgICBwYXRoID0gc3RyaW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aChwYXRoKTsK
LQotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwotICAgIE5TU3RyaW5nKiBuc1BhdGggPSBwYXRo
OwotICAgIGlmICghW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjcmVhdGVEaXJlY3Rv
cnlBdFBhdGg6bnNQYXRoIHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0cmlidXRl
czpuaWwgZXJyb3I6JmVycm9yXSkgewotICAgICAgICBOU0xvZyhAImNvdWxkIG5vdCBjcmVhdGUg
XCIlQFwiLCBlcnJvciAlQCIsIG5zUGF0aCwgZXJyb3IpOwotICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhdGggKyAiL0hTVFMucGxpc3QiOwotfQotCi1TdHJp
bmcgV2ViQ29udGV4dDo6Y29udGFpbmVyVGVtcG9yYXJ5RGlyZWN0b3J5KCkgY29uc3QKLXsKLSAg
ICBTdHJpbmcgcGF0aCA9IE5TVGVtcG9yYXJ5RGlyZWN0b3J5KCk7Ci0gICAgcmV0dXJuIHN0cmlu
Z0J5UmVzb2x2aW5nU3ltbGlua3NJblBhdGgocGF0aCk7Ci19Ci0jZW5kaWYKLQotU3RyaW5nIFdl
YkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdFdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KCkKLXsKLSAg
ICBOU1N0cmluZyAqZGF0YWJhc2VzRGlyZWN0b3J5ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFy
ZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9yS2V5OldlYkRhdGFiYXNlRGlyZWN0b3J5RGVmYXVsdHNL
ZXldOwotICAgIGlmICghZGF0YWJhc2VzRGlyZWN0b3J5IHx8ICFbZGF0YWJhc2VzRGlyZWN0b3J5
IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCi0gICAgICAgIGRhdGFiYXNlc0RpcmVj
dG9yeSA9IEAifi9MaWJyYXJ5L1dlYktpdC9EYXRhYmFzZXMiOwotICAgIHJldHVybiBzdHJpbmdC
eVJlc29sdmluZ1N5bWxpbmtzSW5QYXRoKFtkYXRhYmFzZXNEaXJlY3Rvcnkgc3RyaW5nQnlTdGFu
ZGFyZGl6aW5nUGF0aF0pOwotfQotCi1TdHJpbmcgV2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0
SW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoKQotewotICAgIC8vIEluZGV4ZWQgZGF0YWJhc2Vz
IGV4aXN0IGluIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSAiZGF0YWJhc2UgZGlyZWN0b3J5IHBhdGgu
IgotICAgIC8vIEN1cnJlbnRseSwgdGhlIHRvcCBsZXZlbCBvZiB0aGF0IGRpcmVjdG9yeSBjb250
YWlucyBlbnRpdGllcyByZWxhdGVkIHRvIFdlYlNRTCBkYXRhYmFzZXMuCi0gICAgLy8gV2Ugc2hv
dWxkIGZpeCB0aGlzLCBhbmQgbW92ZSBXZWJTUUwgaW50byBhIHN1YmRpcmVjdG9yeSAoaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDgwNykKLSAgICAvLyBJbiB0aGUg
bWVhbnRpbWUsIGFuIGVudGl0eSBuYW1lIHByZWZpeGVkIHdpdGggdGhyZWUgdW5kZXJzY29yZXMg
d2lsbCBub3QgY29uZmxpY3Qgd2l0aCBhbnkgV2ViU1FMIGVudGl0aWVzLgotICAgIHJldHVybiBw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGxhdGZvcm1EZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJl
Y3RvcnkoKSwgIl9fX0luZGV4ZWREQiIpOwotfQotCi1TdHJpbmcgV2ViQ29udGV4dDo6cGxhdGZv
cm1EZWZhdWx0SWNvbkRhdGFiYXNlUGF0aCgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IDxyZGFy
Oi8vcHJvYmxlbS85MTM4ODE3PiAtIEFmdGVyIHRoaXMgImJhY2t3YXJkcyBjb21wYXRpYmlsaXR5
IiByYWRhciBpcyByZW1vdmVkLCB0aGlzIGNvZGUgc2hvdWxkIGJlIHJlbW92ZWQgdG8gb25seSBy
ZXR1cm4gYW4gZW1wdHkgU3RyaW5nLgotICAgIE5TU3RyaW5nICpkYXRhYmFzZXNEaXJlY3Rvcnkg
PSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBvYmplY3RGb3JLZXk6V2Vi
SWNvbkRhdGFiYXNlRGlyZWN0b3J5RGVmYXVsdHNLZXldOwotICAgIGlmICghZGF0YWJhc2VzRGly
ZWN0b3J5IHx8ICFbZGF0YWJhc2VzRGlyZWN0b3J5IGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNs
YXNzXV0pCi0gICAgICAgIGRhdGFiYXNlc0RpcmVjdG9yeSA9IEAifi9MaWJyYXJ5L0ljb25zL1dl
YnBhZ2VJY29ucy5kYiI7Ci0gICAgcmV0dXJuIHN0cmluZ0J5UmVzb2x2aW5nU3ltbGlua3NJblBh
dGgoW2RhdGFiYXNlc0RpcmVjdG9yeSBzdHJpbmdCeVN0YW5kYXJkaXppbmdQYXRoXSk7Ci19Ci0K
LVN0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3Rvcnko
KQotewotICAgIE5TU3RyaW5nICpsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBvYmplY3RGb3JLZXk6V2ViU3RvcmFnZURpcmVjdG9y
eURlZmF1bHRzS2V5XTsKLSAgICBpZiAoIWxvY2FsU3RvcmFnZURpcmVjdG9yeSB8fCAhW2xvY2Fs
U3RvcmFnZURpcmVjdG9yeSBpc0tpbmRPZkNsYXNzOltOU1N0cmluZyBjbGFzc11dKQotICAgICAg
ICBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBAIn4vTGlicmFyeS9XZWJLaXQvTG9jYWxTdG9yYWdl
IjsKLSAgICByZXR1cm4gc3RyaW5nQnlSZXNvbHZpbmdTeW1saW5rc0luUGF0aChbbG9jYWxTdG9y
YWdlRGlyZWN0b3J5IHN0cmluZ0J5U3RhbmRhcmRpemluZ1BhdGhdKTsKLX0KLQotU3RyaW5nIFdl
YkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKQotewot
ICAgIE5TU3RyaW5nICptZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gW1tOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gb2JqZWN0Rm9yS2V5OldlYktpdE1lZGlhS2V5c1N0b3Jh
Z2VEaXJlY3RvcnlEZWZhdWx0c0tleV07Ci0gICAgaWYgKCFtZWRpYUtleXNTdG9yYWdlRGlyZWN0
b3J5IHx8ICFbbWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSBpc0tpbmRPZkNsYXNzOltOU1N0cmlu
ZyBjbGFzc11dKQotICAgICAgICBtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5ID0gQCJ+L0xpYnJh
cnkvV2ViS2l0L01lZGlhS2V5cyI7Ci0gICAgcmV0dXJuIHN0cmluZ0J5UmVzb2x2aW5nU3ltbGlu
a3NJblBhdGgoW21lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rvcnkgc3RyaW5nQnlTdGFuZGFyZGl6aW5n
UGF0aF0pOwotfQotCi1ib29sIFdlYkNvbnRleHQ6Om9taXRQREZTdXBwb3J0KCkKLXsKLSAgICAv
LyBTaW5jZSB0aGlzIGlzIGEgInNlY3JldCBkZWZhdWx0IiB3ZSBkb24ndCBib3RoZXIgcmVnaXN0
ZXJpbmcgaXQuCi0gICAgcmV0dXJuIFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVs
dHNdIGJvb2xGb3JLZXk6QCJXZWJLaXRPbWl0UERGU3VwcG9ydCJdOwotfQotCi12b2lkIFdlYkNv
bnRleHQ6OmdldFBhc3RlYm9hcmRUeXBlcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBW
ZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzKQotewotICAgIFBsYXRmb3JtUGFzdGVib2Fy
ZChwYXN0ZWJvYXJkTmFtZSkuZ2V0VHlwZXMocGFzdGVib2FyZFR5cGVzKTsKLX0KLQotdm9pZCBX
ZWJDb250ZXh0OjpnZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBWZWN0b3I8U3RyaW5n
PiYgcGF0aG5hbWVzKQotewotICAgIFBsYXRmb3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSku
Z2V0UGF0aG5hbWVzRm9yVHlwZShwYXRobmFtZXMsIHBhc3RlYm9hcmRUeXBlKTsKLX0KLQotdm9p
ZCBXZWJDb250ZXh0OjpnZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBTdHJpbmcmIHN0cmlu
ZykKLXsKLSAgICBzdHJpbmcgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnN0
cmluZ0ZvclR5cGUocGFzdGVib2FyZFR5cGUpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OmdldFBh
c3RlYm9hcmRCdWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBoYW5kbGUsIHVp
bnQ2NF90JiBzaXplKQotewotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFBsYXRm
b3JtUGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSkuYnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJkVHlw
ZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBzaXplID0gYnVmZmVy
LT5zaXplKCk7Ci0gICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0g
U2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZSk7Ci0gICAgaWYgKCFzaGFyZWRNZW1vcnlCdWZmZXIp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtZW1jcHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5kYXRhKCks
IGJ1ZmZlci0+ZGF0YSgpLCBzaXplKTsKLSAgICBzaGFyZWRNZW1vcnlCdWZmZXItPmNyZWF0ZUhh
bmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOwotfQotCi12b2lkIFdlYkNvbnRl
eHQ6OnBhc3RlYm9hcmRDb3B5KGNvbnN0IFN0cmluZyYgZnJvbVBhc3RlYm9hcmQsIGNvbnN0IFN0
cmluZyYgdG9QYXN0ZWJvYXJkLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpCi17Ci0gICAgbmV3
Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQodG9QYXN0ZWJvYXJkKS5jb3B5KGZyb21Q
YXN0ZWJvYXJkKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpnZXRQYXN0ZWJvYXJkQ2hhbmdlQ291
bnQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgdWludDY0X3QmIGNoYW5nZUNvdW50KQot
ewotICAgIGNoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5j
aGFuZ2VDb3VudCgpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OmdldFBhc3RlYm9hcmRVbmlxdWVO
YW1lKFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCi17Ci0gICAgcGFzdGVib2FyZE5hbWUgPSBQbGF0
Zm9ybVBhc3RlYm9hcmQ6OnVuaXF1ZU5hbWUoKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpnZXRQ
YXN0ZWJvYXJkQ29sb3IoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgV2ViQ29yZTo6Q29s
b3ImIGNvbG9yKQotewotICAgIGNvbG9yID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmRO
YW1lKS5jb2xvcigpOyAgICAKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpnZXRQYXN0ZWJvYXJkVVJM
KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFdURjo6U3RyaW5nJiB1cmxTdHJpbmcpCi17
Ci0gICAgdXJsU3RyaW5nID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS51cmwo
KS5zdHJpbmcoKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjphZGRQYXN0ZWJvYXJkVHlwZXMoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9h
cmRUeXBlcywgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KQotewotICAgIG5ld0NoYW5nZUNvdW50
ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5hZGRUeXBlcyhwYXN0ZWJvYXJk
VHlwZXMpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OnNldFBhc3RlYm9hcmRUeXBlcyhjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5
cGVzLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpCi17Ci0gICAgbmV3Q2hhbmdlQ291bnQgPSBQ
bGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldFR5cGVzKHBhc3RlYm9hcmRUeXBl
cyk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6c2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlw
ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgdWludDY0X3QmIG5ld0NoYW5nZUNv
dW50KQotewotICAgIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0ZWJvYXJkKHBhc3RlYm9h
cmROYW1lKS5zZXRQYXRobmFtZXNGb3JUeXBlKHBhdGhuYW1lcywgcGFzdGVib2FyZFR5cGUpOwot
fQotCi12b2lkIFdlYkNvbnRleHQ6OnNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0
IFN0cmluZyYgc3RyaW5nLCB1aW50NjRfdCYgbmV3Q2hhbmdlQ291bnQpCi17Ci0gICAgbmV3Q2hh
bmdlQ291bnQgPSBQbGF0Zm9ybVBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldFN0cmluZ0Zv
clR5cGUoc3RyaW5nLCBwYXN0ZWJvYXJkVHlwZSk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6c2V0
UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGhh
bmRsZSwgdWludDY0X3Qgc2l6ZSwgdWludDY0X3QmIG5ld0NoYW5nZUNvdW50KQotewotICAgIGlm
IChoYW5kbGUuaXNOdWxsKCkpIHsKLSAgICAgICAgbmV3Q2hhbmdlQ291bnQgPSBQbGF0Zm9ybVBh
c3RlYm9hcmQocGFzdGVib2FyZE5hbWUpLnNldEJ1ZmZlckZvclR5cGUoMCwgcGFzdGVib2FyZFR5
cGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNo
YXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVt
b3J5OjpSZWFkT25seSk7Ci0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihzaGFyZWRNZW1vcnlC
dWZmZXItPmRhdGEoKSksIHNpemUpOwotICAgIG5ld0NoYW5nZUNvdW50ID0gUGxhdGZvcm1QYXN0
ZWJvYXJkKHBhc3RlYm9hcmROYW1lKS5zZXRCdWZmZXJGb3JUeXBlKGJ1ZmZlciwgcGFzdGVib2Fy
ZFR5cGUpOwotfQotCi0jaWYgUExBVEZPUk0oSU9TKQotdm9pZCBXZWJDb250ZXh0Ojp3cml0ZVdl
YkNvbnRlbnRUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQm
IGNvbnRlbnQpCi17Ci0gICAgUGxhdGZvcm1QYXN0ZWJvYXJkKCkud3JpdGUoY29udGVudCk7Ci19
Ci0KLXZvaWQgV2ViQ29udGV4dDo6d3JpdGVJbWFnZVRvUGFzdGVib2FyZChjb25zdCBXZWJDb3Jl
OjpQYXN0ZWJvYXJkSW1hZ2UmIHBhc3RlYm9hcmRJbWFnZSkKLXsKLSAgICBQbGF0Zm9ybVBhc3Rl
Ym9hcmQoKS53cml0ZShwYXN0ZWJvYXJkSW1hZ2UpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6Ondy
aXRlU3RyaW5nVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0
IFN0cmluZyYgdGV4dCkKLXsKLSAgICBQbGF0Zm9ybVBhc3RlYm9hcmQoKS53cml0ZShwYXN0ZWJv
YXJkVHlwZSwgdGV4dCk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6cmVhZFN0cmluZ0Zyb21QYXN0
ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBXVEY6
OlN0cmluZyYgdmFsdWUpCi17Ci0gICAgdmFsdWUgPSBQbGF0Zm9ybVBhc3RlYm9hcmQoKS5yZWFk
U3RyaW5nKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6cmVh
ZFVSTEZyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmRUeXBlLCBTdHJpbmcmIHVybCkKLXsKLSAgICB1cmwgPSBQbGF0Zm9ybVBhc3RlYm9hcmQoKS5y
ZWFkVVJMKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6cmVh
ZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKHVpbnQ2NF90IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmRUeXBlLCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaGFuZGxlLCB1aW50NjRfdCYgc2l6ZSkK
LXsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBQbGF0Zm9ybVBhc3RlYm9hcmQo
KS5yZWFkQnVmZmVyKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0g
ICAgICAgIHJldHVybjsKLSAgICBzaXplID0gYnVmZmVyLT5zaXplKCk7Ci0gICAgUmVmUHRyPFNo
YXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6
ZSk7Ci0gICAgaWYgKCFzaGFyZWRNZW1vcnlCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBt
ZW1jcHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+ZGF0YSgpLCBzaXplKTsK
LSAgICBzaGFyZWRNZW1vcnlCdWZmZXItPmNyZWF0ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9y
eTo6UmVhZE9ubHkpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OmdldFBhc3RlYm9hcmRJdGVtc0Nv
dW50KHVpbnQ2NF90JiBpdGVtc0NvdW50KQotewotICAgIGl0ZW1zQ291bnQgPSBQbGF0Zm9ybVBh
c3RlYm9hcmQoKS5jb3VudCgpOwotfQotCi0jZW5kaWYKLQotYm9vbCBXZWJDb250ZXh0Ojpwcm9j
ZXNzU3VwcHJlc3Npb25FbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1fdXNlck9ic2Vy
dmFibGVQYWdlQ291bnRlci52YWx1ZSgpICYmICFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVk
Rm9yUGFnZUNvdW50ZXIudmFsdWUoKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpyZWdpc3Rlck5v
dGlmaWNhdGlvbk9ic2VydmVycygpCi17Ci0jaWYgIVBMQVRGT1JNKElPUykKLSAgICAvLyBMaXN0
ZW4gZm9yIGVuaGFuY2VkIGFjY2Vzc2liaWxpdHkgY2hhbmdlcyBhbmQgcHJvcGFnYXRlIHRoZW0g
dG8gdGhlIFdlYlByb2Nlc3MuCi0gICAgbV9lbmhhbmNlZEFjY2Vzc2liaWxpdHlPYnNlcnZlciA9
IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXJGb3JOYW1l
OldlYktpdEFwcGxpY2F0aW9uRGlkQ2hhbmdlQWNjZXNzaWJpbGl0eUVuaGFuY2VkVXNlckludGVy
ZmFjZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsIHF1ZXVlOltOU09wZXJhdGlvblF1ZXVlIGN1cnJl
bnRRdWV1ZV0gdXNpbmdCbG9jazpeKE5TTm90aWZpY2F0aW9uICpub3RlKSB7Ci0gICAgICAgIHNl
dEVuaGFuY2VkQWNjZXNzaWJpbGl0eShbW1tub3RlIHVzZXJJbmZvXSBvYmplY3RGb3JLZXk6QCJB
WEVuaGFuY2VkVXNlckludGVyZmFjZSJdIGJvb2xWYWx1ZV0pOwotICAgIH1dOwotCi0gICAgbV9h
dXRvbWF0aWNUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25PYnNlcnZlciA9IFtbTlNOb3RpZmlj
YXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXJGb3JOYW1lOk5TU3BlbGxDaGVj
a2VyRGlkQ2hhbmdlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9uIG9iamVjdDpu
aWwgcXVldWU6W05TT3BlcmF0aW9uUXVldWUgY3VycmVudFF1ZXVlXSB1c2luZ0Jsb2NrOl4oTlNO
b3RpZmljYXRpb24gKm5vdGlmaWNhdGlvbikgewotICAgICAgICBUZXh0Q2hlY2tlcjo6ZGlkQ2hh
bmdlQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpOwotICAgICAgICB0ZXh0Q2hlY2tl
clN0YXRlQ2hhbmdlZCgpOwotICAgIH1dOwotICAgIAotICAgIG1fYXV0b21hdGljU3BlbGxpbmdD
b3JyZWN0aW9uTm90aWZpY2F0aW9uT2JzZXJ2ZXIgPSBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRl
ZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyRm9yTmFtZTpOU1NwZWxsQ2hlY2tlckRpZENoYW5nZUF1
dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbk5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsIHF1ZXVlOltO
U09wZXJhdGlvblF1ZXVlIGN1cnJlbnRRdWV1ZV0gdXNpbmdCbG9jazpeKE5TTm90aWZpY2F0aW9u
ICpub3RpZmljYXRpb24pIHsKLSAgICAgICAgVGV4dENoZWNrZXI6OmRpZENoYW5nZUF1dG9tYXRp
Y1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKLSAgICAgICAgdGV4dENoZWNrZXJTdGF0ZUNo
YW5nZWQoKTsKLSAgICB9XTsKLQotI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTA5MAotICAgIG1fYXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25Ob3RpZmljYXRpb25PYnNl
cnZlciA9IFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXJG
b3JOYW1lOk5TU3BlbGxDaGVja2VyRGlkQ2hhbmdlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25O
b3RpZmljYXRpb24gb2JqZWN0Om5pbCBxdWV1ZTpbTlNPcGVyYXRpb25RdWV1ZSBjdXJyZW50UXVl
dWVdIHVzaW5nQmxvY2s6XihOU05vdGlmaWNhdGlvbiAqbm90aWZpY2F0aW9uKSB7Ci0gICAgICAg
IFRleHRDaGVja2VyOjpkaWRDaGFuZ2VBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQo
KTsKLSAgICAgICAgdGV4dENoZWNrZXJTdGF0ZUNoYW5nZWQoKTsKLSAgICB9XTsKLQotICAgIG1f
YXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbk5vdGlmaWNhdGlvbk9ic2VydmVyID0gW1tOU05vdGlm
aWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlckZvck5hbWU6TlNTcGVsbENo
ZWNrZXJEaWRDaGFuZ2VBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uTm90aWZpY2F0aW9uIG9iamVj
dDpuaWwgcXVldWU6W05TT3BlcmF0aW9uUXVldWUgY3VycmVudFF1ZXVlXSB1c2luZ0Jsb2NrOl4o
TlNOb3RpZmljYXRpb24gKm5vdGlmaWNhdGlvbikgewotICAgICAgICBUZXh0Q2hlY2tlcjo6ZGlk
Q2hhbmdlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKTsKLSAgICAgICAgdGV4dENo
ZWNrZXJTdGF0ZUNoYW5nZWQoKTsKLSAgICB9XTsKLSNlbmRpZgotI2VuZGlmIC8vICFQTEFURk9S
TShJT1MpCi19Ci0KLXZvaWQgV2ViQ29udGV4dDo6dW5yZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2Vy
dmVycygpCi17Ci0jaWYgIVBMQVRGT1JNKElPUykKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVy
IGRlZmF1bHRDZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fZW5oYW5jZWRBY2Nlc3NpYmlsaXR5T2Jz
ZXJ2ZXIuZ2V0KCldOyAgICAKLSAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50
ZXJdIHJlbW92ZU9ic2VydmVyOm1fYXV0b21hdGljVGV4dFJlcGxhY2VtZW50Tm90aWZpY2F0aW9u
T2JzZXJ2ZXIuZ2V0KCldOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRl
cl0gcmVtb3ZlT2JzZXJ2ZXI6bV9hdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25Ob3RpZmljYXRp
b25PYnNlcnZlci5nZXQoKV07Ci0jaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDkwCi0gICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVP
YnNlcnZlcjptX2F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uTm90aWZpY2F0aW9uT2JzZXJ2ZXIu
Z2V0KCldOwotICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3Zl
T2JzZXJ2ZXI6bV9hdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uTm90aWZpY2F0aW9uT2JzZXJ2ZXIu
Z2V0KCldOwotI2VuZGlmCi0jZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKLX0KLQotI2lmIFBMQVRG
T1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi1zdGF0
aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBwcml2YXRlQnJvd3NpbmdTZXNzaW9uKCkKLXsKLSAg
ICBzdGF0aWMgQ0ZVUkxTdG9yYWdlU2Vzc2lvblJlZiBzZXNzaW9uOwotICAgIHN0YXRpYyBkaXNw
YXRjaF9vbmNlX3Qgb25jZTsKLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlLCBeewotICAgICAgICBO
U1N0cmluZyAqaWRlbnRpZmllciA9IFtOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAuUHJp
dmF0ZUJyb3dzaW5nIiwgW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVJZGVudGlmaWVyXV07
Ci0KLSAgICAgICAgc2Vzc2lvbiA9IFdLQ3JlYXRlUHJpdmF0ZVN0b3JhZ2VTZXNzaW9uKChDRlN0
cmluZ1JlZilpZGVudGlmaWVyKTsKLSAgICB9KTsKLQotICAgIHJldHVybiBzZXNzaW9uOwotfQot
I2VuZGlmCi0KLWJvb2wgV2ViQ29udGV4dDo6aXNVUkxLbm93bkhTVFNIb3N0KGNvbnN0IFN0cmlu
ZyYgdXJsU3RyaW5nLCBib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpIGNvbnN0Ci17Ci0jaWYg
UExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAK
LSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybCA9IFVSTChVUkwoKSwgdXJsU3RyaW5nKS5jcmVh
dGVDRlVSTCgpOwotCi0gICAgcmV0dXJuIF9DRk5ldHdvcmtJc0tub3duSFNUU0hvc3RXaXRoU2Vz
c2lvbih1cmwuZ2V0KCksIHByaXZhdGVCcm93c2luZ0VuYWJsZWQgPyBwcml2YXRlQnJvd3NpbmdT
ZXNzaW9uKCkgOiBudWxscHRyKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19
Ci0KLXZvaWQgV2ViQ29udGV4dDo6cmVzZXRIU1RTSG9zdHMoKQotewotI2lmIFBMQVRGT1JNKElP
UykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCi0gICAgX0NGTmV0
d29ya1Jlc2V0SFNUU0hvc3RzV2l0aFNlc3Npb24obnVsbHB0cik7Ci0gICAgX0NGTmV0d29ya1Jl
c2V0SFNUU0hvc3RzV2l0aFNlc3Npb24ocHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpKTsKLSNlbmRp
ZgotfQotCi1pbnQgbmV0d29ya1Byb2Nlc3NMYXRlbmN5UU9TKCkKLXsKLSAgICBzdGF0aWMgaW50
IHFvcyA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGludGVnZXJGb3JL
ZXk6QCJXZWJLaXROZXR3b3JrUHJvY2Vzc0xhdGVuY3lRT1MiXTsKLSAgICByZXR1cm4gcW9zOwot
fQotCi1pbnQgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkKLXsKLSAgICBzdGF0aWMgaW50
IHFvcyA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGludGVnZXJGb3JL
ZXk6QCJXZWJLaXROZXR3b3JrUHJvY2Vzc1Rocm91Z2hwdXRRT1MiXTsKLSAgICByZXR1cm4gcW9z
OwotfQotCi1pbnQgd2ViUHJvY2Vzc0xhdGVuY3lRT1MoKQotewotICAgIHN0YXRpYyBpbnQgcW9z
ID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gaW50ZWdlckZvcktleTpA
IldlYktpdFdlYlByb2Nlc3NMYXRlbmN5UU9TIl07Ci0gICAgcmV0dXJuIHFvczsKLX0KLQotaW50
IHdlYlByb2Nlc3NUaHJvdWdocHV0UU9TKCkKLXsKLSAgICBzdGF0aWMgaW50IHFvcyA9IFtbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGludGVnZXJGb3JLZXk6QCJXZWJLaXRX
ZWJQcm9jZXNzVGhyb3VnaHB1dFFPUyJdOwotICAgIHJldHVybiBxb3M7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250
ZXh0TWVudVByb3h5TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1hYy5tbQkocmV2aXNpb24gMTc3NjkwKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAjaW1wb3J0ICJTZXJ2aWNlc0NvbnRyb2xsZXIu
aCIKICNpbXBvcnQgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2ltcG9ydCAiU3RyaW5nVXRpbGl0aWVz
LmgiCi0jaW1wb3J0ICJXZWJDb250ZXh0LmgiCiAjaW1wb3J0ICJXZWJDb250ZXh0TWVudUl0ZW1E
YXRhLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbXBvcnQgIldLVmlldy5oIgpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJJbnNwZWN0b3JQcm94eU1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkluc3BlY3Rv
clByb3h5TWFjLm1tCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1dlYkluc3BlY3RvclByb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMiAr
MzYsMTIgQEAKICNpbXBvcnQgIldLUmV0YWluUHRyLmgiCiAjaW1wb3J0ICJXS1VSTENGLmgiCiAj
aW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgotI2ltcG9ydCAiV2ViQ29udGV4dC5oIgogI2ltcG9y
dCAiV2ViSW5zcGVjdG9yTWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYkluc3BlY3RvclVJTWVzc2Fn
ZXMuaCIKICNpbXBvcnQgIldlYlBhZ2VHcm91cC5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5Lmgi
CiAjaW1wb3J0ICJXZWJQcmVmZXJlbmNlcy5oIgorI2ltcG9ydCAiV2ViUHJvY2Vzc1Bvb2wuaCIK
ICNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9Db3JlQW5p
bWF0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0luc3BlY3RvckZyb250ZW5kQ2xpZW50TG9jYWwu
aD4KQEAgLTQ4MCw3ICs0ODAsNyBAQCBXZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9yCiAgICAgICAgICAgICBpbml0aWFsUmVjdCA9IFtOU1dpbmRvdyBjb250ZW50UmVjdEZv
ckZyYW1lUmVjdDp3aW5kb3dGcmFtZSBzdHlsZU1hc2s6d2luZG93U3R5bGVNYXNrXTsKICAgICB9
CiAKLSAgICBtX2luc3BlY3RvclZpZXcgPSBhZG9wdE5TKFtbV0tXZWJJbnNwZWN0b3JXS1ZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6aW5pdGlhbFJlY3QgY29udGV4dFJlZjp0b0FQSSgmaW5zcGVj
dG9yQ29udGV4dCgpKSBwYWdlR3JvdXBSZWY6dG9BUEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpIHJl
bGF0ZWRUb1BhZ2U6bnVsbHB0cl0pOworICAgIG1faW5zcGVjdG9yVmlldyA9IGFkb3B0TlMoW1tX
S1dlYkluc3BlY3RvcldLVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTppbml0aWFsUmVjdCBjb250
ZXh0UmVmOnRvQVBJKCZpbnNwZWN0b3JQcm9jZXNzUG9vbCgpKSBwYWdlR3JvdXBSZWY6dG9BUEko
aW5zcGVjdG9yUGFnZUdyb3VwKCkpIHJlbGF0ZWRUb1BhZ2U6bnVsbHB0cl0pOwogICAgIEFTU0VS
VChtX2luc3BlY3RvclZpZXcpOwogCiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA8PSAxMDkwCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBhZ2VQcm94
eU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYlBh
Z2VQcm94eU1hYy5tbQkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9XZWJQYWdlUHJveHlNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDYg
QEAKICNpbXBvcnQgIlN0cmluZ1V0aWxpdGllcy5oIgogI2ltcG9ydCAiVGV4dENoZWNrZXIuaCIK
ICNpbXBvcnQgIldLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlckludGVybmFsLmgiCi0jaW1wb3J0
ICJXZWJDb250ZXh0LmgiCiAjaW1wb3J0ICJXZWJQYWdlTWVzc2FnZXMuaCIKICNpbXBvcnQgIldl
YlByb2Nlc3NQcm94eS5oIgogI2ltcG9ydCA8V2ViQ29yZS9EaWN0YXRpb25BbHRlcm5hdGl2ZS5o
PgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQcm9jZXNzUHJveHlNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJQcm9jZXNz
UHJveHlNYWMubW0JKHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9tYWMvV2ViUHJvY2Vzc1Byb3h5TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw2
IEBACiAKICNpZiBQTEFURk9STShNQUMpCiAKLSNpbXBvcnQgIldlYkNvbnRleHQuaCIKLSNpbXBv
cnQgIldlYlBhZ2VHcm91cC5oIgotI2ltcG9ydCAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW1w
b3J0ICJXS0Z1bGxLZXlib2FyZEFjY2Vzc1dhdGNoZXIuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dpbmRvd1NlcnZlckNvbm5lY3Rp
b24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XaW5kb3dT
ZXJ2ZXJDb25uZWN0aW9uLm1tCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1dpbmRvd1NlcnZlckNvbm5lY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI2LDggKzI2LDggQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiV2luZG93U2VydmVy
Q29ubmVjdGlvbi5oIgogCi0jaW1wb3J0ICJXZWJDb250ZXh0LmgiCiAjaW1wb3J0ICJXZWJLaXRT
eXN0ZW1JbnRlcmZhY2UuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQb29sLmgiCiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCkBAIC01Myw4ICs1Myw4IEBAIHZvaWQgV2luZG93U2VydmVyQ29ubmVjdGlv
bjo6YXBwbGljYXRpb24KIAogdm9pZCBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOjp3aW5kb3dTZXJ2
ZXJDb25uZWN0aW9uU3RhdGVDaGFuZ2VkKCkKIHsKLSAgICBmb3IgKGF1dG8qIGNvbnRleHQgOiBX
ZWJDb250ZXh0OjphbGxDb250ZXh0cygpKQotICAgICAgICBjb250ZXh0LT53aW5kb3dTZXJ2ZXJD
b25uZWN0aW9uU3RhdGVDaGFuZ2VkKCk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IFdl
YlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPndp
bmRvd1NlcnZlckNvbm5lY3Rpb25TdGF0ZUNoYW5nZWQoKTsKIH0KIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNiBAQAogCQkxQTFCMEVC
NTE4QTQyNDk1MDAzODQ4MUEgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2UubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTFCMEVCMzE4QTQyNDk1MDAzODQ4
MUEgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2UubW0gKi87IH07CiAJCTFBMUIwRUI2MThBNDI0OTUw
MDM4NDgxQSAvKiBXS05hdmlnYXRpb25SZXNwb25zZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExQjBFQjQxOEE0MjQ5NTAwMzg0ODFBIC8qIFdLTmF2
aWdhdGlvblJlc3BvbnNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCAp
OyB9OyB9OwogCQkxQTFCMEVCODE4QTQyNENEMDAzODQ4MUEgLyogV0tOYXZpZ2F0aW9uUmVzcG9u
c2VJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUExQjBFQjcxOEE0MjRDRDAwMzg0ODFBIC8qIFdLTmF2aWdhdGlvblJlc3BvbnNlSW50ZXJu
YWwuaCAqLzsgfTsKLQkJMUExQzY0OUIxMUY0MTc0MjAwNTUzQzE5IC8qIFdlYkNvbnRleHRNYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTFDNjQ4
NjExRjQxNUI3MDA1NTNDMTkgLyogV2ViQ29udGV4dE1hYy5tbSAqLzsgfTsKIAkJMUExRDhCQTEx
NzMxQTM2MzAwMTQxREE0IC8qIExvY2FsU3RvcmFnZURhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMUQ4QjlGMTczMUEzNjMwMDE0MURB
NCAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAgKi87IH07CiAJCTFBMUQ4QkEyMTczMUEzNjMw
MDE0MURBNCAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUExRDhCQTAxNzMxQTM2MzAwMTQxREE0IC8qIExvY2Fs
U3RvcmFnZURhdGFiYXNlLmggKi87IH07CiAJCTFBMURDMzQwMTk2MzQ2RDcwMEZGNzA1OSAvKiBM
ZWdhY3lTZXNzaW9uU3RhdGVDb2RpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxNjA3RjM4MTk2MjcwMDIwMDlCODdEQSAvKiBMZWdhY3lTZXNzaW9u
U3RhdGVDb2RpbmcuaCAqLzsgfTsKQEAgLTQ2Miw4ICs0NjEsNiBAQAogCQkxQUU0OTg3OTExRkY3
RkFBMDA0OEI0NjQgLyogSlNOUE9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQUU0OTg3NzExRkY3RkFBMDA0OEI0NjQgLyogSlNOUE9iamVj
dC5jcHAgKi87IH07CiAJCTFBRTQ5QTQ5MTFGRkE4Q0UwMDQ4QjQ2NCAvKiBKU05QTWV0aG9kLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUU0OUE0NzEx
RkZBOENFMDA0OEI0NjQgLyogSlNOUE1ldGhvZC5oICovOyB9OwogCQkxQUU0OUE0QTExRkZBOENF
MDA0OEI0NjQgLyogSlNOUE1ldGhvZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUU0OUE0ODExRkZBOENFMDA0OEI0NjQgLyogSlNOUE1ldGhvZC5j
cHAgKi87IH07Ci0JCTFBRTUyRjkxMTkyMDFEQTcwMEExRkEzNyAvKiBBUElDb250ZXh0Q29uZmln
dXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQUU1MkY4RjE5MjAxREE3MDBBMUZBMzcgLyogQVBJQ29udGV4dENvbmZpZ3VyYXRpb24uY3Bw
ICovOyB9OwotCQkxQUU1MkY5MjE5MjAxREE3MDBBMUZBMzcgLyogQVBJQ29udGV4dENvbmZpZ3Vy
YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
RTUyRjkwMTkyMDFEQTcwMEExRkEzNyAvKiBBUElDb250ZXh0Q29uZmlndXJhdGlvbi5oICovOyB9
OwogCQkxQUU1MkY5NzE5MjAyNjMzMDBBMUZBMzcgLyogV0tDb250ZXh0Q29uZmlndXJhdGlvblJl
Zi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUU1
MkY5MzE5MjAxRjZCMDBBMUZBMzcgLyogV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZi5jcHAgKi87
IH07CiAJCTFBRTUyRjk4MTkyMDI2NzIwMEExRkEzNyAvKiBXS0NvbnRleHRDb25maWd1cmF0aW9u
UmVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUU1
MkY5NDE5MjAxRjZCMDBBMUZBMzcgLyogV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBRTVCN0ZCMTFF
N0FFRDIwMEJBNjc2NyAvKiBOZXRzY2FwZVBsdWdpbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBRTVCN0Y5MTFFN0FFRDIwMEJBNjc2NyAvKiBO
ZXRzY2FwZVBsdWdpbk1hYy5tbSAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLVdu
by1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyI7IH07IH07CkBAIC0xMDgxLDYgKzEwNzgsMTMgQEAK
IAkJN0NENjIyNzcxNzM5RDg2MzAwNUJEN0ZGIC8qIFBsdWdpblNhbmRib3hQcm9maWxlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NENjIyNzUxNzM5
RDg2MzAwNUJEN0ZGIC8qIFBsdWdpblNhbmRib3hQcm9maWxlLm1tICovOyB9OwogCQk3Q0Q2MjI3
ODE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2luU2FuZGJveFByb2ZpbGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRDYyMjc2MTczOUQ4NjMwMDVCRDdG
RiAvKiBQbHVnaW5TYW5kYm94UHJvZmlsZS5oICovOyB9OwogCQk3Q0U0RDIwNzFBNDY3NzYxMDBD
N0YxNTIgLyogQVBJTGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTREMjA2MUE0Njc3NTcwMEM3RjE1MiAv
KiBBUElMZWdhY3lDb250ZXh0SGlzdG9yeUNsaWVudC5oICovOyB9OworCQk3Q0U0RDIxNjFBNDkx
NDg0MDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTREMjE1MUE0OTE0ODQwMEM3RjE1MiAvKiBX
ZWJQcm9jZXNzUG9vbENvY29hLm1tICovOyB9OworCQk3Q0U0RDIxQTFBNDkxNEEzMDBDN0YxNTIg
LyogV2ViUHJvY2Vzc1Bvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0NFNEQyMTcxQTQ5MTRBMzAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sLmNw
cCAqLzsgfTsKKwkJN0NFNEQyMUIxQTQ5MTRBMzAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U0RDIxODFB
NDkxNEEzMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2wuaCAqLzsgfTsKKwkJN0NFNEQyMUYxQTQ5
MTRDQTAwQzdGMTUyIC8qIEFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U0RDIxRDFBNDkxNENBMDBD
N0YxNTIgLyogQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNwcCAqLzsgfTsKKwkJN0NFNEQy
MjAxQTQ5MTRDQTAwQzdGMTUyIC8qIEFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNEQyMUUxQTQ5MTRD
QTAwQzdGMTUyIC8qIEFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oICovOyB9OworCQk3Q0U0
RDIyNzFBNDkxNkMyMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNEQyMjUx
QTQ5MTZDMjAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsg
fTsKKwkJN0NFNEQyMjgxQTQ5MTZDMjAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sTWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRTREMjI2
MUE0OTE2QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VzLmggKi87IH07CiAJCTdD
RjQ3RkY2MTcyNzVCNzEwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGNDdGRjQxNzI3NUI3MTAw
OEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lci5jcHAgKi87IH07CiAJCTdDRjQ3RkY3MTcyNzVC
NzEwMDhBQ0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRjQ3RkY1MTcyNzVCNzEwMDhBQ0I5MSAvKiBXS0J1
bmRsZVBhZ2VCYW5uZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3Q0Y0N0ZGQjE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGNDdGRjkxNzI3NUM1
NzAwOEFDQjkxIC8qIFBhZ2VCYW5uZXIuaCAqLzsgfTsKQEAgLTE0NDYsOCArMTQ1MCw2IEBACiAJ
CUJDQjBCMERFMTIzMDVBOEMwMEIxMzQxRSAvKiBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlQ29k
ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Iw
QjBERDEyMzA1QThDMDBCMTM0MUUgLyogSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUNvZGVycy5o
ICovOyB9OwogCQlCQ0IwQjBFMDEyMzA1QUIxMDBCMTM0MUUgLyogVXNlck1lc3NhZ2VDb2RlcnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQjBCMERG
MTIzMDVBQjEwMEIxMzQxRSAvKiBVc2VyTWVzc2FnZUNvZGVycy5oICovOyB9OwogCQlCQ0I2MzQ3
ODExNkJGMTA2MDA2MDMyMTUgLyogV2ViS2l0Ml9DLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0I2MzQ3NzExNkJGMTA2MDA2MDMyMTUgLyogV2ViS2l0
Ml9DLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
QkNCOUUyNDMxMTIwREFDQTAwQTEzN0UwIC8qIFdlYkNvbnRleHQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQjlFMjQxMTEyMERBQ0EwMEExMzdFMCAv
KiBXZWJDb250ZXh0LmggKi87IH07Ci0JCUJDQjlFMjQ0MTEyMERBQ0EwMEExMzdFMCAvKiBXZWJD
b250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDQjlFMjQyMTEyMERBQ0EwMEExMzdFMCAvKiBXZWJDb250ZXh0LmNwcCAqLzsgfTsKIAkJQkNC
OUUyNEIxMTIwRTE1QzAwQTEzN0UwIC8qIFdLQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCOUUyNDkxMTIwRTE1QzAwQTEzN0UwIC8qIFdL
Q29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUJDQjlFMjRDMTEyMEUxNUMwMEExMzdFMCAvKiBXS0NvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCOUUyNEExMTIwRTE1QzAwQTEz
N0UwIC8qIFdLQ29udGV4dC5jcHAgKi87IH07CiAJCUJDQjlGNkEwMTEyM0E4NEIwMEExMzdFMCAv
KiBXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQjlGNjlFMTEyM0E4NEIwMEExMzdFMCAvKiBXZWJGcmFt
ZVBvbGljeUxpc3RlbmVyUHJveHkuaCAqLzsgfTsKQEAgLTE1MzEsOCArMTUzMyw2IEBACiAJCUJD
RTgxRDk5MTMxQUUwMjEwMDI0MTkxMCAvKiBEaWN0aW9uYXJ5UG9wdXBJbmZvLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0U4MUQ5NzEzMUFFMDIxMDAy
NDE5MTAgLyogRGljdGlvbmFyeVBvcHVwSW5mby5oICovOyB9OwogCQlCQ0VFN0FEMDEyODE3OTg4
MDA5ODI3REEgLyogV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUU3QUNDMTI4MTc5ODgwMDk4
MjdEQSAvKiBXZWJQcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQlCQ0VF
N0FEMTEyODE3OTg4MDA5ODI3REEgLyogV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUU3QUNEMTI4MTc5ODgw
MDk4MjdEQSAvKiBXZWJQcm9jZXNzUHJveHlNZXNzYWdlcy5oICovOyB9OwotCQlCQ0VFN0QwRDEy
ODQ2RjY5MDA5ODI3REEgLyogV2ViQ29udGV4dE1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VFN0QwQjEyODQ2RjY5MDA5
ODI3REEgLyogV2ViQ29udGV4dE1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCUJDRUU3RDBF
MTI4NDZGNjkwMDk4MjdEQSAvKiBXZWJDb250ZXh0TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUU3RDBDMTI4NDZGNjkwMDk4MjdEQSAv
KiBXZWJDb250ZXh0TWVzc2FnZXMuaCAqLzsgfTsKIAkJQkNFRTdEQzUxMjhCNjQ1RDAwOTgyN0RB
IC8qIEluamVjdGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0VFN0RDMzEyOEI2NDVEMDA5ODI3REEgLyogSW5qZWN0ZWRCdW5k
bGVDbGllbnQuaCAqLzsgfTsKIAkJQkNFRTdEQzYxMjhCNjQ1RDAwOTgyN0RBIC8qIEluamVjdGVk
QnVuZGxlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDRUU3REM0MTI4QjY0NUQwMDk4MjdEQSAvKiBJbmplY3RlZEJ1bmRsZUNsaWVudC5j
cHAgKi87IH07CiAJCUJDRUU5NjZDMTEyRkFGNTcwMDZCQ0MyNCAvKiBBdHRhY2htZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUU5NjZBMTEy
RkFGNTcwMDZCQ0MyNCAvKiBBdHRhY2htZW50LmNwcCAqLzsgfTsKQEAgLTIxNDYsNyArMjE0Niw2
IEBACiAJCTFBMUIwRUIzMThBNDI0OTUwMDM4NDgxQSAvKiBXS05hdmlnYXRpb25SZXNwb25zZS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLTmF2aWdhdGlvblJl
c3BvbnNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTFCMEVCNDE4QTQyNDk1
MDAzODQ4MUEgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tOYXZpZ2F0aW9uUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUExQjBFQjcxOEE0MjRDRDAwMzg0ODFBIC8qIFdLTmF2aWdhdGlvblJlc3BvbnNl
SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tOYXZpZ2F0aW9u
UmVzcG9uc2VJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTFDNjQ4
NjExRjQxNUI3MDA1NTNDMTkgLyogV2ViQ29udGV4dE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvbnRleHRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBMUQyMTE2MTkxRDk5NUMwMDAxNjE5RiAvKiByZXdyaXRlLWF2YWlsYWJp
bGl0eS1tYWNyb3Muc2ggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnNjcmlwdC5zaDsgbmFtZSA9ICJyZXdyaXRlLWF2YWlsYWJpbGl0eS1tYWNy
b3Muc2giOyBwYXRoID0gIm1hYy9yZXdyaXRlLWF2YWlsYWJpbGl0eS1tYWNyb3Muc2giOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTFEMjExNzE5MUQ5OTZDMDAwMTYxOUYgLyogTWln
cmF0ZUhlYWRlcnNGcm9tV2ViS2l0TGVnYWN5Lm1ha2UgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gTWlncmF0ZUhlYWRlcnNGcm9t
V2ViS2l0TGVnYWN5Lm1ha2U7IHBhdGggPSBtYWMvTWlncmF0ZUhlYWRlcnNGcm9tV2ViS2l0TGVn
YWN5Lm1ha2U7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMUQ4QjlGMTczMUEzNjMw
MDE0MURBNCAvKiBMb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBMb2NhbFN0b3JhZ2VEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yNDg2LDggKzI0ODUsNiBAQAogCQkxQUU0OTg3NzExRkY3RkFBMDA0
OEI0NjQgLyogSlNOUE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU05QT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFFNDlB
NDcxMUZGQThDRTAwNDhCNDY0IC8qIEpTTlBNZXRob2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNOUE1ldGhvZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
QUU0OUE0ODExRkZBOENFMDA0OEI0NjQgLyogSlNOUE1ldGhvZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU05QTWV0aG9kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMUFFNTJGOEYxOTIwMURBNzAwQTFGQTM3IC8qIEFQSUNvbnRleHRDb25maWd1
cmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFQSUNvbnRl
eHRDb25maWd1cmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFFNTJG
OTAxOTIwMURBNzAwQTFGQTM3IC8qIEFQSUNvbnRleHRDb25maWd1cmF0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUNvbnRleHRDb25maWd1cmF0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRTUyRjkzMTkyMDFGNkIwMEExRkEzNyAvKiBXS0Nv
bnRleHRDb25maWd1cmF0aW9uUmVmLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQUU1MkY5NDE5MjAxRjZCMDBBMUZBMzcgLyogV0tDb250ZXh0Q29uZmlndXJh
dGlvblJlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRleHRDb25m
aWd1cmF0aW9uUmVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBRTVCN0Y5MTFF
N0FFRDIwMEJBNjc2NyAvKiBOZXRzY2FwZVBsdWdpbk1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5ldHNjYXBlUGx1Z2luTWFjLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzE3Niw2ICszMTczLDE0IEBACiAJCTdDRDYyMjc1MTczOUQ4NjMw
MDVCRDdGRiAvKiBQbHVnaW5TYW5kYm94UHJvZmlsZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFBsdWdpblNhbmRib3hQcm9maWxlLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3Q0Q2MjI3NjE3MzlEODYzMDA1QkQ3RkYgLyogUGx1Z2luU2FuZGJv
eFByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luU2FuZGJv
eFByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFNEQyMDYxQTQ2Nzc1
NzAwQzdGMTUyIC8qIEFQSUxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFQSUxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdDRTREMjE1MUE0OTE0ODQwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbENvY29h
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViUHJvY2Vzc1Bv
b2xDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NFNEQyMTcxQTQ5MTRB
MzAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYlByb2Nlc3NQb29sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJN0NFNEQyMTgxQTQ5MTRBMzAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlByb2Nlc3NQb29sLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTdDRTREMjE5MUE0OTE0QTMwMEM3RjE1MiAvKiBXZWJQcm9jZXNz
UG9vbC5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJQcm9jZXNzUG9vbC5t
ZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NFNEQyMUQxQTQ5MTRD
QTAwQzdGMTUyIC8qIEFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0U0RDIxRTFBNDkxNENBMDBDN0YxNTIg
LyogQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFQSVByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3Q0U0RDIyNTFBNDkxNkMyMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViUHJvY2Vzc1Bvb2xNZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3Q0U0RDIyNjFBNDkxNkMyMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2xNZXNzYWdl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQcm9jZXNzUG9vbE1lc3Nh
Z2VzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRjQ3RkY0MTcyNzVCNzEwMDhB
Q0I5MSAvKiBXS0J1bmRsZVBhZ2VCYW5uZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0tCdW5kbGVQYWdlQmFubmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0NGNDdGRjUxNzI3NUI3MTAwOEFDQjkxIC8qIFdLQnVuZGxlUGFnZUJhbm5lci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0J1bmRsZVBhZ2VCYW5uZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGNDdGRjkxNzI3NUM1NzAwOEFDQjkxIC8q
IFBhZ2VCYW5uZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZUJhbm5l
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU2Niw4ICszNTcxLDYgQEAKIAkJ
QkNCMEIwREYxMjMwNUFCMTAwQjEzNDFFIC8qIFVzZXJNZXNzYWdlQ29kZXJzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJNZXNzYWdlQ29kZXJzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUJDQjYzNDc3MTE2QkYxMDYwMDYwMzIxNSAvKiBXZWJLaXQyX0Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0Ml9DLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQjg2RjRCMTE2QUFBQ0QwMENFMjBCNyAvKiBXZWJLaXQu
eGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gV2ViS2l0LnhjY29uZmln
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0I5RTI0MTExMjBEQUNBMDBBMTM3RTAg
LyogV2ViQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb250
ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDQjlFMjQyMTEyMERBQ0EwMEEx
MzdFMCAvKiBXZWJDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdlYkNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0I5RTI0
OTExMjBFMTVDMDBBMTM3RTAgLyogV0tDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdLQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0I5
RTI0QTExMjBFMTVDMDBBMTM3RTAgLyogV0tDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdLQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDQjlGNjlFMTEyM0E4NEIwMEExMzdFMCAvKiBXZWJGcmFtZVBvbGljeUxpc3RlbmVy
UHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRnJhbWVQb2xpY3lM
aXN0ZW5lclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNjU2LDkgKzM2
NTksNiBAQAogCQlCQ0VFN0FCMzEyODE3MDk1MDA5ODI3REEgLyogV2ViUHJvY2Vzc1Byb3h5Lm1l
c3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlByb2Nlc3NQcm94eS5tZXNzYWdl
cy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFRTdBQ0MxMjgxNzk4ODAwOTgy
N0RBIC8qIFdlYlByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0VFN0FDRDEyODE3OTg4MDA5ODI3REEg
LyogV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQkNFRTdEMDkxMjg0NkFFRDAwOTgyN0RBIC8qIFdlYkNvbnRleHQubWVzc2FnZXMuaW4g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViQ29udGV4dC5tZXNzYWdlcy5pbjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNFRTdEMEIxMjg0NkY2OTAwOTgyN0RBIC8qIFdlYkNvbnRl
eHRNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViQ29udGV4dE1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUJDRUU3RDBDMTI4NDZGNjkwMDk4MjdEQSAvKiBXZWJDb250ZXh0TWVzc2FnZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29udGV4dE1lc3NhZ2VzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUU3REMzMTI4QjY0NUQwMDk4MjdEQSAvKiBJ
bmplY3RlZEJ1bmRsZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bmplY3RlZEJ1bmRsZUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0VF
N0RDNDEyOEI2NDVEMDA5ODI3REEgLyogSW5qZWN0ZWRCdW5kbGVDbGllbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5qZWN0ZWRCdW5kbGVDbGllbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0VFOTY2QTExMkZBRjU3MDA2QkNDMjQgLyog
QXR0YWNobWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdHRh
Y2htZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ2OTYsNiArNDY5Niw3
IEBACiAJCQkJMUFGRTQzNjQxOEI2QzA4MTAwOUM3QTQ4IC8qIFVJRGVsZWdhdGUuaCAqLywKIAkJ
CQkxQUZFNDM2MzE4QjZDMDgxMDA5QzdBNDggLyogVUlEZWxlZ2F0ZS5tbSAqLywKIAkJCQkxQUMw
MjczRTE5NjYyMkQ2MDBDMTJCNzUgLyogV2ViUGFnZVByb3h5Q29jb2EubW0gKi8sCisJCQkJN0NF
NEQyMTUxQTQ5MTQ4NDAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sQ29jb2EubW0gKi8sCiAJCQkJ
MUFEMDFCQ0IxOTA1RDU0OTAwQzlDNDVGIC8qIFdLUmVsb2FkRnJhbWVFcnJvclJlY292ZXJ5QXR0
ZW1wdGVyLmggKi8sCiAJCQkJMUFEMDFCQ0ExOTA1RDU0OTAwQzlDNDVGIC8qIFdLUmVsb2FkRnJh
bWVFcnJvclJlY292ZXJ5QXR0ZW1wdGVyLm1tICovLAogCQkJCTJEN0FBRkQyMThDODY0MDYwMEE3
QUNENCAvKiBXS1dlYlZpZXdDb250ZW50UHJvdmlkZXIuaCAqLywKQEAgLTU4NzEsMTAgKzU4NzIs
MTAgQEAKIAkJCQkxQTQ0Qjk1ODE2QjczRjhDMDBCN0JCRDggLyogU3RvcmFnZSAqLywKIAkJCQkx
QUFGMDg5RTE5MjY4MUFDMDBCNjM5MEMgLyogVXNlckNvbnRlbnQgKi8sCiAJCQkJMUE1M0MyQTMx
QTMyNTY5MTAwNEU4QzcwIC8qIFdlYnNpdGVEYXRhICovLAotCQkJCTFBRTUyRjhGMTkyMDFEQTcw
MEExRkEzNyAvKiBBUElDb250ZXh0Q29uZmlndXJhdGlvbi5jcHAgKi8sCi0JCQkJMUFFNTJGOTAx
OTIwMURBNzAwQTFGQTM3IC8qIEFQSUNvbnRleHRDb25maWd1cmF0aW9uLmggKi8sCiAJCQkJQkNG
NjlGQTExMTc2RDAxNDAwNDcxQTUyIC8qIEFQSU5hdmlnYXRpb25EYXRhLmNwcCAqLywKIAkJCQlC
Q0Y2OUZBMDExNzZEMDE0MDA0NzFBNTIgLyogQVBJTmF2aWdhdGlvbkRhdGEuaCAqLywKKwkJCQk3
Q0U0RDIxRDFBNDkxNENBMDBDN0YxNTIgLyogQVBJUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmNw
cCAqLywKKwkJCQk3Q0U0RDIxRTFBNDkxNENBMDBDN0YxNTIgLyogQVBJUHJvY2Vzc1Bvb2xDb25m
aWd1cmF0aW9uLmggKi8sCiAJCQkJNzVBOEQyREQxODdERTg3NDAwQzM5QzlFIC8qIEFQSVNlc3Np
b24uY3BwICovLAogCQkJCTc1QThEMkRFMTg3REU4NzQwMEMzOUM5RSAvKiBBUElTZXNzaW9uLmgg
Ki8sCiAJCQkJN0NEMTAyRDkxODY2NzcwNjAwRUQ0MjlEIC8qIEF1dG9Db3JyZWN0aW9uQ2FsbGJh
Y2suaCAqLywKQEAgLTU5MjEsOSArNTkyMiw2IEBACiAJCQkJM0Y4N0I5QkYxNTg5NDBEODAwOTBG
RjYyIC8qIFdlYkNvbG9yUGlja2VyLmggKi8sCiAJCQkJQkM0QTYyQTUxNDc0NEVDNjAwNkM2ODFB
IC8qIFdlYkNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwICovLAogCQkJCUJDNEE2MkE2MTQ3NDRF
QzYwMDZDNjgxQSAvKiBXZWJDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggKi8sCi0JCQkJQkNCOUUy
NDIxMTIwREFDQTAwQTEzN0UwIC8qIFdlYkNvbnRleHQuY3BwICovLAotCQkJCUJDQjlFMjQxMTEy
MERBQ0EwMEExMzdFMCAvKiBXZWJDb250ZXh0LmggKi8sCi0JCQkJQkNFRTdEMDkxMjg0NkFFRDAw
OTgyN0RBIC8qIFdlYkNvbnRleHQubWVzc2FnZXMuaW4gKi8sCiAJCQkJMzFBNTA1RjcxNjgwMDI1
NTAwQTkzMEVCIC8qIFdlYkNvbnRleHRDbGllbnQuY3BwICovLAogCQkJCTMxQTUwNUY4MTY4MDAy
NTUwMEE5MzBFQiAvKiBXZWJDb250ZXh0Q2xpZW50LmggKi8sCiAJCQkJQkMwOUI4RjYxNDc0NjBG
NzAwNUY1NjI1IC8qIFdlYkNvbnRleHRDb25uZWN0aW9uQ2xpZW50LmNwcCAqLywKQEAgLTU5OTQs
NiArNTk5Miw5IEBACiAJCQkJQkM1NzRFNjExMjY3RDA4MDAwNkYwRjEyIC8qIFdlYlBvcHVwTWVu
dVByb3h5LmggKi8sCiAJCQkJQkNENTk3RkUxMTJCNTdCRTAwRUM4QzIzIC8qIFdlYlByZWZlcmVu
Y2VzLmNwcCAqLywKIAkJCQlCQ0Q1OTdGRDExMkI1N0JFMDBFQzhDMjMgLyogV2ViUHJlZmVyZW5j
ZXMuaCAqLywKKwkJCQk3Q0U0RDIxNzFBNDkxNEEzMDBDN0YxNTIgLyogV2ViUHJvY2Vzc1Bvb2wu
Y3BwICovLAorCQkJCTdDRTREMjE4MUE0OTE0QTMwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbC5o
ICovLAorCQkJCTdDRTREMjE5MUE0OTE0QTMwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbC5tZXNz
YWdlcy5pbiAqLywKIAkJCQlCQzExMUIwRDExMkY1RTRGMDAzMzdCQUIgLyogV2ViUHJvY2Vzc1By
b3h5LmNwcCAqLywKIAkJCQlCQzAzMkRDRjEwRjQzODlGMDA1OEMxNUEgLyogV2ViUHJvY2Vzc1By
b3h5LmggKi8sCiAJCQkJQkNFRTdBQjMxMjgxNzA5NTAwOTgyN0RBIC8qIFdlYlByb2Nlc3NQcm94
eS5tZXNzYWdlcy5pbiAqLywKQEAgLTY3MTgsNyArNjcxOSw2IEBACiAJCQkJMkQ2Q0QxMTgxODkw
NThBNTAwRTVBNEEwIC8qIFZpZXdTbmFwc2hvdFN0b3JlLm1tICovLAogCQkJCTcyOEU4NkVGMTc5
NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovLAogCQkJCTcyOEU4NkYwMTc5
NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSAqLywKLQkJCQkxQTFDNjQ4NjEx
RjQxNUI3MDA1NTNDMTkgLyogV2ViQ29udGV4dE1hYy5tbSAqLywKIAkJCQk1MUFDQkI5RTEyN0E4
RjJDMDBEMjAzQjkgLyogV2ViQ29udGV4dE1lbnVQcm94eU1hYy5oICovLAogCQkJCTUxQUNCQjlG
MTI3QThGMkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLm1tICovLAogCQkJCUY2
RDYzMkJBMTMzRDE4MUIwMDc0M0Q3NyAvKiBXZWJDb29raWVNYW5hZ2VyUHJveHlNYWMubW0gKi8s
CkBAIC02OTYxLDggKzY5NjEsNiBAQAogCQkJCTUxMkUzNUY3MTMwQjY0MkUwMEFCRDE5QSAvKiBX
ZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLywKIAkJCQkxQTFGRUMx
QTE2MjdCNDU2MDA3MDBGNkQgLyogV2ViQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8s
CiAJCQkJMUExRkVDMUIxNjI3QjQ1NzAwNzAwRjZEIC8qIFdlYkNvbm5lY3Rpb25NZXNzYWdlcy5o
ICovLAotCQkJCUJDRUU3RDBCMTI4NDZGNjkwMDk4MjdEQSAvKiBXZWJDb250ZXh0TWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLywKLQkJCQlCQ0VFN0QwQzEyODQ2RjY5MDA5ODI3REEgLyogV2ViQ29udGV4
dE1lc3NhZ2VzLmggKi8sCiAJCQkJMzMwOTM0NDMxMzE1QjkyMjAwOTdBN0JDIC8qIFdlYkNvb2tp
ZU1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLAogCQkJCTMzMDkzNDQ0MTMxNUI5MjIwMDk3
QTdCQyAvKiBXZWJDb29raWVNYW5hZ2VyTWVzc2FnZXMuaCAqLywKIAkJCQkzMzA5MzQ0NTEzMTVC
OTIyMDA5N0E3QkMgLyogV2ViQ29va2llTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAq
LywKQEAgLTcwMTEsNiArNzAwOSw4IEBACiAJCQkJMUEwNDNGNjgxMjUxNEQ4QjAwRkZCRkI1IC8q
IFdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCAqLywKIAkJCQlCQzMwNjZCQzEyNUE0NDIx
MDBFNzEyNzggLyogV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJQkMzMDY2
QkQxMjVBNDQyMTAwRTcxMjc4IC8qIFdlYlByb2Nlc3NNZXNzYWdlcy5oICovLAorCQkJCTdDRTRE
MjI1MUE0OTE2QzIwMEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki8sCisJCQkJN0NFNEQyMjYxQTQ5MTZDMjAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sTWVzc2Fn
ZXMuaCAqLywKIAkJCQlCQ0VFN0FDQzEyODE3OTg4MDA5ODI3REEgLyogV2ViUHJvY2Vzc1Byb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQlCQ0VFN0FDRDEyODE3OTg4MDA5ODI3REEgLyog
V2ViUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCAqLywKIAkJCQkzMzM2NzY1MTEzMEM5RUNBMDA2QzlE
RTIgLyogV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovLApAQCAt
NzI0Miw3ICs3MjQyLDYgQEAKIAkJCQlBN0Q3OTJEODE3NjdDQ0EzMDA4ODFDQkUgLyogQWN0aXZp
dHlBc3NlcnRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNjQ2OTcwMTFEQkU2MDMwMDY0NTVC
MCAvKiBBUElBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzREQyMDYxMjVFNUEyRjAwNDUx
NUU2IC8qIEFQSUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFFNTJGOTIxOTIwMURBNzAw
QTFGQTM3IC8qIEFQSUNvbnRleHRDb25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTU3OEI4MzEyMDlFQ0VGMDBBMzdDNEEgLyogQVBJRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUY3RDM2QzExOERBNTEzRjAwRDlENjU5IC8qIEFQSURvd25sb2FkQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTZBNEE1RDEyMEEyQ0NEMDBDMDVCN0YgLyogQVBJRXJyb3IuaCBpbiBIZWFk
ZXJzICovLApAQCAtNzI4Miw2ICs3MjgxLDcgQEAKIAkJCQlCQ0VFOTY2RDExMkZBRjU3MDA2QkND
MjQgLyogQXR0YWNobWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFBMzE3MzIxMzRDRUE2QzAw
N0M5QTRGIC8qIEF0dHJpYnV0ZWRTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkY1ODk3
MTJBODgzODgwMDYyOTUzMCAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3Q0U0RDIyMDFBNDkxNENBMDBDN0YxNTIgLyogQVBJUHJvY2Vzc1Bvb2xD
b25maWd1cmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTJGNTg5OTEyQTg4Mzg4MDA2Mjk1
MzAgLyogQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MThFOEVGOTE2QjIwOTFDMDBFOTE0MjkgLyogQXV0aGVudGljYXRpb25NYW5hZ2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTJGNThBMzEyQTg4M0FEMDA2Mjk1MzAgLyogQXV0aGVudGljYXRp
b25NYW5hZ2VyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzQ1Myw2ICs3NDUzLDcgQEAK
IAkJCQkyRDg5NDlGMTE4MjA0NEY2MDBFODk4QUEgLyogUGxhdGZvcm1DQUxheWVyUmVtb3RlVGls
ZWRCYWNraW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0M0M0FCQjEyN0I5NURDMDAzMTdGMTYg
LyogUGxhdGZvcm1Qb3B1cE1lbnVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzg3ODBGQzEx
NjFDMkI4MDBDQzI3NjggLyogUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJN0NFNEQyMUIxQTQ5MTRBMzAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTZGQjdEMzExRTY1MUUyMDBEQjEzNzEgLyogUGx1Z2luLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMUE2N0UwRDE2NUIyQTk5MDA2Q0JBNjYgLyogUGx1Z0luQXV0b1N0
YXJ0UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOUZCQThEMTNGRjA0RTYwMERFRUQ2
NyAvKiBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtNzU4
MCw3ICs3NTgxLDYgQEAKIAkJCQlCQzRBNjI5MjE0NzMxMkJFMDA2QzY4MUEgLyogV2ViQ29ubmVj
dGlvbkNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUExRkVDMUQxNjI3QjQ1NzAwNzAwRjZE
IC8qIFdlYkNvbm5lY3Rpb25NZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM0QTYyQTgx
NDc0NEVDNzAwNkM2ODFBIC8qIFdlYkNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBpbiBIZWFkZXJz
ICovLAotCQkJCUJDQjlFMjQzMTEyMERBQ0EwMEExMzdFMCAvKiBXZWJDb250ZXh0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMUE1MDVGQTE2ODAwMjU1MDBBOTMwRUIgLyogV2ViQ29udGV4dENsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwOUI4RjkxNDc0NjBGNzAwNUY1NjI1IC8qIFdlYkNv
bnRleHRDb25uZWN0aW9uQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0RFMDU5QjExQ0RB
OEFFMDBFNDFBRjEgLyogV2ViQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTc1OTEsNyArNzU5MSw2IEBACiAJCQkJNTFBQ0JCODIxMjdBOEJBRDAwRDIwM0I5
IC8qIFdlYkNvbnRleHRNZW51UHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQUNCQkEwMTI3
QThGMkMwMEQyMDNCOSAvKiBXZWJDb250ZXh0TWVudVByb3h5TWFjLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0NCNzVDNjEyMDNBMUNFMDAyMjJEMUIgLyogV2ViQ29udGV4dE1lc3NhZ2VLaW5kcy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQkNFRTdEMEUxMjg0NkY2OTAwOTgyN0RBIC8qIFdlYkNvbnRl
eHRNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGNERFMjUxNjhGQTQ0ODAwQzk0QUZD
IC8qIFdlYkNvbnRleHRTdXBwbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0IwQjBEQzEy
MzA1QTI1MDBCMTM0MUUgLyogV2ViQ29udGV4dFVzZXJNZXNzYWdlQ29kZXJzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMzA5MzQ1MDEzMTVCOTREMDA5N0E3QkMgLyogV2ViQ29va2llTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCkBAIC03Njg0LDYgKzc2ODMsNyBAQAogCQkJCUJDN0I2MjUyMTJBNDND
OTYwMEQxNzRBNCAvKiBXZWJQYWdlR3JvdXBEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdC
NjIxNTEyQTQyMTlBMDBEMTc0QTQgLyogV2ViUGFnZUdyb3VwUHJveHkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTI5RDU1REYyMTYxQkY5RjEwMDMxQTJFMyAvKiBXZWJQYWdlR3JvdXBQcm94eU1lc3Nh
Z2VzLmggaW4gSGVhZGVycyAqLywKKwkJCQk3Q0U0RDIyODFBNDkxNkMyMDBDN0YxNTIgLyogV2Vi
UHJvY2Vzc1Bvb2xNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzBDRTcyQTExMjQ3RTcx
RDAwQkMwRUM0IC8qIFdlYlBhZ2VNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ1QzlE
MDYxOUM4MUQ4RjAwQjNDNUMxIC8qIFdlYlBhZ2VPdmVybGF5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzAzMkREMTEwRjQzODlGMDA1OEMxNUEgLyogV2ViUGFnZVByb3h5LmggaW4gSGVhZGVycyAq
LywKQEAgLTg5MzUsNyArODkzNSw2IEBACiAJCQkJMkQzNTNCMTIxOUY4MzA1RDAwMEVFQUNEIC8q
IEFjdGlvbk1lbnVIaXRUZXN0UmVzdWx0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdENzkyRDYx
NzY3Q0I2RTAwODgxQ0JFIC8qIEFjdGl2aXR5QXNzZXJ0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDNjQ2OTZGMTFEQkU2MDMwMDY0NTVCMCAvKiBBUElBcnJheS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQkxQUU1MkY5MTE5MjAxREE3MDBBMUZBMzcgLyogQVBJQ29udGV4dENvbmZpZ3VyYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBQjAzN0MxODVGOTlEODAwRURGNTAxIC8qIEFQ
SURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUExRUYxOTkxQTFENUI0MjAwMjMyMDBBIC8q
IEFQSURhdGFDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDNTc1NjEzMTI2RTAxMzgwMDZG
MEYxMiAvKiBBUElFcnJvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkwNzYsNiArOTA3NSw3IEBA
CiAJCQkJMUEyMzI5MDIxNjJDODY3MzAwRDgyRjdBIC8qIE1lc3NhZ2VEZWNvZGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBMjMyOEZFMTYyQzg2NkEwMEQ4MkY3QSAvKiBNZXNzYWdlRW5jb2Rl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTNFRUQwRTE2MUE1MzU0MDBBRUI0RjUgLyogTWVz
c2FnZVJlY2VpdmVyTWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDRTREMjI3MUE0OTE2QzIw
MEM3RjE1MiAvKiBXZWJQcm9jZXNzUG9vbE1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQUFCMDM3OTE4NUE3QzZBMDBFREY1MDEgLyogTWVzc2FnZVNlbmRlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDMEUzQUE3QjEyMDlFODM1MDBBNDlEMDEgLyogTW9kdWxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUMwRTNBQTdBMTIwOUU4MzAwMEE0OUQwMSAvKiBNb2R1bGVDRi5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTkyOTcsMTEgKzkyOTcsMTEgQEAKIAkJCQlCQzRBNjJBNzE0
NzQ0RUM3MDA2QzY4MUEgLyogV2ViQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzgyODM2NTE2QjM1NEY2MDBBMjc4RkUgLyogV2ViQ29udGVudFByb2Nlc3NN
YWluLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4MjgzOTkxNkI0OERDMDAwQTI3OEZFIC8qIFdl
YkNvbnRlbnRTZXJ2aWNlRW50cnlQb2ludC5tbSBpbiBTb3VyY2VzICovLAotCQkJCUJDQjlFMjQ0
MTEyMERBQ0EwMEExMzdFMCAvKiBXZWJDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdD
RTREMjFGMUE0OTE0Q0EwMEM3RjE1MiAvKiBBUElQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzFBNTA1RjkxNjgwMDI1NTAwQTkzMEVCIC8qIFdlYkNvbnRl
eHRDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwOUI4RjgxNDc0NjBGNzAwNUY1NjI1
IC8qIFdlYkNvbnRleHRDb25uZWN0aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
REUwNTlDMTFDREE4QUUwMEU0MUFGMSAvKiBXZWJDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGllbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMUExQzY0OUIxMUY0MTc0MjAwNTUzQzE5IC8qIFdlYkNv
bnRleHRNYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQk3Q0U0RDIxQTFBNDkxNEEzMDBDN0YxNTIg
LyogV2ViUHJvY2Vzc1Bvb2wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NzFCNUIxMjdDQjg5
RDAwRjc2MjMyIC8qIFdlYkNvbnRleHRNZW51LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMTEx
QTVCMTEyRjRGQkIwMDMzN0JBQiAvKiBXZWJDb250ZXh0TWVudUNsaWVudC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1MTAyMUU5QzEyQjE2Nzg4MDA1QzAzM0MgLyogV2ViQ29udGV4dE1lbnVDbGll
bnRNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTkzMDksNyArOTMwOSw2IEBACiAJCQkJNTEwRkJC
OUExMjg4Qzk1RTAwQUZGREY0IC8qIFdlYkNvbnRleHRNZW51SXRlbURhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTFBODRDRTMxMjdGMzg2QjAwQ0E2RUE0IC8qIFdlYkNvbnRleHRNZW51UHJv
eHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFBQ0JCQTExMjdBOEYyQzAwRDIwM0I5IC8qIFdl
YkNvbnRleHRNZW51UHJveHlNYWMubW0gaW4gU291cmNlcyAqLywKLQkJCQlCQ0VFN0QwRDEyODQ2
RjY5MDA5ODI3REEgLyogV2ViQ29udGV4dE1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzMzA5MzQ0RjEzMTVCOTREMDA5N0E3QkMgLyogV2ViQ29va2llTWFuYWdlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGNkE5MDgxMzEzM0MyMDUxMDA4MkMzRjQgLyogV2ViQ29va2ll
TWFuYWdlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTMzMDkzNDQ3MTMxNUI5MjIwMDk3QTdC
QyAvKiBXZWJDb29raWVNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtOTQ0Niw2ICs5NDQ1LDcgQEAKIAkJCQlCQzExMUIxMTExMkY1RTRGMDAzMzdCQUIgLyogV2Vi
UHJvY2Vzc1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEQTk0NEIwMTg4NEU5QkEwMEVE
ODZEQiAvKiBXZWJQcm9jZXNzUHJveHlJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQk1MUQxMzA1
ODEzODJGMTA1MDAzNTFFREQgLyogV2ViUHJvY2Vzc1Byb3h5TWFjLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJN0NFNEQyMTYxQTQ5MTQ4NDAwQzdGMTUyIC8qIFdlYlByb2Nlc3NQb29sQ29jb2EubW0g
aW4gU291cmNlcyAqLywKIAkJCQlCQ0VFN0FEMDEyODE3OTg4MDA5ODI3REEgLyogV2ViUHJvY2Vz
c1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMUUwOTMzMTg4
NjFEMzgwMEQyREM0OSAvKiBXZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTEyRjU4OUMxMkE4ODM4ODAwNjI5NTMwIC8qIFdlYlByb3RlY3Rpb25TcGFjZS5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJv
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcAkocmV2aXNpb24gMTc3NjkwKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQcm9jZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUg
IlVzZXJEYXRhLmgiCiAjaW5jbHVkZSAiV2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuaCIKICNp
bmNsdWRlICJXZWJDb25uZWN0aW9uVG9VSVByb2Nlc3MuaCIKLSNpbmNsdWRlICJXZWJDb250ZXh0
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKQEAgLTU5LDYgKzU4
LDcgQEAKICNpbmNsdWRlICJXZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKICNpbmNsdWRlICJXZWJQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2Vz
LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXIu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0xvY2suaD4KQEAgLTc5OSw3ICs3OTksNyBA
QCB2b2lkIFdlYlByb2Nlc3M6OnBsdWdJbkRpZFN0YXJ0RnJvbU9yaWdpCiAgICAgLy8gaW5jb3Jy
ZWN0IGZvciBhIGxpdHRsZSB3aGlsZS4KICAgICBtX3BsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2hl
cy5hZGQoc2Vzc2lvbklELCBIYXNoTWFwPHVuc2lnbmVkLCBkb3VibGU+KCkpLml0ZXJhdG9yLT52
YWx1ZS5zZXQocGx1Z0luT3JpZ2luSGFzaCwgY3VycmVudFRpbWUoKSArIDMwICogMTAwMCk7CiAK
LSAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb250ZXh0
OjpBZGRQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoKHBhZ2VPcmlnaW4sIHBsdWdJbk9yaWdpbkhh
c2gsIHNlc3Npb25JRCksIDApOworICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpBZGRQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoKHBh
Z2VPcmlnaW4sIHBsdWdJbk9yaWdpbkhhc2gsIHNlc3Npb25JRCksIDApOwogfQogCiB2b2lkIFdl
YlByb2Nlc3M6OmRpZEFkZFBsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2godW5zaWduZWQgcGx1Z0lu
T3JpZ2luSGFzaCwgZG91YmxlIGV4cGlyYXRpb25UaW1lLCBTZXNzaW9uSUQgc2Vzc2lvbklEKQpA
QCAtODQ3LDcgKzg0Nyw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6cGx1Z0luRGlkUmVjZWl2ZVVzZXJJ
bnQKICAgICBpZiAoaXQtPnZhbHVlIC0gY3VycmVudFRpbWUoKSA+IHBsdWdJbkF1dG9TdGFydEV4
cGlyYXRpb25UaW1lVXBkYXRlVGhyZXNob2xkKQogICAgICAgICByZXR1cm47CiAKLSAgICBwYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpQbHVnSW5E
aWRSZWNlaXZlVXNlckludGVyYWN0aW9uKHBsdWdJbk9yaWdpbkhhc2gsIHNlc3Npb25JRCksIDAp
OworICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nl
c3NQb29sOjpQbHVnSW5EaWRSZWNlaXZlVXNlckludGVyYWN0aW9uKHBsdWdJbk9yaWdpbkhhc2gs
IHNlc3Npb25JRCksIDApOwogfQogCiBzdGF0aWMgdm9pZCBmcm9tQ291bnRlZFNldFRvSGFzaE1h
cChUeXBlQ291bnRTZXQqIGNvdW50ZWRTZXQsIEhhc2hNYXA8U3RyaW5nLCB1aW50NjRfdD4mIG1h
cCkKQEAgLTkzOSw3ICs5MzksNyBAQCB2b2lkIFdlYlByb2Nlc3M6OmdldFdlYkNvcmVTdGF0aXN0
aWNzKHVpCiAgICAgLy8gR2V0IFdlYkNvcmUgbWVtb3J5IGNhY2hlIHN0YXRpc3RpY3MKICAgICBn
ZXRXZWJDb3JlTWVtb3J5Q2FjaGVTdGF0aXN0aWNzKGRhdGEud2ViQ29yZUNhY2hlU3RhdGlzdGlj
cyk7CiAgICAgCi0gICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViQ29udGV4dDo6RGlkR2V0U3RhdGlzdGljcyhkYXRhLCBjYWxsYmFja0lEKSwgMCk7CisgICAg
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6
OkRpZEdldFN0YXRpc3RpY3MoZGF0YSwgY2FsbGJhY2tJRCksIDApOwogfQogCiB2b2lkIFdlYlBy
b2Nlc3M6OmdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHMoKQpJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgJKHJldmlzaW9uIDE3NzY5MCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICsz
OCw3IEBACiAjaW5jbHVkZSAiVmlld1VwZGF0ZURpc3BhdGNoZXIuaCIKICNpbmNsdWRlICJWaXNp
dGVkTGlua1RhYmxlLmgiCiAjaW5jbHVkZSAiV2ViT3JpZ2luRGF0YU1hbmFnZXJTdXBwbGVtZW50
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSURIYXNoLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RpbWVyLmg+CiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0JKHJldmlzaW9u
IDE3NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMyArNDAsMTMgQEAKICNpbXBvcnQgIlBsdWdp
blZpZXcuaCIKICNpbXBvcnQgIldLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RNYWMuaCIKICNp
bXBvcnQgIldLUGFnZUZpbmRNYXRjaGVzQ2xpZW50LmgiCi0jaW1wb3J0ICJXZWJDb250ZXh0TWVz
c2FnZXMuaCIKICNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2ltcG9ydCAiV2Vi
RXZlbnQuaCIKICNpbXBvcnQgIldlYkV2ZW50Q29udmVyc2lvbi5oIgogI2ltcG9ydCAiV2ViUGFn
ZS5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbXBvcnQgIldlYlByb2Nl
c3MuaCIKKyNpbXBvcnQgIldlYlByb2Nlc3NQb29sTWVzc2FnZXMuaCIKICNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNPYmpl
Y3RSZWYuaD4KICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CkBAIC0xNjYy
LDggKzE2NjIsOCBAQCB2b2lkIFBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVib2FyZChOCiAg
ICAgICAgIHBhc3RlYm9hcmRUeXBlcy5hcHBlbmQodHlwZSk7CiAKICAgICB1aW50NjRfdCBuZXdD
aGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6U2V0UGFzdGVib2FyZFR5cGVz
KHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZXMpLAotICAgICAgICBNZXNzYWdlczo6V2Vi
Q29udGV4dDo6U2V0UGFzdGVib2FyZFR5cGVzOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOwor
ICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6U2V0UGFzdGVib2FyZFR5cGVzKHBhc3RlYm9h
cmROYW1lLCBwYXN0ZWJvYXJkVHlwZXMpLAorICAgICAgICBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bv
b2w6OlNldFBhc3RlYm9hcmRUeXBlczo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKIAogICAg
IGZvciAoTlNVSW50ZWdlciBpID0gMCwgY291bnQgPSBpdGVtcy5jb3VudDsgaSA8IGNvdW50OyAr
K2kpIHsKICAgICAgICAgTlNTdHJpbmcgKnR5cGUgPSBbdHlwZXMgb2JqZWN0QXRJbmRleDppXTsK
QEAgLTE2NzcsOCArMTY3Nyw4IEBAIHZvaWQgUERGUGx1Z2luOjp3cml0ZUl0ZW1zVG9QYXN0ZWJv
YXJkKE4KIAogICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOk5TU3RyaW5nUGJvYXJk
VHlwZV0gfHwgW3R5cGUgaXNFcXVhbFRvU3RyaW5nOk5TUGFzdGVib2FyZFR5cGVTdHJpbmddKSB7
CiAgICAgICAgICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHBsYWluVGV4dFN0cmluZyA9IGFkb3B0
TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGEgZW5jb2Rpbmc6TlNVVEY4U3Ry
aW5nRW5jb2RpbmddKTsKLSAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpTZXRQYXN0
ZWJvYXJkU3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgdHlwZSwgcGxhaW5UZXh0U3RyaW5n
LmdldCgpKSwKLSAgICAgICAgICAgICAgICBNZXNzYWdlczo6V2ViQ29udGV4dDo6U2V0UGFzdGVi
b2FyZFN0cmluZ0ZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgICAgICAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3lu
YyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKHBh
c3RlYm9hcmROYW1lLCB0eXBlLCBwbGFpblRleHRTdHJpbmcuZ2V0KCkpLAorICAgICAgICAgICAg
ICAgIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGU6
OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEo
ZGF0YSk7CiAKQEAgLTE2ODksOCArMTY4OSw4IEBAIHZvaWQgUERGUGx1Z2luOjp3cml0ZUl0ZW1z
VG9QYXN0ZWJvYXJkKE4KICAgICAgICAgICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1l
bW9yeSA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGJ1ZmZlci0+c2l6ZSgpKTsKICAgICAgICAgICAg
IG1lbWNweShzaGFyZWRNZW1vcnktPmRhdGEoKSwgYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6
ZSgpKTsKICAgICAgICAgICAgIHNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hh
cmVkTWVtb3J5OjpSZWFkT25seSk7Ci0gICAgICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6
U2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUocGFzdGVib2FyZE5hbWUsIHR5cGUsIGhhbmRsZSwg
YnVmZmVyLT5zaXplKCkpLAotICAgICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpT
ZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKKyAg
ICAgICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6U2V0UGFzdGVib2FyZEJ1ZmZlckZv
clR5cGUocGFzdGVib2FyZE5hbWUsIHR5cGUsIGhhbmRsZSwgYnVmZmVyLT5zaXplKCkpLAorICAg
ICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6U2V0UGFzdGVib2FyZEJ1ZmZl
ckZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CiAgICAgICAgIH0KICAgICB9CiB9
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMTc3Njkw
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRl
ICJQbHVnaW5WaWV3LmgiCiAjaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCiAjaW5jbHVkZSAi
V2ViQmFja0ZvcndhcmRMaXN0UHJveHkuaCIKLSNpbmNsdWRlICJXZWJDb250ZXh0TWVzc2FnZXMu
aCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJEb2N1
bWVudExvYWRlci5oIgogI2luY2x1ZGUgIldlYkVycm9ycy5oIgpAQCAtNTEsNiArNTAsNyBAQAog
I2luY2x1ZGUgIldlYlBhZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbE1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTT2JqZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DZXJ0aWZpY2F0ZUluZm8u
aD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxh
dGZvcm1TdHJhdGVnaWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAJKHJldmlzaW9uIDE3
NzY5MCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxh
dGZvcm1TdHJhdGVnaWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2lu
Y2x1ZGUgIk5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiUGx1Z2lu
SW5mb1N0b3JlLmgiCiAjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIuaCIKLSNpbmNsdWRlICJXZWJD
b250ZXh0TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJDb29raWVNYW5hZ2VyLmgiCiAjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCkBAIC00
Miw2ICs0MSw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogI2luY2x1ZGUgIldlYlBhc3RlYm9h
cmRPdmVycmlkZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Bvb2xNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eU1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UuaD4KQEAgLTMzOSw4ICszMzksNyBAQCB2b2lkIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6Z2V0VHlwZXMoVmVjCiAgICAgaWYgKCF0eXBlcy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpHZXRQYXN0ZWJvYXJkVHlw
ZXMocGFzdGVib2FyZE5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTWVzc2FnZXM6OldlYkNvbnRleHQ6OkdldFBhc3RlYm9hcmRUeXBlczo6UmVw
bHkodHlwZXMpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkdldFBhc3RlYm9h
cmRUeXBlcyhwYXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6R2V0UGFz
dGVib2FyZFR5cGVzOjpSZXBseSh0eXBlcyksIDApOwogfQogCiBQYXNzUmVmUHRyPFdlYkNvcmU6
OlNoYXJlZEJ1ZmZlcj4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpidWZmZXJGb3JUeXBlKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCkBA
IC0zNTMsOCArMzUyLDcgQEAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IFdlYlBs
YQogICAgIC8vIEZhbGxiYWNrIHRvIG1lc3NhZ2luZyB0aGUgVUkgcHJvY2VzcyBmb3IgbmF0aXZl
IHBhc3RlYm9hcmQgY29udGVudC4KICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CiAg
ICAgdWludDY0X3Qgc2l6ZSA9IDA7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYkNvbnRleHQ6OkdldFBhc3Rl
Ym9hcmRCdWZmZXJGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlczo6V2Vi
Q29udGV4dDo6R2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGU6OlJlcGx5KGhhbmRsZSwgc2l6ZSks
IDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6R2V0UGFzdGVib2FyZEJ1ZmZlckZv
clR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlByb2Nl
c3NQb29sOjpHZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZTo6UmVwbHkoaGFuZGxlLCBzaXplKSwg
MCk7CiAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVm
UHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjpjcmVh
dGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKQEAgLTM2Myw3MSArMzYxLDYyIEBA
IFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBXZWJQbGEKIAogdm9pZCBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmdldFBhdGhuYW1lc0ZvclR5cGUoVmVjdG9yPFN0cmluZz4mIHBhdGhu
YW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6R2V0UGFzdGVib2FyZFBhdGhu
YW1lc0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJDb250ZXh0
OjpHZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZTo6UmVwbHkocGF0aG5hbWVzKSwgMCk7Cisg
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpHZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlw
ZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bv
b2w6OkdldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlOjpSZXBseShwYXRobmFtZXMpLCAwKTsK
IH0KIAogU3RyaW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c3RyaW5nRm9yVHlwZShjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewog
ICAgIFN0cmluZyB2YWx1ZTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6R2V0UGFzdGVib2Fy
ZFN0cmluZ0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJDb250
ZXh0OjpHZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZTo6UmVwbHkodmFsdWUpLCAwKTsKKyAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkdldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKHBhc3Rl
Ym9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6R2V0
UGFzdGVib2FyZFN0cmluZ0ZvclR5cGU6OlJlcGx5KHZhbHVlKSwgMCk7CiAgICAgcmV0dXJuIHZh
bHVlOwogfQogCiBsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29weShjb25zdCBTdHJpbmcm
IGZyb21QYXN0ZWJvYXJkLCBjb25zdCBTdHJpbmcmIHRvUGFzdGVib2FyZCkKIHsKICAgICB1aW50
NjRfdCBuZXdDaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6UGFzdGVib2Fy
ZENvcHkoZnJvbVBhc3RlYm9hcmQsIHRvUGFzdGVib2FyZCksCi0gICAgICAgIE1lc3NhZ2VzOjpX
ZWJDb250ZXh0OjpQYXN0ZWJvYXJkQ29weTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3lu
YyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlBhc3RlYm9hcmRDb3B5KGZyb21QYXN0ZWJvYXJk
LCB0b1Bhc3RlYm9hcmQpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlBhc3RlYm9hcmRDb3B5
OjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOwogICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsK
IH0KIAogbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNoYW5nZUNvdW50KGNvbnN0IFdURjo6
U3RyaW5nICZwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICB1aW50NjRfdCBjaGFuZ2VDb3VudDsKLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3lu
YyhNZXNzYWdlczo6V2ViQ29udGV4dDo6R2V0UGFzdGVib2FyZENoYW5nZUNvdW50KHBhc3RlYm9h
cmROYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQ6OlJlcGx5KGNo
YW5nZUNvdW50KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpHZXRQYXN0ZWJv
YXJkQ2hhbmdlQ291bnQocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6
OkdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudDo6UmVwbHkoY2hhbmdlQ291bnQpLCAwKTsKICAgICBy
ZXR1cm4gY2hhbmdlQ291bnQ7CiB9CiAKIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnVu
aXF1ZU5hbWUoKQogewogICAgIFN0cmluZyBwYXN0ZWJvYXJkTmFtZTsKLSAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViQ29udGV4dDo6R2V0UGFzdGVib2FyZFVuaXF1ZU5hbWUoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpHZXRQ
YXN0ZWJvYXJkVW5pcXVlTmFtZTo6UmVwbHkocGFzdGVib2FyZE5hbWUpLCAwKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkdldFBhc3RlYm9hcmRVbmlxdWVOYW1lKCksIE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzUG9vbDo6R2V0UGFzdGVib2FyZFVuaXF1ZU5hbWU6OlJlcGx5KHBhc3RlYm9h
cmROYW1lKSwgMCk7CiAgICAgcmV0dXJuIHBhc3RlYm9hcmROYW1lOwogfQogCiBDb2xvciBXZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXM6OmNvbG9yKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7
CiAgICAgQ29sb3IgY29sb3I7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYkNvbnRleHQ6OkdldFBhc3RlYm9h
cmRDb2xvcihwYXN0ZWJvYXJkTmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBNZXNzYWdlczo6V2ViQ29udGV4dDo6R2V0UGFzdGVib2FyZENvbG9y
OjpSZXBseShjb2xvciksIDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6R2V0UGFz
dGVib2FyZENvbG9yKHBhc3RlYm9hcmROYW1lKSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpH
ZXRQYXN0ZWJvYXJkQ29sb3I6OlJlcGx5KGNvbG9yKSwgMCk7CiAgICAgcmV0dXJuIGNvbG9yOwog
fQogCiBVUkwgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp1cmwoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkKIHsKICAgICBTdHJpbmcgdXJsU3RyaW5nOwotICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJDb250
ZXh0OjpHZXRQYXN0ZWJvYXJkVVJMKHBhc3RlYm9hcmROYW1lKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpHZXRQ
YXN0ZWJvYXJkVVJMOjpSZXBseSh1cmxTdHJpbmcpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJv
Y2Vzc1Bvb2w6OkdldFBhc3RlYm9hcmRVUkwocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2Vi
UHJvY2Vzc1Bvb2w6OkdldFBhc3RlYm9hcmRVUkw6OlJlcGx5KHVybFN0cmluZyksIDApOwogICAg
IHJldHVybiBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcpOwogfQogCiBsb25nIFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6YWRkVHlwZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9h
cmRUeXBlcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICB1aW50NjRfdCBu
ZXdDaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6QWRkUGFzdGVib2FyZFR5
cGVzKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZXMpLAotICAgICAgICBNZXNzYWdlczo6
V2ViQ29udGV4dDo6QWRkUGFzdGVib2FyZFR5cGVzOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDAp
OworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6QWRkUGFzdGVib2FyZFR5cGVzKHBhc3Rl
Ym9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZXMpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkFk
ZFBhc3RlYm9hcmRUeXBlczo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICByZXR1cm4g
bmV3Q2hhbmdlQ291bnQ7CiB9CiAKIGxvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRUeXBl
cyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lKQogewogICAgIHVpbnQ2NF90IG5ld0NoYW5nZUNvdW50OwotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5hbWUsIHBhc3Rl
Ym9hcmRUeXBlcyksCi0gICAgICAgIE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJk
VHlwZXM6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVk
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nl
c3NQb29sOjpTZXRQYXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBl
cyksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6U2V0UGFzdGVib2FyZFR5cGVzOjpSZXBseShu
ZXdDaGFuZ2VDb3VudCksIDApOwogICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsKIH0KIApAQCAt
NDQ0LDQ4ICs0MzMsNDQgQEAgbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldEJ1ZmZlckZv
cgogICAgICAgICB9CiAgICAgfQogICAgIHVpbnQ2NF90IG5ld0NoYW5nZUNvdW50OwotICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpXZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJk
TmFtZSwgcGFzdGVib2FyZFR5cGUsIGhhbmRsZSwgYnVmZmVyID8gYnVmZmVyLT5zaXplKCkgOiAw
KSwKLSAgICAgICAgTWVzc2FnZXM6OldlYkNvbnRleHQ6OlNldFBhc3RlYm9hcmRCdWZmZXJGb3JU
eXBlOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
UG9vbDo6U2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9h
cmRUeXBlLCBoYW5kbGUsIGJ1ZmZlciA/IGJ1ZmZlci0+c2l6ZSgpIDogMCksIE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzUG9vbDo6U2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGU6OlJlcGx5KG5ld0NoYW5n
ZUNvdW50KSwgMCk7CiAgICAgcmV0dXJuIG5ld0NoYW5nZUNvdW50OwogfQogCiBsb25nIFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6c2V0UGF0aG5hbWVzRm9yVHlwZShjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKQogewogICAgIHVpbnQ2NF90IG5ld0NoYW5nZUNvdW50OwotICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpXZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShwYXN0ZWJv
YXJkTmFtZSwgcGFzdGVib2FyZFR5cGUsIHBhdGhuYW1lcyksCi0gICAgICAgIE1lc3NhZ2VzOjpX
ZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdl
Q291bnQpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlNldFBhc3RlYm9hcmRQ
YXRobmFtZXNGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZSwgcGF0aG5hbWVz
KSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpTZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlw
ZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICByZXR1cm4gbmV3Q2hhbmdlQ291bnQ7
CiB9CiAKIGxvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRTdHJpbmdGb3JUeXBlKGNvbnN0
IFN0cmluZyYgc3RyaW5nLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lKQogewogICAgIHVpbnQ2NF90IG5ld0NoYW5nZUNvdW50OwotICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpTZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShwYXN0ZWJv
YXJkTmFtZSwgcGFzdGVib2FyZFR5cGUsIHN0cmluZyksCi0gICAgICAgIE1lc3NhZ2VzOjpXZWJD
b250ZXh0OjpTZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQp
LCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OlNldFBhc3RlYm9hcmRTdHJpbmdG
b3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZSwgc3RyaW5nKSwgTWVzc2FnZXM6
OldlYlByb2Nlc3NQb29sOjpTZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZTo6UmVwbHkobmV3Q2hh
bmdlQ291bnQpLCAwKTsKICAgICByZXR1cm4gbmV3Q2hhbmdlQ291bnQ7CiB9CiAKICNpZiBQTEFU
Rk9STShJT1MpCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6d3JpdGVUb1Bhc3RlYm9hcmQo
Y29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpCiB7Ci0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViQ29udGV4dDo6V3JpdGVXZWJDb250ZW50VG9QYXN0ZWJvYXJkKGNvbnRlbnQpLCAwKTsK
KyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6V3JpdGVXZWJDb250ZW50VG9QYXN0ZWJvYXJkKGNv
bnRlbnQpLCAwKTsKIH0KIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OndyaXRlVG9QYXN0
ZWJvYXJkKGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSYgaW1hZ2UpCiB7Ci0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViQ29udGV4dDo6V3JpdGVJbWFnZVRvUGFzdGVib2FyZChpbWFnZSksIDApOworICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlByb2Nlc3NQb29sOjpXcml0ZUltYWdlVG9QYXN0ZWJvYXJkKGltYWdlKSwgMCk7CiB9
CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvUGFzdGVib2FyZChjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViQ29udGV4dDo6V3JpdGVTdHJpbmdUb1Bhc3RlYm9hcmQocGFzdGVib2FyZFR5cGUsIHRleHQp
LCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6V3JpdGVTdHJpbmdUb1Bhc3RlYm9hcmQo
cGFzdGVib2FyZFR5cGUsIHRleHQpLCAwKTsKIH0KIAogaW50IFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKQogewogICAgIHVpbnQ2NF90IGl0ZW1zQ291bnQ7
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYkNvbnRleHQ6OkdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCksCi0g
ICAgICAgIE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpHZXRQYXN0ZWJvYXJkSXRlbXNDb3VudDo6UmVw
bHkoaXRlbXNDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6R2V0UGFz
dGVib2FyZEl0ZW1zQ291bnQoKSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpHZXRQYXN0ZWJv
YXJkSXRlbXNDb3VudDo6UmVwbHkoaXRlbXNDb3VudCksIDApOwogICAgIHJldHVybiBpdGVtc0Nv
dW50OwogfQogCkBAIC00OTMsOCArNDc4LDcgQEAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRC
dWZmZXI+IFdlYlBsYQogewogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKICAgICB1
aW50NjRfdCBzaXplID0gMDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViQ29udGV4dDo6UmVhZEJ1ZmZlckZy
b21QYXN0ZWJvYXJkKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSksCi0gICAgICAgIE1lc3NhZ2VzOjpX
ZWJDb250ZXh0OjpSZWFkQnVmZmVyRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KGhhbmRsZSwgc2l6ZSks
IDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6UmVhZEJ1ZmZlckZyb21QYXN0ZWJv
YXJkKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6UmVh
ZEJ1ZmZlckZyb21QYXN0ZWJvYXJkOjpSZXBseShoYW5kbGUsIHNpemUpLCAwKTsKICAgICBpZiAo
aGFuZGxlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8U2hhcmVkTWVt
b3J5PiBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFNo
YXJlZE1lbW9yeTo6UmVhZE9ubHkpOwpAQCAtNTA0LDI0ICs0ODgsMjEgQEAgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpTaGFyZWRCdWZmZXI+IFdlYlBsYQogV2ViQ29yZTo6VVJMIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6cmVhZFVSTEZyb21QYXN0ZWJvYXJkKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkVHlwZSkKIHsKICAgICBTdHJpbmcgdXJsU3RyaW5nOwotICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJDb250ZXh0OjpSZWFkVVJMRnJvbVBhc3RlYm9hcmQoaW5kZXgsIHBhc3RlYm9hcmRUeXBlKSwK
LSAgICAgICAgTWVzc2FnZXM6OldlYkNvbnRleHQ6OlJlYWRVUkxGcm9tUGFzdGVib2FyZDo6UmVw
bHkodXJsU3RyaW5nKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpSZWFkVVJM
RnJvbVBhc3RlYm9hcmQoaW5kZXgsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlByb2Nl
c3NQb29sOjpSZWFkVVJMRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KHVybFN0cmluZyksIDApOwogICAg
IHJldHVybiBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcpOwogfQogCiBTdHJpbmcgV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoaW50IGluZGV4LCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQogewogICAgIFN0cmluZyB2YWx1ZTsKLSAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViQ29udGV4dDo6UmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKGluZGV4LCBwYXN0
ZWJvYXJkVHlwZSksCi0gICAgICAgIE1lc3NhZ2VzOjpXZWJDb250ZXh0OjpSZWFkU3RyaW5nRnJv
bVBhc3RlYm9hcmQ6OlJlcGx5KHZhbHVlKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQ
b29sOjpSZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoaW5kZXgsIHBhc3RlYm9hcmRUeXBlKSwgTWVz
c2FnZXM6OldlYlByb2Nlc3NQb29sOjpSZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KHZh
bHVlKSwgMCk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCiBsb25nIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6Y2hhbmdlQ291bnQoKQogewogICAgIHVpbnQ2NF90IGNoYW5nZUNvdW50OwotICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpXZWJDb250ZXh0OjpHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQoU3RyaW5nKCkpLAot
ICAgICAgICBNZXNzYWdlczo6V2ViQ29udGV4dDo6R2V0UGFzdGVib2FyZENoYW5nZUNvdW50OjpS
ZXBseShjaGFuZ2VDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6R2V0
UGFzdGVib2FyZENoYW5nZUNvdW50KFN0cmluZygpKSwgTWVzc2FnZXM6OldlYlByb2Nlc3NQb29s
OjpHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQ6OlJlcGx5KGNoYW5nZUNvdW50KSwgMCk7CiAgICAg
cmV0dXJuIGNoYW5nZUNvdW50OwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxNzc2OTApCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYz
LDcgKzYzLDYgQEAKICNpbmNsdWRlICJXZWJDb2xvckNob29zZXIuaCIKICNpbmNsdWRlICJXZWJD
b250ZXh0TWVudS5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51Q2xpZW50LmgiCi0jaW5jbHVk
ZSAiV2ViQ29udGV4dE1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCiAjaW5jbHVkZSAiV2ViRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCIKICNpbmNsdWRlICJX
ZWJEb2N1bWVudExvYWRlci5oIgpAQCAtOTYsNiArOTUsNyBAQAogI2luY2x1ZGUgIldlYlByZWZl
cmVuY2VzS2V5cy5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzU3RvcmUuaCIKICNpbmNsdWRl
ICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2xNZXNzYWdlcy5oIgogI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvZ3Jlc3NU
cmFja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmgi
Cg==
</data>
<flag name="review"
          id="268599"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>