<?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>167601</bug_id>
          
          <creation_ts>2017-01-30 13:23:12 -0800</creation_ts>
          <short_desc>JSDOMBinding is too big. Split it up!</short_desc>
          <delta_ts>2017-02-01 03:09:08 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>joepeck</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1271388</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-30 13:23:12 -0800</bug_when>
    <thetext>JSDOMBinding is too big. Split it up!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271390</commentid>
    <comment_count>1</comment_count>
      <attachid>300138</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-30 13:31:52 -0800</bug_when>
    <thetext>Created attachment 300138
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271391</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-30 13:34:53 -0800</bug_when>
    <thetext>Attachment 300138 did not pass style-queue:


ERROR: Source/WebCore/bindings/js/JSDOMBindingSecurity.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/js/JSDOMWrapperCache.h:184:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/js/JSDOMWrapperCache.h:195:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 45 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>1271449</commentid>
    <comment_count>3</comment_count>
      <attachid>300154</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-30 15:41:43 -0800</bug_when>
    <thetext>Created attachment 300154
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271450</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-30 15:43:52 -0800</bug_when>
    <thetext>Attachment 300154 did not pass style-queue:


ERROR: Source/WebCore/bindings/js/JSDOMBindingSecurity.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/js/JSDOMWrapperCache.h:184:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/js/JSDOMWrapperCache.h:195:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 47 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>1271465</commentid>
    <comment_count>5</comment_count>
      <attachid>300156</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-30 16:13:48 -0800</bug_when>
    <thetext>Created attachment 300156
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271467</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-30 16:16:40 -0800</bug_when>
    <thetext>Attachment 300156 did not pass style-queue:


ERROR: Source/WebCore/bindings/js/JSDOMBindingSecurity.h:44:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/bindings/js/JSDOMWrapperCache.h:184:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/js/JSDOMWrapperCache.h:195:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 49 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>1271500</commentid>
    <comment_count>7</comment_count>
      <attachid>300166</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-30 17:26:06 -0800</bug_when>
    <thetext>Created attachment 300166
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271504</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-30 17:27:30 -0800</bug_when>
    <thetext>Attachment 300166 did not pass style-queue:


ERROR: Source/WebCore/bindings/js/JSDOMWrapperCache.h:184:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WebCore/bindings/js/JSDOMWrapperCache.h:195:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 80 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>1271554</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-01-30 19:38:58 -0800</bug_when>
    <thetext>Committed r211403: &lt;http://trac.webkit.org/changeset/211403&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271579</commentid>
    <comment_count>10</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-01-30 22:24:59 -0800</bug_when>
    <thetext>Awesome!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271637</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2017-01-31 02:33:58 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Committed r211403: &lt;http://trac.webkit.org/changeset/211403&gt;

It broke the Apple Mac cmake build, see https://build.webkit.org/builders/Apple%20El%20Capitan%20CMake%20Debug%20%28Build%29/builds/11660 for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272100</commentid>
    <comment_count>12</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2017-02-01 03:09:08 -0800</bug_when>
    <thetext>buildfix landed in https://trac.webkit.org/changeset/211476</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300138</attachid>
            <date>2017-01-30 13:31:52 -0800</date>
            <delta_ts>2017-01-30 15:41:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167601-20170130132942.patch</filename>
            <type>text/plain</type>
            <size>716833</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBACisyMDE3LTAxLTMwICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSlNET01CaW5kaW5nIGlzIHRvbyBiaWcu
IFNwbGl0IGl0IHVwIQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY3NjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU3BsaXRzIEpTRE9NQmluZGluZy5oL2NwcCB1cCBhIGJpdCBieSBzcGxpdHRpbmcgb3V0
OgorICAgICAgICAtIEpTRE9NQmluZGluZ0NhbGxlci5oCisgICAgICAgIC0gSlNET01CaW5kaW5n
U2VjdXJpdHkuaC9jcHAKKyAgICAgICAgLSBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgvY3BwCisg
ICAgICAgIC0gSlNET01XcmFwcGVyQ2FjaGUuaC9jcHAKKworICAgICAgICBBbHNvOgorICAgICAg
ICAtIE1vdmVzIGFsbCBjb25zdHJ1Y3RvciBvYmplY3RzIHRvIEpTRE9NQ29uc3RydWN0b3IuaC9j
cHAsICAKKyAgICAgICAgLSBNb3ZlcyBzcGVjaWFsIERPTVdpbmRvdyBhY2Nlc3NvcnMgdG8gSlNE
T01XaW5kb3dCYXNlLgorICAgICAgICAtIERlbGV0ZXMgdW51c2VkIENhbGxiYWNrRnVuY3Rpb24u
aC9jcHAKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmg6IFJlbW92
ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHA6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nQ2FsbGVyLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oLgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcC4KKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUNvbnN0cnVjdG9yLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmNwcC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnN0
cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0Lmg6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAuCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbGVyRE9NV2luZG93KTog
TW92ZWQgZnJvbSBKU0RPTUJpbmRpbmcuaAorICAgICAgICAoV2ViQ29yZTo6YWN0aXZlRE9NV2lu
ZG93KTogTW92ZWQgZnJvbSBKU0RPTUJpbmRpbmcuaAorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RE
T01XaW5kb3cpOiBNb3ZlZCBmcm9tIEpTRE9NQmluZGluZy5oCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01XaW5kb3dCYXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oLgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXRDdXN0b20uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxFbGVt
ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFja0N1c3RvbS5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNYUGF0aE5TUmVzb2x2ZXJDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVk
dWxlZEFjdGlvbi5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdEdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvU3RydWN0dXJl
ZENsb25lLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVD
YWxsV2l0aCk6CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6CisgICAgICAgIChH
ZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250ZW50KToKKyAgICAgICAgKE5hdGl2ZVRv
SlNWYWx1ZSk6CisgICAgICAgICogYnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOgorICAg
ICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwOgorICAgICAgICAqIGh0bWwvSFRN
TFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgICogaW5z
cGVjdG9yL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcDoKKwogMjAxNy0wMS0zMCAgTXlsZXMg
Qy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIENvcnJlY3Qgc3Bh
Y2luZyByZWdyZXNzaW9uIG9uIGludGVyLWVsZW1lbnQgY29tcGxleCBwYXRoIHNoYXBpbmcgb24g
c29tZSBmb250cwpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxMTM4NCkKKysr
IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDY5LDcg
KzEwNjksNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBiaW5kaW5ncy9qcy9DYWNoZWRN
b2R1bGVTY3JpcHRMb2FkZXIuY3BwCiAgICAgYmluZGluZ3MvanMvQ2FjaGVkU2NyaXB0RmV0Y2hl
ci5jcHAKLSAgICBiaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmNwcAogICAgIGJpbmRpbmdz
L2pzL0NvbW1vblZNLmNwcAogICAgIGJpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHAKICAg
ICBiaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCkBAIC0xMTAwLDYgKzEwOTksOSBAQCBzZXQo
V2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHAK
ICAgICBiaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAKICAgICBiaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuY3BwCisgICAgYmluZGluZ3MvanMvSlNET01CaW5kaW5nU2VjdXJp
dHkuY3BwCisgICAgYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvci5jcHAKKyAgICBiaW5kaW5n
cy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRE9NR2xv
YmFsT2JqZWN0LmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0VGFzay5jcHAK
ICAgICBiaW5kaW5ncy9qcy9KU0RPTVByb21pc2UuY3BwCkBAIC0xMTA5LDYgKzExMTEsNyBAQCBz
ZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVz
LmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCiAgICAgYmluZGluZ3Mv
anMvSlNET01XcmFwcGVyLmNwcAorICAgIGJpbmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmNw
cAogICAgIGJpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMv
SlNEb2N1bWVudEZyYWdtZW50Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRWxlbWVudEN1
c3RvbS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RGF0YWJhc2UuY3BwCShyZXZpc2lvbiAyMTEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBA
QAogI2luY2x1ZGUgIkRhdGFiYXNlVGhyZWFkLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2Vy
LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAj
aW5jbHVkZSAiSlNET01XaW5kb3cuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
U1FMRXJyb3IuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjgzNyw2
ICsyODM3LDE0IEBACiAJCTdDM0U1MTBCMThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVy
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzRTUx
MDkxOERGOEYzNTAwQzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIubW0gKi87IH07CiAJCTdDM0YwMUMx
MUM4RTVBQkEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNGMDFDMDFDOEU1QUIxMDBBREQ5NjIg
LyogVXNlckNvbnRlbnRQcm92aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdDM0YwMUMyMUM4RTVBQzIwMEFERDk2MiAvKiBVc2VyQ29udGVu
dFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDM0YwMUJGMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVyLmNwcCAq
LzsgfTsKKwkJN0M0NUM5Q0YxRTNFRkRGNzAwQUFCNTU4IC8qIEpTRE9NQmluZGluZ1NlY3VyaXR5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDVD
OUNBMUUzRThEMkUwMEFBQjU1OCAvKiBKU0RPTUJpbmRpbmdTZWN1cml0eS5jcHAgKi87IH07CisJ
CTdDNDVDOUQwMUUzRUZERkIwMEFBQjU1OCAvKiBKU0RPTVdyYXBwZXJDYWNoZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ1QzlDQjFFM0U4RTQ5
MDBBQUI1NTggLyogSlNET01XcmFwcGVyQ2FjaGUuY3BwICovOyB9OworCQk3QzQ1QzlEMTFFM0VG
RTA1MDBBQUI1NTggLyogSlNET01Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ1QzlDRDFFM0U5MDBCMDBBQUI1NTggLyogSlNE
T01Db25zdHJ1Y3Rvci5jcHAgKi87IH07CisJCTdDNDVDOUQyMUUzRUZFMDgwMEFBQjU1OCAvKiBK
U0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDNDVDOUNDMUUzRThGMDgwMEFBQjU1OCAvKiBKU0RPTUV4Y2VwdGlv
bkhhbmRsaW5nLmNwcCAqLzsgfTsKKwkJN0M0NUM5RDMxRTNGQ0JENzAwQUFCNTU4IC8qIEpTRE9N
V3JhcHBlckNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QzQ1QzlDODFFM0U4QjUxMDBBQUI1NTggLyogSlNET01XcmFwcGVyQ2FjaGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QzQ1QzlENDFF
M0ZDQkRGMDBBQUI1NTggLyogSlNET01CaW5kaW5nU2VjdXJpdHkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDVDOUM5MUUzRThDRDcwMEFBQjU1OCAv
KiBKU0RPTUJpbmRpbmdTZWN1cml0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTdDNDVDOUQ1MUUzRkNCRTQwMEFBQjU1OCAvKiBKU0RPTUJpbmRp
bmdDYWxsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDNDVDOUM2MUUzRThBQkEwMEFBQjU1OCAvKiBKU0RPTUJpbmRpbmdDYWxsZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QzQ1QzlENjFFM0ZD
QkY4MDBBQUI1NTggLyogSlNET01FeGNlcHRpb25IYW5kbGluZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0NUM5QzcxRTNFOEFGRjAwQUFCNTU4IC8q
IEpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3QzQ4QTZEMDE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFt
ZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDNDhBNkNFMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuY3BwICovOyB9Owog
CQk3QzQ4QTZEMTE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ4QTZDRjE5MUM5RDY1MDAw
MjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmggKi87IH07CiAJCTdDNEM5NkRDMUFENDQ4MzUwMDM2
NUE1MCAvKiBKU1JlYWRhYmxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDdDNEM5NkQ4MUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxl
U3RyZWFtLmNwcCAqLzsgfTsKQEAgLTQ1NjIsMTAgKzQ1NzAsOCBAQAogCQlCMTBCNjk4MDE0MEMx
NzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIxMEI2OTdEMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tl
bi5oICovOyB9OwogCQlCMTBCNjk4MTE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxMEI2
OTdFMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbml6ZXIuY3BwICovOyB9OwogCQlCMTBC
Njk4MjE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTBCNjk3RjE0MEMxNzQwMDBCQzFDMjYg
LyogV2ViVlRUVG9rZW5pemVyLmggKi87IH07Ci0JCUIxODI3NDkzMTM0Q0E0QzEwMEI5OEMyRCAv
KiBDYWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEIxODI3NDkyMTM0Q0E0QzEwMEI5OEMyRCAvKiBDYWxsYmFja0Z1bmN0aW9u
LmNwcCAqLzsgfTsKIAkJQjFBRDRFNzMxM0ExMkE0NjAwODQ2QjI3IC8qIFRleHRUcmFja0xvYWRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMUFE
NEU3MTEzQTEyQTQ2MDA4NDZCMjcgLyogVGV4dFRyYWNrTG9hZGVyLmNwcCAqLzsgfTsKIAkJQjFB
RDRFNzQxM0ExMkE0NjAwODQ2QjI3IC8qIFRleHRUcmFja0xvYWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFBRDRFNzIxM0ExMkE0NjAwODQ2QjI3
IC8qIFRleHRUcmFja0xvYWRlci5oICovOyB9OwotCQlCMUQ1RUNCNTEzNEI1OERBMDA4N0M3OEYg
LyogQ2FsbGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjFENUVDQjQxMzRCNThEQTAwODdDNzhGIC8qIENhbGxiYWNrRnVuY3Rpb24u
aCAqLzsgfTsKIAkJQjIwMTExMDcwQUI3NzQwNTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIwMTExMDUw
QUI3NzQwNTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuY3BwICovOyB9OwogCQlCMjAxMTEwODBB
Qjc3NDA1MDBEQjBFNjggLyogSlNTVkdBRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIwMTExMDYwQUI3NzQwNTAwREIwRTY4IC8qIEpTU1ZH
QUVsZW1lbnQuaCAqLzsgfTsKIAkJQjIyMjc5NjQwRDAwQkYyMjAwNzFCNzgyIC8qIEdyYWRpZW50
QXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjIyMjc3Q0QwRDAwQkYxRjAwNzFCNzgyIC8qIEdyYWRpZW50QXR0cmlidXRlcy5oICovOyB9
OwpAQCAtNTEzOCw3ICs1MTQ0LDYgQEAKIAkJQjU0M0I4NTcxN0VCNzU4RjAwM0JFOTNBIC8qIFNW
R1Byb3BlcnR5SW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCNTQzQjg1NjE3RUI3NThGMDAzQkU5M0EgLyogU1ZHUHJvcGVydHlJbmZvLmNwcCAq
LzsgfTsKIAkJQjU2MkRCNjAxN0QzQ0Q2MzAwMTBBRjk2IC8qIEhUTUxFbGVtZW50VHlwZUhlbHBl
cnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NjJE
QjVFMTdEM0NENTYwMDEwQUY5NiAvKiBIVE1MRWxlbWVudFR5cGVIZWxwZXJzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQjU2MkRCNjExN0QzQ0Q2
NjAwMTBBRjk2IC8qIFNWR0VsZW1lbnRUeXBlSGVscGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU2MkRCNUYxN0QzQ0Q1NjAwMTBBRjk2IC8qIFNW
R0VsZW1lbnRUeXBlSGVscGVycy5oICovOyB9OwotCQlCNTY1NzZFODE3REE5NEUyMDBBNTZCREMg
LyogRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NjU3NkU3MTdEQTk0RTIwMEE1NkJEQyAvKiBET01Db25z
dHJ1Y3RvcldpdGhEb2N1bWVudC5oICovOyB9OwogCQlCNTY1NzlCNTE4MjREMTJBMDBFNzlGMjMg
LyogUmVuZGVyQ2hpbGRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjU2NTc5QjQxODI0RDEyQTAwRTc5RjIzIC8qIFJlbmRlckNoaWxkSXRl
cmF0b3IuaCAqLzsgfTsKIAkJQjU3Q0I1MkQxODJBM0VFRDAwNzlBNjQ3IC8qIElubGluZUVsZW1l
bnRCb3guY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjU3Q0I1MkMxODJBM0VFRDAwNzlBNjQ3IC8qIElubGluZUVsZW1lbnRCb3guY3BwICovOyB9Owog
CQlCNTdDQjUyRTE4MkEzRUZDMDA3OUE2NDcgLyogSW5saW5lRWxlbWVudEJveC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU3Q0I1MkIxODJBMzdGNjAw
NzlBNjQ3IC8qIElubGluZUVsZW1lbnRCb3guaCAqLzsgfTsKQEAgLTEwMzYyLDYgKzEwMzY3LDE0
IEBACiAJCTdDM0YwMUMwMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29udGVudFByb3ZpZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJDb250ZW50UHJvdmlkZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0MTg5QUIxQjA3QzE3MDAwMEZBNzU3IC8q
IEdsb2JhbEV2ZW50SGFuZGxlcnMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEdsb2JhbEV2ZW50SGFuZGxlcnMuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzQxODlBQzFCMDdDQkYyMDAwRkE3NTcgLyog
V2luZG93RXZlbnRIYW5kbGVycy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2luZG93RXZlbnRIYW5kbGVycy5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNDVDOUM2MUUzRThBQkEwMEFBQjU1OCAvKiBK
U0RPTUJpbmRpbmdDYWxsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNE
T01CaW5kaW5nQ2FsbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNDVDOUM3
MUUzRThBRkYwMEFBQjU1OCAvKiBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M0NUM5QzgxRTNFOEI1MTAwQUFCNTU4IC8qIEpTRE9NV3Jh
cHBlckNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NV3JhcHBl
ckNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNDVDOUM5MUUzRThDRDcw
MEFBQjU1OCAvKiBKU0RPTUJpbmRpbmdTZWN1cml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0RPTUJpbmRpbmdTZWN1cml0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3QzQ1QzlDQTFFM0U4RDJFMDBBQUI1NTggLyogSlNET01CaW5kaW5nU2VjdXJpdHku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01CaW5kaW5nU2Vj
dXJpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzQ1QzlDQjFFM0U4RTQ5
MDBBQUI1NTggLyogSlNET01XcmFwcGVyQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNET01XcmFwcGVyQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QzQ1QzlDQzFFM0U4RjA4MDBBQUI1NTggLyogSlNET01FeGNlcHRpb25IYW5k
bGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTUV4Y2Vw
dGlvbkhhbmRsaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M0NUM5Q0Qx
RTNFOTAwQjAwQUFCNTU4IC8qIEpTRE9NQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01Db25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdDNDhBNkNFMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3Bh
Y2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0TmFtZXNw
YWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0OEE2Q0YxOTFDOUQ2NTAw
MDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJLaXROYW1lc3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0
OEE2RDIxOTFDOUQ4RTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViS2l0
TmFtZXNwYWNlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMzMyLDEyICsx
MjM0NSwxMCBAQAogCQlCMTBCNjk3RDE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW4uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVlRUVG9rZW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjEwQjY5N0UxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRv
a2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJWVFRU
b2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMTBCNjk3RjE0MEMx
NzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYlZUVFRva2VuaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlCMTgyNzQ5MjEzNENBNEMxMDBCOThDMkQgLyogQ2FsbGJhY2tGdW5jdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsYmFja0Z1bmN0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjFBOTQyRTExNUI1Q0UyMjAwRDUyNUQxIC8qIE1l
ZGlhU291cmNlUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTWVkaWFTb3VyY2VSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIxQTk0MkUyMTVCNUNFMjIwMEQ1MjVEMSAvKiBNZWRpYVNvdXJjZVJlZ2lzdHJ5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU291cmNlUmVnaXN0cnkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjFBRDRFNzExM0ExMkE0NjAwODQ2QjI3IC8qIFRleHRU
cmFja0xvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0
VHJhY2tMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMUFENEU3MjEz
QTEyQTQ2MDA4NDZCMjcgLyogVGV4dFRyYWNrTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRleHRUcmFja0xvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlCMUQ1RUNCNDEzNEI1OERBMDA4N0M3OEYgLyogQ2FsbGJhY2tGdW5jdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsYmFja0Z1bmN0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyMDExMTA1MEFCNzc0MDUwMERCMEU2OCAvKiBKU1NWR0FF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjIwMTExMDYwQUI3NzQw
NTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTU1ZHQUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjIy
Mjc3Q0QwRDAwQkYxRjAwNzFCNzgyIC8qIEdyYWRpZW50QXR0cmlidXRlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhZGllbnRBdHRyaWJ1dGVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMzA1MSw3ICsxMzA2Miw2IEBACiAJCUI1NjJEQjVFMTdEM0NE
NTYwMDEwQUY5NiAvKiBIVE1MRWxlbWVudFR5cGVIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhU
TUxFbGVtZW50VHlwZUhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU2
MkRCNUYxN0QzQ0Q1NjAwMTBBRjk2IC8qIFNWR0VsZW1lbnRUeXBlSGVscGVycy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdFbGVtZW50VHlwZUhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQjU2NTc2RTQxN0RBNTk5RjAwQTU2QkRDIC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZUlu
c3RydW1lbnRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU01haW5U
aHJlYWRFeGVjU3RhdGVJbnN0cnVtZW50YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJQjU2NTc2RTcxN0RBOTRFMjAwQTU2QkRDIC8qIERPTUNvbnN0cnVjdG9yV2l0aERvY3Vt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUNvbnN0cnVjdG9yV2l0
aERvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1NjU3OUI0MTgyNEQx
MkEwMEU3OUYyMyAvKiBSZW5kZXJDaGlsZEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlckNoaWxkSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjU3Q0I1MkIxODJBMzdGNjAwNzlBNjQ3IC8qIElubGluZUVsZW1lbnRCb3guaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lRWxlbWVudEJveC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTdDQjUyQzE4MkEzRUVEMDA3OUE2NDcgLyogSW5s
aW5lRWxlbWVudEJveC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bmxpbmVFbGVtZW50Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMTM2
LDcgKzIyMTQ2LDYgQEAKIAkJCQlCQ0Q1MzM2MzBFRDY4NDg5MDA4ODc0NjggLyogQ2FjaGVkU2Ny
aXB0U291cmNlUHJvdmlkZXIuaCAqLywKIAkJCQkwRjYwRjMyOTFERkJCMTA0MDA0MTZENkMgLyog
Q29tbW9uVk0uY3BwICovLAogCQkJCTBGNjBGMzJBMURGQkIxMDQwMDQxNkQ2QyAvKiBDb21tb25W
TS5oICovLAotCQkJCUI1NjU3NkU3MTdEQTk0RTIwMEE1NkJEQyAvKiBET01Db25zdHJ1Y3Rvcldp
dGhEb2N1bWVudC5oICovLAogCQkJCUJDNTNEQTQ3MTE0MzEzNEQwMDBEODE3RSAvKiBET01XcmFw
cGVyV29ybGQuY3BwICovLAogCQkJCUJDNTNEQTJEMTE0MzEyMUUwMDBEODE3RSAvKiBET01XcmFw
cGVyV29ybGQuaCAqLywKIAkJCQkxNDMyRTg0ODBDNTE0OTNGMDBCMTUwMEYgLyogR0NDb250cm9s
bGVyLmNwcCAqLywKQEAgLTIyMTU1LDggKzIyMTY0LDE0IEBACiAJCQkJOUJENEU5MTUxQzQ2Mjg3
MjAwNTA2NUJDIC8qIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5oICovLAogCQkJCTkzQjcwRDQ3
MDlFQjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuY3BwICovLAogCQkJCTkzQjcwRDQ4MDlF
QjBDN0MwMDlEODQ2OCAvKiBKU0RPTUJpbmRpbmcuaCAqLywKKwkJCQk3QzQ1QzlDNjFFM0U4QUJB
MDBBQUI1NTggLyogSlNET01CaW5kaW5nQ2FsbGVyLmggKi8sCisJCQkJN0M0NUM5Q0ExRTNFOEQy
RTAwQUFCNTU4IC8qIEpTRE9NQmluZGluZ1NlY3VyaXR5LmNwcCAqLywKKwkJCQk3QzQ1QzlDOTFF
M0U4Q0Q3MDBBQUI1NTggLyogSlNET01CaW5kaW5nU2VjdXJpdHkuaCAqLywKKwkJCQk3QzQ1QzlD
RDFFM0U5MDBCMDBBQUI1NTggLyogSlNET01Db25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJNDEzQzJD
MzMxQkMyOUE3QjAwNzUyMDRDIC8qIEpTRE9NQ29uc3RydWN0b3IuaCAqLywKIAkJCQk5MzA4NDEz
MzFDRERCMTU1MDBCMDk1OEMgLyogSlNET01Db252ZXJ0LmggKi8sCisJCQkJN0M0NUM5Q0MxRTNF
OEYwODAwQUFCNTU4IC8qIEpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwICovLAorCQkJCTdDNDVD
OUM3MUUzRThBRkYwMEFBQjU1OCAvKiBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmggKi8sCiAJCQkJ
RTFDMzZDQkMwRUIwODA2MjAwNzQxMEJDIC8qIEpTRE9NR2xvYmFsT2JqZWN0LmNwcCAqLywKIAkJ
CQlFMUMzNkMwMjBFQjA3NkQ2MDA3NDEwQkMgLyogSlNET01HbG9iYWxPYmplY3QuaCAqLywKIAkJ
CQk3QzJCREQzQjE3QzdGOThCMDAzOEZGMTUgLyogSlNET01HbG9iYWxPYmplY3RUYXNrLmNwcCAq
LywKQEAgLTIyMTczLDYgKzIyMTg4LDggQEAKIAkJCQlCQ0JGQjUzQjBEQ0QyOUNGMDAxOUIzRTUg
LyogSlNET01XaW5kb3dTaGVsbC5oICovLAogCQkJCTQxNzBBMkU5MUQ4QzBDQzAwMDMxODQ1MiAv
KiBKU0RPTVdyYXBwZXIuY3BwICovLAogCQkJCTY1RTBFOTQzMTEzM0M4OUYwMEI0Q0IxMCAvKiBK
U0RPTVdyYXBwZXIuaCAqLywKKwkJCQk3QzQ1QzlDQjFFM0U4RTQ5MDBBQUI1NTggLyogSlNET01X
cmFwcGVyQ2FjaGUuY3BwICovLAorCQkJCTdDNDVDOUM4MUUzRThCNTEwMEFBQjU1OCAvKiBKU0RP
TVdyYXBwZXJDYWNoZS5oICovLAogCQkJCUUzQTU4NzJFMURDM0Y1MjYwMEY2MDdBNiAvKiBKU0R5
bmFtaWNEb3duY2FzdC5oICovLAogCQkJCUJDNjA5MDFFMEU5MUI4RUMwMDBDNjhCNSAvKiBKU0V2
ZW50VGFyZ2V0Q3VzdG9tLmNwcCAqLywKIAkJCQk0NkI2M0Y2QjFDNkU4Q0RGMDAyRTkxNEIgLyog
SlNFdmVudFRhcmdldEN1c3RvbS5oICovLApAQCAtMjI1NjksOCArMjI1ODYsNiBAQAogCQlCQ0NF
NThBNzEwNjFFODJGMDA4RkIzNUEgLyogQ2FsbGJhY2sgT2JqZWN0cyAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQjE4Mjc0OTIxMzRDQTRDMTAwQjk4QzJE
IC8qIENhbGxiYWNrRnVuY3Rpb24uY3BwICovLAotCQkJCUIxRDVFQ0I0MTM0QjU4REEwMDg3Qzc4
RiAvKiBDYWxsYmFja0Z1bmN0aW9uLmggKi8sCiAJCQkJMTQ0OUUyODYxMDdENERCNDAwQjU3OTNG
IC8qIEpTQ2FsbGJhY2tEYXRhLmNwcCAqLywKIAkJCQkxNDQ5RTI0QTEwN0Q0QTg0MDBCNTc5M0Yg
LyogSlNDYWxsYmFja0RhdGEuaCAqLywKIAkJCQlFMTBCOTNDMjBCNzNDMjkxMDAzRUQ4OTAgLyog
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwICovLApAQCAtMjUxODUsNyArMjUyMDAsNiBAQAog
CQkJCTkzRjE5OTUwMDgyNDVFNTkwMDFFOUFCQyAvKiBDYWNoZVBvbGljeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTQzQUY4RTcxQUM1QjdFQzAwQ0E3MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDlBRTJEOTcxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9u
VmFsdWUuaCBpbiBIZWFkZXJzICovLAotCQkJCUIxRDVFQ0I1MTM0QjU4REEwMDg3Qzc4RiAvKiBD
YWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTQ4NEZDMjEwMkNGMjNDMDAx
ODdERDMgLyogQ2FudmFzR3JhZGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2NzFFMDY2MUQ2
N0E1OTYwMEM2QjQ5NyAvKiBDYW52YXNQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTQ4NEZD
NTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NTM2Miw2ICsyNTM3Niw3IEBACiAJCQkJRTEyNUY4MzYxODIyRjE4QTAwRDg0Q0Q5IC8qIENyeXB0
b0tleUhNQUMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRjgwQjg4MTgzMTcyNTIwMDc4ODVDMyAv
KiBDcnlwdG9LZXlQYWlyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTY0RkFBMzE4MzE1QkY0MDBE
QjRFNjEgLyogQ3J5cHRvS2V5UlNBLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzQ1QzlENTFFM0ZD
QkU0MDBBQUI1NTggLyogSlNET01CaW5kaW5nQ2FsbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MTI1Rjg1NjE4MkMwRjgzMDBEODRDRDkgLyogQ3J5cHRvS2V5U2VyaWFsaXphdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTEyNUY4NUExODJDMUFBNjAwRDg0Q0Q5IC8qIENyeXB0b0tleVNlcmlh
bGl6YXRpb25SYXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxOTcyNzE2MTgyMDU0OUUwMDU5MkQ1
MSAvKiBDcnlwdG9LZXlUeXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTI1NTg1LDcgKzI1NjAwLDYg
QEAKIAkJCQlBODE4NUYzOTA5NzY1NzY2MDA1ODI2RDkgLyogRG9jdW1lbnRUeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5NzM4ODlBMTExNkVBOURDMDBBREYzMTMgLyogRG9jdW1lbnRXcml0ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBOEY2QkMzMERCNTVDREMwMDFEQjc5NCAvKiBET01BcHBs
aWNhdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCNTY1NzZFODE3REE5NEUyMDBBNTZC
REMgLyogRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
NjBENkU5MEQyOEQ4MzQwMEI5OTE4RiAvKiBET01Db3JlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGQzlBMEY3NTE2NDA5NENGMDAzRDZCOEQgLyogRE9NQ1NTTmFtZXNwYWNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5QjNBODg3MjE0NTYzMkY5MDAzQUU4RjUgLyogRE9NRE9NU2V0dGFi
bGVUb2tlbkxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjY2OTYsNiArMjY3MTAsNyBAQAogCQkJ
CTQ0OTZFM0EwMTM5ODEzQTUwMDNFRTMyQSAvKiBKU1NWR01QYXRoRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODU0MkE3OTcwQUU1Qzk0MzAwREY1OERGIC8qIEpTU1ZHTnVtYmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMkZBM0RCMTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdOdW1iZXJM
aXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzQ1QzlEMzFFM0ZDQkQ3MDBBQUI1NTggLyogSlNE
T01XcmFwcGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREI1MEFCNzVBNkYwMDBF
NUFDNCAvKiBKU1NWR1BhdGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RCNzBB
Qjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2VnLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZB
M0RCOTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoU2VnQXJjQWJzLmggaW4gSGVhZGVycyAq
LywKQEAgLTI3Nzk3LDYgKzI3ODEyLDcgQEAKIAkJCQk5N0JDNkE1MjE1MDVGMDgxMDAxQjc0QUMg
LyogU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCQzZBNTcx
NTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3QkM2QTU4MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTdDNDVDOUQ0MUUzRkNCREYwMEFBQjU1OCAv
KiBKU0RPTUJpbmRpbmdTZWN1cml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzNkZEMTgxNkM3
ODI2NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZFMzZGRDE3MTZDNzgyNjUwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0YXRlTWFjaGluZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUEyRTZFNUEwQ0M1NTIxMzAwNEEyMDYyIC8qIFNRTFZhbHVl
LmggaW4gSGVhZGVycyAqLywKQEAgLTI3ODQ2LDYgKzI3ODYyLDcgQEAKIAkJCQkwRkY1MDI3MjEw
MkJBOTZBMDA2NkYzOUEgLyogU3R5bGVNZWRpYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI3
NEUwRTgxRTA2NzAwQjI1OTY1IC8qIFN0eWxlTXVsdGlDb2xEYXRhLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNERBQ0U2QTFEMTJFMTBCMDA3NTk4MEYgLyogU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3QzQ1QzlENjFFM0ZDQkY4MDBBQUI1NTggLyogSlNET01FeGNl
cHRpb25IYW5kbGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZERkMwQTE5OTA2NzAwN0ZC
OEM1IC8qIFN0eWxlUHJvcGVydGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFCMjUxMDcxNTJB
MEJCMDAwNjlCNzc5IC8qIFN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTgzQzA1QTVCMUE2ODYyMTIwMDdFNURFQSAvKiBTdHlsZVByb3BlcnR5U2hvcnRoYW5kRnVu
Y3Rpb25zLmggaW4gSGVhZGVycyAqLywKQEAgLTI5MDg1LDcgKzI5MTAyLDYgQEAKIAkJCQlCQ0Ix
NkMyNzA5NzlDM0JEMDA0Njc3NDEgLyogQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlFNDNBRjhFNjFBQzVCN0U4MDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QUUyRDk2MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxh
dGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIxODI3NDkzMTM0Q0E0QzEwMEI5OEMy
RCAvKiBDYWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5NDg0RkMxMTAy
Q0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
NjcxRTA2NTFENjdBNTk2MDBDNkI0OTcgLyogQ2FudmFzUGF0aC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0OTQ4NEZDNDEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGF0dGVybi5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTI5MjQ2LDYgKzI5MjYyLDcgQEAKIAkJCQlGQkIwQzVCNzE3QkJENjI2MDAz
RDM2NzcgLyogQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzY0
QjRENTBDQjQyOThBMDA1RjJCNjIgLyogQ1NTRm9udEZhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDA5RUJEQjIxNkI3RUU3NDAwQ0JBM0ZDIC8qIENTU0ZvbnRGYWNlTG9hZEV2ZW50LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTdDNDVDOUQxMUUzRUZFMDUwMEFBQjU1OCAvKiBKU0RPTUNvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU2Q0U3MEExOTg5Q0EwMDdGQjhDNSAv
KiBDU1NGb250RmFjZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI2MDE3QTMxQzcyREM5
OTAwRjc0QTE2IC8qIENTU0ZvbnRGYWNlU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNjRC
NEQ3MENCNDI5OEEwMDVGMkI2MiAvKiBDU1NGb250RmFjZVNvdXJjZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI5NTc4LDYgKzI5NTk1LDcgQEAKIAkJCQlCMkFGRkM3QzBEMDBBNUMxMDAzMDA3NEQg
LyogRm9udENhY2hlTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBNjAwRDAwNkNENjAw
RUY2RjI2IC8qIEZvbnRDYXNjYWRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzgwMEQw
MEE1QzEwMDMwMDc0RCAvKiBGb250Q2FzY2FkZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
N0M0NUM5RDAxRTNFRkRGQjAwQUFCNTU4IC8qIEpTRE9NV3JhcHBlckNhY2hlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyQzNEQTY3MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZUZvbnRz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDNEVERDc0MUE3QjYwNzgwMDE5OEM0RCAvKiBGb250
Q29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkFGRkM3RDBEMDBBNUMxMDAzMDA3NEQgLyog
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMxNTQ2LDYgKzMx
NTY0LDcgQEAKIAkJCQlCMjIyNzlBNDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdCMDUwRDAw
QkZGMTAwNzFCNzgyIC8qIFNWR0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCMjIyNzlBNzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQ3Vyc29yRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzQ1QzlEMjFFM0VGRTA4MDBBQUI1NTggLyogSlNE
T01FeGNlcHRpb25IYW5kbGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlBRDBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHRGVmc0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIy
Mjc5QjAwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0Rlc2NFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyMjI3OUIzMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdEb2N1bWVudC5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTMxNTYwLDYgKzMxNTc5LDcgQEAKIAkJCQlCMjIyNzlDRDBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjIyMjc5RDAwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFQ29tcG9zaXRlRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxOTIxMzI3NDExQzBFNkJCMDA0NTYyMzggLyogU1ZHRkVD
b252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0M0NUM5Q0YxRTNF
RkRGNzAwQUFCNTU4IC8qIEpTRE9NQmluZGluZ1NlY3VyaXR5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUIyMjI3OUQzMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5RDYwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlE
OTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FsbGJhY2tGdW5jdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FsbGJhY2tG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDIxMTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0NhbGxiYWNrRnVuY3Rpb24uY3BwCShub25leGlzdGVudCkKQEAgLTEsNTIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0g
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2FsbGJhY2tGdW5j
dGlvbi5oIgotCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvQ2FsbERhdGEuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1ib29sIGNoZWNrRnVuY3Rpb25Pbmx5Q2FsbGJhY2soSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIENhbGxiYWNrQWxsb3dlZFZhbHVlRmxhZ3MgYWNjZXB0
ZWRWYWx1ZXMpCi17Ci0gICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkgJiYgKGFjY2VwdGVkVmFs
dWVzICYgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICh2YWx1ZS5pc051bGwoKSAmJiAoYWNjZXB0ZWRWYWx1ZXMgJiBDYWxsYmFja0FsbG93
TnVsbCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTQzo6Q2FsbERhdGEgY2FsbERh
dGE7Ci0gICAgaWYgKGdldENhbGxEYXRhKHZhbHVlLCBjYWxsRGF0YSkgPT0gSlNDOjpDYWxsVHlw
ZTo6Tm9uZSkgewotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0
ZS0+dm0oKSk7Ci0gICAgICAgIHRocm93VHlwZU1pc21hdGNoRXJyb3IoKnN0YXRlLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvQ2FsbGJhY2tGdW5jdGlvbi5jcHAKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBz
dm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FsbGJhY2tG
dW5jdGlvbi5oCShyZXZpc2lvbiAyMTEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9DYWxsYmFja0Z1bmN0aW9uLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw1NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdC5oPgot
Ci1uYW1lc3BhY2UgSlNDIHsKLWNsYXNzIEV4ZWNTdGF0ZTsKLX0KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBKU0RPTUdsb2JhbE9iamVjdDsKLQotZW51bSBDYWxsYmFja0FsbG93ZWRW
YWx1ZUZsYWcgewotICAgIENhbGxiYWNrQWxsb3dVbmRlZmluZWQgPSAxLAotICAgIENhbGxiYWNr
QWxsb3dOdWxsID0gMSA8PCAxCi19OwotCi10eXBlZGVmIHVuc2lnbmVkIENhbGxiYWNrQWxsb3dl
ZFZhbHVlRmxhZ3M7Ci0KLWJvb2wgY2hlY2tGdW5jdGlvbk9ubHlDYWxsYmFjayhKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgQ2FsbGJhY2tBbGxvd2VkVmFsdWVGbGFncyk7Ci0KLS8vIENy
ZWF0ZXMgY2FsbGJhY2sgb2JqZWN0cyBmb3IgY2FsbGJhY2tzIG1hcmtlZCBhcyBGdW5jdGlvbk9u
bHkgaW4gV2ViSURMLgotdGVtcGxhdGUgPHR5cGVuYW1lIEpTQ2FsbGJhY2tUeXBlPgotUmVmUHRy
PEpTQ2FsbGJhY2tUeXBlPiBjcmVhdGVGdW5jdGlvbk9ubHlDYWxsYmFjayhKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBDYWxsYmFja0FsbG93ZWRWYWx1ZUZsYWdzIGFjY2VwdGVkVmFsdWVzID0gMCkKLXsKLSAg
ICBpZiAoY2hlY2tGdW5jdGlvbk9ubHlDYWxsYmFjayhleGVjLCB2YWx1ZSwgYWNjZXB0ZWRWYWx1
ZXMpKQotICAgICAgICByZXR1cm4gSlNDYWxsYmFja1R5cGU6OmNyZWF0ZShhc09iamVjdCh2YWx1
ZSksIGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0NhbGxiYWNrRnVuY3Rpb24uaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUK
IyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NQ29uc3RydWN0
b3JXaXRoRG9jdW1lbnQuaAkocmV2aXNpb24gMjExMzg0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDQ5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
LSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIENvbnN0cnVjdG9ycyB1c2luZyB0aGlzIGJh
c2UgY2xhc3MgZGVwZW5kIG9uIGJlaW5nIGluIGEgRG9jdW1lbnQgYW5kCi0vLyBjYW4gbmV2ZXIg
YmUgdXNlZCBmcm9tIGEgV29ya2VyR2xvYmFsU2NvcGUuCi1jbGFzcyBET01Db25zdHJ1Y3Rvcldp
dGhEb2N1bWVudCA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci0gICAgdHlwZWRlZiBE
T01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotcHVibGljOgotICAgIERvY3VtZW50KiBkb2N1bWVu
dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgRE9NQ29uc3Ry
dWN0b3JXaXRoRG9jdW1lbnQoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICAgICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIHsKLSAgICAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsT2JqZWN0LnZtKCkpOwotICAgICAgICBBU1NFUlQoZ2xv
YmFsT2JqZWN0LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKTsKLSAgICB9
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCShyZXZpc2lvbiAyMTEzODQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDggKzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0NyeXB0
by5oIgogCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlIDxydW50
aW1lL0FycmF5QnVmZmVyVmlldy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNs
dWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3Lmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCShyZXZp
c2lvbiAyMTEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQYXRo
TlNSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKIAogI2luY2x1
ZGUgIkNvbW1vblZNLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRp
b25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhh
bmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKICNpbmNsdWRlICJKU01h
aW5UaHJlYWRFeGVjU3RhdGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJldmlzaW9uIDIxMTM4NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDQyICsyNCwxOSBAQAogCiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCiAjaW5j
bHVkZSAiQ29tbW9uVk0uaCIKLSNpbmNsdWRlICJET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVz
Y3JpcHRpb24uaCIKLSNpbmNsdWRlICJFeGNlcHRpb25IZWFkZXJzLmgiCi0jaW5jbHVkZSAiRXhj
ZXB0aW9uSW50ZXJmYWNlcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTFBh
cnNlcklkaW9tcy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCiAjaW5jbHVk
ZSAiSlNET01Db252ZXJ0LmgiCi0jaW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCi0jaW5jbHVkZSAi
SlNET01XaW5kb3dDdXN0b20uaCIKLSNpbmNsdWRlICJKU0V4Y2VwdGlvbkJhc2UuaCIKLSNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgPGJ5dGVjb2RlL0NvZGVCbG9jay5oPgot
I2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaD4KLSNpbmNsdWRlIDxpbnNwZWN0
b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3Rh
bmNlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJy
b3JIYW5kbGluZ1Njb3BlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvckluc3RhbmNlLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KLSNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlv
bkhlbHBlcnMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxz
dGRhcmcuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1
Y3Rvck9iamVjdCk7Ci1TVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9N
Q29uc3RydWN0b3JXaXRoRG9jdW1lbnQpOwotCiB2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0
IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQogewogICAgIGNvbW1vblZNKCkuYWRkSW1wdXJl
UHJvcGVydHkocHJvcGVydHlOYW1lKTsKQEAgLTE4NCwxNzAgKzE2MSw2IEBAIGRvdWJsZSB2YWx1
ZVRvRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0
ZUluc3RhbmNlKj4odmFsdWUudG9PYmplY3QoZXhlYykpLT5pbnRlcm5hbE51bWJlcigpOwogfQog
Ci12b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXhjZXB0aW9u
VmFsdWUsIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQotewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxv
Y2soKSk7Ci0gICAgYXV0byogZXhjZXB0aW9uID0ganNEeW5hbWljRG93bmNhc3Q8SlNDOjpFeGNl
cHRpb24qPih2bSwgZXhjZXB0aW9uVmFsdWUpOwotICAgIGlmICghZXhjZXB0aW9uKSB7Ci0gICAg
ICAgIGV4Y2VwdGlvbiA9IHZtLmxhc3RFeGNlcHRpb24oKTsKLSAgICAgICAgaWYgKCFleGNlcHRp
b24pCi0gICAgICAgICAgICBleGNlcHRpb24gPSBKU0M6OkV4Y2VwdGlvbjo6Y3JlYXRlKGV4ZWMt
PnZtKCksIGV4Y2VwdGlvblZhbHVlLCBKU0M6OkV4Y2VwdGlvbjo6RG9Ob3RDYXB0dXJlU3RhY2sp
OwotICAgIH0KLQotICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIGNhY2hlZFNj
cmlwdCk7Ci19Ci0KLVN0cmluZyByZXRyaWV2ZUVycm9yTWVzc2FnZShFeGVjU3RhdGUmIHN0YXRl
LCBWTSYgdm0sIEpTVmFsdWUgZXhjZXB0aW9uLCBDYXRjaFNjb3BlJiBjYXRjaFNjb3BlKQotewot
ICAgIGlmIChhdXRvKiBleGNlcHRpb25CYXNlID0gdG9FeGNlcHRpb25CYXNlKHZtLCBleGNlcHRp
b24pKQotICAgICAgICByZXR1cm4gZXhjZXB0aW9uQmFzZS0+dG9TdHJpbmcoKTsKLQotICAgIC8v
IEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNwZWN0b3I6IFdlYkNv
cmU6OnJlcG9ydEV4Y2VwdGlvbiBzaG91bGQgbm90IGV2YWx1YXRlIEphdmFTY3JpcHQgaGFuZGxp
bmcgZXhjZXB0aW9ucwotICAgIC8vIElmIHRoaXMgaXMgYSBjdXN0b20gZXhjZXB0aW9uIG9iamVj
dCwgY2FsbCB0b1N0cmluZyBvbiBpdCB0byB0cnkgYW5kIGdldCBhIG5pY2Ugc3RyaW5nIHJlcHJl
c2VudGF0aW9uIGZvciB0aGUgZXhjZXB0aW9uLgotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0g
ICAgaWYgKGF1dG8qIGVycm9yID0ganNEeW5hbWljRG93bmNhc3Q8RXJyb3JJbnN0YW5jZSo+KHZt
LCBleGNlcHRpb24pKQotICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci0+c2FuaXRpemVkVG9T
dHJpbmcoJnN0YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlv
bi50b1dURlN0cmluZygmc3RhdGUpOwotCi0gICAgLy8gV2UgbmVlZCB0byBjbGVhciBhbnkgbmV3
IGV4Y2VwdGlvbiB0aGF0IG1heSBiZSB0aHJvd24gaW4gdGhlIHRvU3RyaW5nKCkgY2FsbCBhYm92
ZS4KLSAgICAvLyByZXBvcnRFeGNlcHRpb24oKSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgbWFraW5n
IG5ldyBleGNlcHRpb25zLgotICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICB2
bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gZXJyb3JNZXNzYWdlOwotfQotCi12
b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNl
cHRpb24sIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0LCBFeGNlcHRpb25EZXRhaWxzKiBleGNl
cHRpb25EZXRhaWxzKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgUkVMRUFTRV9BU1NFUlQodm0uY3Vy
cmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0gICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1
dGlvbkV4Y2VwdGlvbih2bSwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXJy
b3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoZXhlYy0+dm0oKSk7Ci0KLSAgICBSZWZQdHI8U2Ny
aXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlv
bihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2Fw
dHVyZSkpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgdm0uY2xlYXJMYXN0RXhj
ZXB0aW9uKCk7Ci0KLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAgICBp
ZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IGpzRHluYW1pY0Rvd25jYXN0PEpTRE9NV2luZG93Kj4o
dm0sIGdsb2JhbE9iamVjdCkpIHsKLSAgICAgICAgaWYgKCF3aW5kb3ctPndyYXBwZWQoKS5pc0N1
cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpbnQgbGluZU51bWJlciA9IDA7Ci0gICAgaW50IGNvbHVtbk51bWJlciA9IDA7Ci0gICAg
U3RyaW5nIGV4Y2VwdGlvblNvdXJjZVVSTDsKLSAgICBpZiAoY29uc3QgU2NyaXB0Q2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBjYWxsU3RhY2stPmZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKCkpIHsKLSAg
ICAgICAgbGluZU51bWJlciA9IGNhbGxGcmFtZS0+bGluZU51bWJlcigpOwotICAgICAgICBjb2x1
bW5OdW1iZXIgPSBjYWxsRnJhbWUtPmNvbHVtbk51bWJlcigpOwotICAgICAgICBleGNlcHRpb25T
b3VyY2VVUkwgPSBjYWxsRnJhbWUtPnNvdXJjZVVSTCgpOwotICAgIH0KLQotICAgIFN0cmluZyBl
cnJvck1lc3NhZ2UgPSByZXRyaWV2ZUVycm9yTWVzc2FnZSgqZXhlYywgdm0sIGV4Y2VwdGlvbi0+
dmFsdWUoKSwgc2NvcGUpOwotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAg
ICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5yZXBvcnRFeGNlcHRpb24oZXJyb3JNZXNzYWdlLCBs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGV4Y2VwdGlvblNvdXJjZVVSTCwgZXhjZXB0aW9uLCBj
YWxsU3RhY2stPnNpemUoKSA/IGNhbGxTdGFjayA6IG51bGxwdHIsIGNhY2hlZFNjcmlwdCk7Ci0K
LSAgICBpZiAoZXhjZXB0aW9uRGV0YWlscykgewotICAgICAgICBleGNlcHRpb25EZXRhaWxzLT5t
ZXNzYWdlID0gZXJyb3JNZXNzYWdlOwotICAgICAgICBleGNlcHRpb25EZXRhaWxzLT5saW5lTnVt
YmVyID0gbGluZU51bWJlcjsKLSAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+Y29sdW1uTnVtYmVy
ID0gY29sdW1uTnVtYmVyOwotICAgICAgICBleGNlcHRpb25EZXRhaWxzLT5zb3VyY2VVUkwgPSBl
eGNlcHRpb25Tb3VyY2VVUkw7Ci0gICAgfQotfQotCi12b2lkIHJlcG9ydEN1cnJlbnRFeGNlcHRp
b24oRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotICAgIGF1dG8qIGV4Y2VwdGlvbiA9
IHNjb3BlLmV4Y2VwdGlvbigpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmVw
b3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlIGNyZWF0
ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUgZWMsIGNvbnN0IFN0
cmluZyogbWVzc2FnZSA9IG51bGxwdHIpCi17Ci0gICAgaWYgKCFlYyB8fCBlYyA9PSBFeGlzdGlu
Z0V4Y2VwdGlvbkVycm9yKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIC8v
IEZJWE1FOiBIYW5kbGUgb3RoZXIgV2ViSURMIGV4Y2VwdGlvbiB0eXBlcy4KLSAgICBpZiAoZWMg
PT0gVHlwZUVycm9yKSB7Ci0gICAgICAgIGlmICghbWVzc2FnZSB8fCBtZXNzYWdlLT5pc0VtcHR5
KCkpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMpOwotICAgICAgICBy
ZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMsICptZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBpZiAo
ZWMgPT0gUmFuZ2VFcnJvcikgewotICAgICAgICBpZiAoIW1lc3NhZ2UgfHwgbWVzc2FnZS0+aXNF
bXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKCJCYWQgdmFsdWUiKSk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsICptZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBpZiAoZWMgPT0gU3RhY2tPdmVyZmxvd0Vycm9y
KQotICAgICAgICByZXR1cm4gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwotCi0gICAg
Ly8gRklYTUU6IEFsbCBjYWxsZXJzIHRvIGNyZWF0ZURPTUV4Y2VwdGlvbiBuZWVkIHRvIHBhc3Mg
aW4gdGhlIGNvcnJlY3QgZ2xvYmFsIG9iamVjdC4KLSAgICAvLyBGb3Igbm93LCB3ZSdyZSBnb2lu
ZyB0byBhc3N1bWUgdGhlIGxleGljYWxHbG9iYWxPYmplY3QuIFdoaWNoIGlzIHdyb25nIGluIGNh
c2VzIGxpa2UgdGhpczoKLSAgICAvLyBmcmFtZXNbMF0uZG9jdW1lbnQuY3JlYXRlRWxlbWVudChu
dWxsLCBudWxsKTsgLy8gdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGljaCBzaG91bGQgaGF2ZSB0aGUg
c3ViZnJhbWUncyBwcm90b3R5cGVzLgotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpOwotCi0gICAgRXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKLQotICAgIENTdHJpbmcgbWVz
c2FnZUNTdHJpbmc7Ci0gICAgaWYgKG1lc3NhZ2UpCi0gICAgICAgIG1lc3NhZ2VDU3RyaW5nID0g
bWVzc2FnZS0+dXRmOCgpOwotICAgIGlmIChtZXNzYWdlICYmICFtZXNzYWdlLT5pc0VtcHR5KCkp
IHsKLSAgICAgICAgLy8gSXQgaXMgc2FmZSB0byBkbyB0aGlzIGJlY2F1c2UgdGhlIGNoYXIqIGNv
bnRlbnRzIG9mIHRoZSBDU3RyaW5nIGFyZSBjb3BpZWQgaW50byBhIG5ldyBXVEY6OlN0cmluZyBi
ZWZvcmUgdGhlIENTdHJpbmcgaXMgZGVzdHJveWVkLgotICAgICAgICBkZXNjcmlwdGlvbi5kZXNj
cmlwdGlvbiA9IG1lc3NhZ2VDU3RyaW5nLmRhdGEoKTsKLSAgICB9Ci0KLSAgICBKU1ZhbHVlIGVy
cm9yT2JqZWN0OwotICAgIHN3aXRjaCAoZGVzY3JpcHRpb24udHlwZSkgewotICAgIGNhc2UgRE9N
Q29yZUV4Y2VwdGlvblR5cGU6Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgY2Fz
ZSBJREJEYXRhYmFzZUV4Y2VwdGlvblR5cGU6Ci0jZW5kaWYKLSAgICAgICAgZXJyb3JPYmplY3Qg
PSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgRE9NQ29yZUV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2Ny
aXB0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsZUV4Y2VwdGlvblR5cGU6Ci0g
ICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIEZpbGVFeGNlcHRp
b246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNRTEV4
Y2VwdGlvblR5cGU6Ci0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIFNRTEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgU1ZHRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgU1ZHRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYUGF0aEV4Y2VwdGlvblR5cGU6Ci0gICAgICAgIGVycm9y
T2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFhQYXRoRXhjZXB0aW9uOjpjcmVhdGUo
ZGVzY3JpcHRpb24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChl
cnJvck9iamVjdCk7Ci0gICAgYWRkRXJyb3JJbmZvKGV4ZWMsIGFzT2JqZWN0KGVycm9yT2JqZWN0
KSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIGVycm9yT2JqZWN0OwotfQotCi1KU1ZhbHVlIGNyZWF0ZURP
TUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUgZWMsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlRE9NRXhjZXB0aW9uKGV4ZWMsIGVjLCAm
bWVzc2FnZSk7Ci19Ci0KLUpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKLXsKLSAgICByZXR1cm4gY3JlYXRlRE9NRXhjZXB0
aW9uKCZzdGF0ZSwgZXhjZXB0aW9uLmNvZGUoKSwgZXhjZXB0aW9uLnJlbGVhc2VNZXNzYWdlKCkp
OwotfQotCi12b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24p
Ci17Ci0gICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbihzdGF0ZSwgV1RGTW92
ZShleGNlcHRpb24pKSk7Ci19Ci0KIGJvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CiAgICAgYXV0byYgdm0gPSBzdGF0ZS52
bSgpOwpAQCAtMzY1LDQzICsxNzgsNiBAQCBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhl
Y1N0YXRlJiBzCiAgICAgcmV0dXJuICFhcHBseU1ldGhvZC5pc1VuZGVmaW5lZCgpOwogfQogCi1i
b29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEV4ZWNTdGF0ZSYg
c3RhdGUsIEZyYW1lJiBmcmFtZSwgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChCaW5kaW5n
U2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsICZmcmFtZSwgRG9Ob3RS
ZXBvcnRTZWN1cml0eUVycm9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgbWVzc2FnZSA9
IGZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVz
c2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhFeGVjU3Rh
dGUmIHN0YXRlLCBET01XaW5kb3cmIGdsb2JhbE9iamVjdCwgU3RyaW5nJiBtZXNzYWdlKQotewot
ICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0
YXRlLCBnbG9iYWxPYmplY3QsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIG1lc3NhZ2UgPSBnbG9iYWxPYmplY3QuY3Jvc3NEb21haW5BY2Nlc3NF
cnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSkpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiBmcmFtZSwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAg
ICBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPnByaW50RXJyb3JNZXNzYWdlKG1lc3Nh
Z2UpOwotfQotCi1TdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKLXsKLSAgICBK
U0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5zdHJ1Y3R1cmVzKE5v
TG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZXMuZ2V0KGNsYXNzSW5mbyku
Z2V0KCk7Ci19Ci0KLVN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvKQotewotICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtpbmcoZ2xvYmFs
T2JqZWN0LnZtKCkuaGVhcCwgZ2xvYmFsT2JqZWN0LmdjTG9jaygpKTsKLSAgICBKU0RPTVN0cnVj
dHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5zdHJ1Y3R1cmVzKGxvY2tlcik7Ci0g
ICAgQVNTRVJUKCFzdHJ1Y3R1cmVzLmNvbnRhaW5zKGNsYXNzSW5mbykpOwotICAgIHJldHVybiBz
dHJ1Y3R1cmVzLnNldChjbGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9i
amVjdC52bSgpLCAmZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKS5pdGVyYXRvci0+dmFsdWUuZ2V0
KCk7Ci19Ci0KIHN0YXRpYyBjb25zdCBpbnQzMl90IGtNYXhJbnQzMiA9IDB4N2ZmZmZmZmY7CiBz
dGF0aWMgY29uc3QgaW50MzJfdCBrTWluSW50MzIgPSAta01heEludDMyIC0gMTsKIHN0YXRpYyBj
b25zdCB1aW50MzJfdCBrTWF4VUludDMyID0gMHhmZmZmZmZmZlU7CkBAIC03MTUsMzIwICs0OTEs
NCBAQCB1aW50NjRfdCB0b1VJbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhCiAgICAgcmV0dXJu
IG47CiB9CiAKLWNsYXNzIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgewotcHVibGljOgot
ICAgIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IoKSA9IGRlZmF1bHQ7Ci0KLSAgICBTdGFj
a1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QK
LSAgICB7Ci0gICAgICAgIGlmICghbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSkgewotICAgICAgICAg
ICAgbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gU3Rh
Y2tWaXNpdG9yOjpDb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdXRvKiBjb2Rl
QmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKSkKLSAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0
ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBBU1NFUlQodmlzaXRvci0+Y2FsbGVlKCkpOwotICAgICAgICAgICAgLy8gRklYTUU6IENhbGxl
ZSBpcyBub3QgYW4gb2JqZWN0IGlmIHRoZSBjYWxsZXIgaXMgV2ViIEFzc2VtYmx5LgotICAgICAg
ICAgICAgLy8gRmlndXJlIG91dCB3aGF0IHRvIGRvIGhlcmUuIFdlIGNhbiBwcm9iYWJseSBnZXQg
dGhlIGdsb2JhbCBvYmplY3QKLSAgICAgICAgICAgIC8vIGZyb20gdGhlIHRvcC1tb3N0IFdhc20g
SW5zdGFuY2UuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MjEK
LSAgICAgICAgICAgIGlmICh2aXNpdG9yLT5jYWxsZWUoKS0+aXNPYmplY3QoKSkKLSAgICAgICAg
ICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxl
ZSgpKS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFN0YWNrVmlz
aXRvcjo6RG9uZTsKLSAgICB9Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3Q7IH0KLQotcHJpdmF0ZToKLSAgICBtdXRhYmxl
IGJvb2wgbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSB7IGZhbHNlIH07Ci0gICAgbXV0YWJsZSBKU0ds
b2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3QgeyBudWxscHRyIH07Ci19OwotCi1ET01XaW5kb3cm
IGNhbGxlckRPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgR2V0Q2FsbGVyR2xvYmFs
T2JqZWN0RnVuY3RvciBpdGVyOwotICAgIGV4ZWMtPml0ZXJhdGUoaXRlcik7Ci0gICAgcmV0dXJu
IGl0ZXIuZ2xvYmFsT2JqZWN0KCkgPyBhc0pTRE9NV2luZG93KGl0ZXIuZ2xvYmFsT2JqZWN0KCkp
LT53cmFwcGVkKCkgOiBmaXJzdERPTVdpbmRvdyhleGVjKTsKLX0KLQotRE9NV2luZG93JiBhY3Rp
dmVET01XaW5kb3coRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBhc0pTRE9NV2luZG93
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKTsKLX0KLQotRE9NV2luZG93
JiBmaXJzdERPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGFzSlNET01X
aW5kb3coZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOwotfQotCi1zdGF0
aWMgaW5saW5lIGJvb2wgY2FuQWNjZXNzRG9jdW1lbnQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBE
b2N1bWVudCogdGFyZ2V0RG9jdW1lbnQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGlu
Z09wdGlvbikKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoIXRhcmdldERvY3VtZW50KQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBET01XaW5kb3cmIGFjdGl2ZSA9IGFjdGl2ZURPTVdp
bmRvdyhzdGF0ZSk7Ci0KLSAgICBpZiAoYWN0aXZlLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCkuY2FuQWNjZXNzKHRhcmdldERvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBzd2l0Y2ggKHJlcG9ydGluZ09wdGlvbikgewotICAgIGNhc2Ug
VGhyb3dTZWN1cml0eUVycm9yOgotICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKnN0YXRlLCBz
Y29wZSwgdGFyZ2V0RG9jdW1lbnQtPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9y
TWVzc2FnZShhY3RpdmUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMb2dTZWN1cml0eUVy
cm9yOgotICAgICAgICBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKHRhcmdldERvY3VtZW50LT5m
cmFtZSgpLCB0YXJnZXREb2N1bWVudC0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJy
b3JNZXNzYWdlKGFjdGl2ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERvTm90UmVwb3J0
U2VjdXJpdHlFcnJvcjoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRv
dyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERPTVdpbmRvdyYgdGFyZ2V0LCBTZWN1cml0eVJlcG9y
dGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCi17Ci0gICAgcmV0dXJuIGNhbkFjY2Vzc0RvY3Vt
ZW50KHN0YXRlLCB0YXJnZXQuZG9jdW1lbnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKLX0KLQotYm9v
bCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEZyYW1lKiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGlu
Z09wdGlvbikKLXsKLSAgICByZXR1cm4gdGFyZ2V0ICYmIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRl
LCB0YXJnZXQtPmRvY3VtZW50KCksIHJlcG9ydGluZ09wdGlvbik7Ci19Ci0KLWJvb2wgQmluZGlu
Z1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IE5vZGUqIHRhcmdldCkKLXsKLSAgICByZXR1cm4gIXRhcmdldCB8fCBjYW5BY2Nlc3NEb2N1bWVu
dCgmc3RhdGUsICZ0YXJnZXQtPmRvY3VtZW50KCksIExvZ1NlY3VyaXR5RXJyb3IpOwotfQotICAg
IAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIHRocm93VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
Ci17Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgZXJyb3JNZXNz
YWdlKTsKLX0KLQotc3RhdGljIHZvaWQgYXBwZW5kQXJndW1lbnRNdXN0QmUoU3RyaW5nQnVpbGRl
ciYgYnVpbGRlciwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnRO
YW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUp
Ci17Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJBcmd1bWVudCAiKTsKLSAgICBidWlsZGVy
LmFwcGVuZE51bWJlcihhcmd1bWVudEluZGV4ICsgMSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIgKCciKTsKLSAgICBidWlsZGVyLmFwcGVuZChhcmd1bWVudE5hbWUpOwotICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiJykgdG8gIik7Ci0gICAgaWYgKCFmdW5jdGlvbk5hbWUpIHsKLSAg
ICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ0aGUgIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKGludGVyZmFjZU5hbWUpOwotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBjb25z
dHJ1Y3RvciIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFj
ZU5hbWUpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgnLicpOwotICAgICAgICBidWlsZGVyLmFw
cGVuZChmdW5jdGlvbk5hbWUpOwotICAgIH0KLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBt
dXN0IGJlICIpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0
ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgYXV0byYgY29udGV4dCA9ICpqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRl
ZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBu
b24tIiwgaW50ZXJmYWNlTmFtZSwgIiBvYmplY3QuIikpOwotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0gICAgCi12b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0
ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgYXV0byYgY29udGV4dCA9ICpqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRl
ZCBhdHRlbXB0IHRvIHNldCBwcm9wZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24t
IiwgaW50ZXJmYWNlTmFtZSwgIiBvYmplY3QuIikpOwotfQotCi12b2lkIHRocm93Tm90U3VwcG9y
dGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQot
ewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZz
dGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJS
KSk7Ci19Ci0KLXZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAg
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVz
c2FnZSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0
aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIsICZtZXNzYWdlU3RyaW5nKSk7Ci19Ci0KLXZv
aWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7Ci0gICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7Ci0gICAg
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwg
SU5WQUxJRF9TVEFURV9FUlIsICZtZXNzYWdlU3RyaW5nKSk7Ci19Ci0KLXZvaWQgdGhyb3dTZWN1
cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigm
c3RhdGUsIFNFQ1VSSVRZX0VSUiwgbWVzc2FnZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVl
IHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBh
cmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFZhbHVlcykKLXsKLSAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJn
dW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9u
TmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJvbmUgb2Y6ICIpOwotICAgIGJ1aWxk
ZXIuYXBwZW5kKGV4cGVjdGVkVmFsdWVzKTsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigm
c3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOwotfQotCi1KU0M6OkVuY29kZWRKU1Zh
bHVlIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3Qg
Y2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGFwcGVu
ZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgaW50
ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImEg
ZnVuY3Rpb24iKTsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBi
dWlsZGVyLnRvU3RyaW5nKCkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1l
bnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0
IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwot
ICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50
TmFtZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOwotICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiYW4gaW5zdGFuY2Ugb2YgIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoZXhw
ZWN0ZWRUeXBlKTsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBi
dWlsZGVyLnRvU3RyaW5nKCkpOwotfQotCi12b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICB0
aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBBcnJheSBl
bGVtZW50IHR5cGUiKSk7Ci19Ci0KLXZvaWQgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3Rl
ZFR5cGUpCi17Ci0gICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJU
aGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGF0dHJpYnV0ZSBtdXN0
IGJlIGFuIGluc3RhbmNlIG9mICIsIGV4cGVjdGVkVHlwZSkpOwotfQotCi1KU0M6OkVuY29kZWRK
U1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBj
aGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQotewotICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIk1lbWJlciAi
KTsKLSAgICBidWlsZGVyLmFwcGVuZChkaWN0aW9uYXJ5TmFtZSk7Ci0gICAgYnVpbGRlci5hcHBl
bmQoJy4nKTsKLSAgICBidWlsZGVyLmFwcGVuZChtZW1iZXJOYW1lKTsKLSAgICBidWlsZGVyLmFw
cGVuZExpdGVyYWwoIiBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiKTsK
LSAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFR5cGUpOwotICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5j
b2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWls
YWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSkKLXsKLSAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZz
dGF0ZSwgc2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKCZzdGF0ZSwgbWFrZVN0cmluZyhpbnRl
cmZhY2VOYW1lLCAiIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMg
dW5hdmFpbGFibGUiKSkpOwotfQotCi12b2lkIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIHRocm93VHlw
ZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJWYWx1ZSBpcyBub3QgYSBzZXF1ZW5j
ZSIpKTsKLX0KLQotdm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIHByb3ZpZGVkIHZhbHVlIGlzIG5vbi1maW5pdGUiKSk7
Ci19Ci0KLVN0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewotICAgIHJldHVybiBtYWtl
U3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGdldHRl
ciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKLX0K
LQotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNl
TmFtZSwgYXR0cmlidXRlTmFtZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFBy
b21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICByZXR1
cm4gY3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZUdldHRlclR5
cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgYXR0cmlidXRlTmFtZSkpOwotfQotCi1ib29s
IHRocm93U2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmli
dXRlTmFtZSkKLXsKLSAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmco
IlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgc2V0dGVyIGNhbiBv
bmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLVN0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQotewotICAgIHJldHVy
biBtYWtlU3RyaW5nKCJDYW4gb25seSBjYWxsICIsIGludGVyZmFjZU5hbWUsICcuJywgZnVuY3Rp
b25OYW1lLCAiIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKLX0KLQotRW5jb2Rl
ZEpTVmFsdWUgdGhyb3dUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lKQotewotICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUs
IG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpKTsK
LX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3Io
RGVmZXJyZWRQcm9taXNlJiBwcm9taXNlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBtZXRob2ROYW1lKQotewotICAgIHByb21pc2UucmVqZWN0KFR5cGVFcnJvciwgbWFr
ZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1KU0M6OkVuY29kZWRK
U1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCi17
Ci0gICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1h
a2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7Ci19Ci0K
LXZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9u
KQotewotICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7Ci0gICAgSlNDOjpDYWxsVHlwZSBjYWxs
VHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoJmZ1bmN0aW9uLCBjYWxsRGF0YSk7Ci0gICAgQVNTRVJU
KGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKLQotICAgIEpTQzo6TWFya2VkQXJndW1lbnRC
dWZmZXIgYXJndW1lbnRzOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5hcmd1
bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZChzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudChpKSk7Ci0gICAgSlNDOjpjYWxsKCZzdGF0ZSwgJmZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVudHMpOwotfQotCi12b2lkIERPTUNvbnN0
cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiBjZWxsLCBK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QqPihjZWxsKTsKLSAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX2luaXRpYWxpemVGdW5jdGlvbik7Ci19Ci0KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ29uc3Ry
dWN0b3IgcmVxdWlyZXMgJ25ldycgb3BlcmF0b3IiKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSk7Ci19Ci0KLUNhbGxUeXBlIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpnZXRD
YWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCi17Ci0gICAgY2FsbERhdGEubmF0
aXZlLmZ1bmN0aW9uID0gY2FsbFRocm93VHlwZUVycm9yOwotICAgIHJldHVybiBDYWxsVHlwZTo6
SG9zdDsKLX0KLQotdm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlv
bigpKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRp
b24oJnN0YXRlLCBTWU5UQVhfRVJSKSk7Ci19Ci0KLXZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgREFUQV9DTE9ORV9FUlIpKTsKLX0KLQotdm9p
ZCB0aHJvd0luZGV4U2l6ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTkRF
WF9TSVpFX0VSUikpOwotfQotCi12b2lkIHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0
ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFRZUEVfTUlTTUFUQ0hfRVJSKSk7Ci19Ci0KIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5oCShyZXZpc2lvbiAyMTEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjUgKzIzLDE0IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCi0jaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCi0jaW5jbHVkZSAiSlNET01HbG9i
YWxPYmplY3QuaCIKLSNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJKU0R5bmFt
aWNEb3duY2FzdC5oIgotI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgotI2luY2x1ZGUgIlNj
cmlwdFdyYXBwYWJsZUlubGluZXMuaCIKLSNpbmNsdWRlICJXZWJDb3JlVHlwZWRBcnJheUNvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgPGNzdGRk
ZWY+CiAjaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvU2xvdFZp
c2l0b3JJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8aGVhcC9XZWFrLmg+Ci0jaW5jbHVkZSA8aGVhcC9X
ZWFrSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMu
aD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9JdGVyYXRv
ck9wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0NlbGxJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9KU09iamVjdElubGluZXMuaD4KQEAgLTQ5LDggKzM4LDYgQEAKICNpbmNsdWRlIDxydW50
aW1lL0xvb2t1cC5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KICNp
bmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1R5
cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
ICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CkBAIC02NiwxNDAgKzUzLDEwIEBAIGNsYXNzIEpTRnVu
Y3Rpb247CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FjaGVkU2NyaXB0OwotY2xh
c3MgRGVmZXJyZWRQcm9taXNlOwotY2xhc3MgRE9NV2luZG93OwotY2xhc3MgRnJhbWU7CiBjbGFz
cyBVUkw7Ci1jbGFzcyBOb2RlOwotCi1zdHJ1Y3QgRXhjZXB0aW9uRGV0YWlscyB7Ci0gICAgU3Ry
aW5nIG1lc3NhZ2U7Ci0gICAgaW50IGxpbmVOdW1iZXIgeyAwIH07Ci0gICAgaW50IGNvbHVtbk51
bWJlciB7IDAgfTsKLSAgICBTdHJpbmcgc291cmNlVVJMOwotfTsKLQotLy8gQmFzZSBjbGFzcyBm
b3IgYWxsIGNvbnN0cnVjdG9yIG9iamVjdHMgaW4gdGhlIEpTQyBiaW5kaW5ncy4KLWNsYXNzIERP
TUNvbnN0cnVjdG9yT2JqZWN0IDogcHVibGljIEpTRE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0
eXBlZGVmIEpTRE9NT2JqZWN0IEJhc2U7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0
YW5jZSB8IEpTQzo6SW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSB8IEpTQzo6VHlwZU9mU2hv
dWxkQ2FsbEdldENhbGxEYXRhOwotICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKLQot
cHJvdGVjdGVkOgotICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0dXJlKiwgSlNE
T01HbG9iYWxPYmplY3QmKTsKLQotICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpT
T2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTQzo6Q2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwg
SlNDOjpDYWxsRGF0YSYpOwotfTsKLQotY2xhc3MgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmpl
Y3QgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYg
RE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLQotcHJvdGVjdGVkOgotICAgIERPTUNvbnN0cnVj
dG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsK
LSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90Vmlz
aXRvciYpOwotCi0gICAgSlNDOjpKU0Z1bmN0aW9uKiBpbml0aWFsaXplRnVuY3Rpb24oKTsKLSAg
ICB2b2lkIHNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiwgSlNDOjpKU0Z1bmN0aW9uJik7
Ci0KLXByaXZhdGU6Ci0gICAgSlNDOjpXcml0ZUJhcnJpZXI8SlNDOjpKU0Z1bmN0aW9uPiBtX2lu
aXRpYWxpemVGdW5jdGlvbjsKLX07Ci0KLURPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEpTQzo6
RXhlY1N0YXRlKik7Ci1ET01XaW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSop
OwotRE9NV2luZG93JiBmaXJzdERPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwotCi1XRUJDT1JF
X0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVy
RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBhdHRyaWJ1dGVOYW1lKTsKLQotdm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1X
RUJDT1JFX0VYUE9SVCBib29sIHRocm93U2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSk7Ci0KLXZvaWQgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLXZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd0RPTVN5bnRheEVy
cm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7IC8vIE5vdCB0aGUgc2FtZSBh
cyBhIEphdmFTY3JpcHQgc3ludGF4IGVycm9yLgotdm9pZCB0aHJvd0luZGV4U2l6ZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93SW52YWxpZFN0YXRl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNz
YWdlKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLXZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd05vdFN1cHBv
cnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciog
bWVzc2FnZSk7Ci12b2lkIHRocm93U2VjdXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lk
IHRocm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
KTsKLXZvaWQgdGhyb3dUeXBlTWlzbWF0Y2hFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYpOwotCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJn
dW1lbnRNdXN0QmVFbnVtRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1
bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNo
YXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25z
dCBjaGFyKiBleHBlY3RlZFZhbHVlcyk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1l
bnRNdXN0QmVGdW5jdGlvbkVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
dW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBj
aGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7Ci1X
RUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3Io
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4
LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUp
OwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1JlcXVpcmVkTWVtYmVy
VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciog
bWVtYmVyTmFtZSwgY29uc3QgY2hhciogZGljdGlvbmFyeU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVj
dGVkVHlwZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVj
dXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUpOwotCi1TdHJpbmcgbWFrZUdldHRlclR5
cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0
cmlidXRlTmFtZSk7Ci1TdHJpbmcgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIq
IGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotCi1XRUJDT1JFX0VY
UE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93R2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogYXR0cmlidXRlTmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVl
IHRocm93VGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7Ci0KLVdF
QkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJU
eXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFs
dWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKERlZmVycmVkUHJvbWlzZSYsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpOwotV0VCQ09S
RV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJy
b3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBvcGVyYXRpb25OYW1lKTsKLQotV0VCQ09SRV9FWFBPUlQgSlNDOjpTdHJ1Y3R1cmUqIGdldENh
Y2hlZERPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYsIGNvbnN0IEpTQzo6Q2xhc3NJbmZv
Kik7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNE
T01HbG9iYWxPYmplY3QmLCBKU0M6OlN0cnVjdHVyZSosIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpTdHJ1Y3R1cmUqIGdldERP
TVN0cnVjdHVyZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVu
YW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpTdHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1
cmUoSlNDOjpFeGVjU3RhdGUqKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlND
OjpKU09iamVjdCogZ2V0RE9NUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0
Kik7Ci0KLXZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mKTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0
aW4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlvbiwg
SlNET01HbG9iYWxPYmplY3QmKTsKLQotSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25l
cihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKik7Ci12b2lkKiB3cmFwcGVyS2V5
KEpTQzo6QXJyYXlCdWZmZXIqKTsKLQotSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCopOwotSlNET01PYmplY3QqIGdldElubGluZUNhY2hl
ZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgU2NyaXB0V3JhcHBhYmxlKik7Ci1KU0M6OkpTQXJy
YXlCdWZmZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpB
cnJheUJ1ZmZlciopOwotCi1ib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0KiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqKTsKLWJvb2wg
c2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUq
LCBKU0RPTU9iamVjdCogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25l
cik7Ci1ib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpB
cnJheUJ1ZmZlciosIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxl
T3duZXIqIHdyYXBwZXJPd25lcik7Ci0KLWJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCopOwotYm9vbCBjbGVhcklubGluZUNh
Y2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgU2NyaXB0V3JhcHBhYmxlKiwgSlNET01PYmpl
Y3QqIHdyYXBwZXIpOwotYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiwgSlNDOjpBcnJheUJ1ZmZlciosIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlcik7Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFw
cGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNzJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01D
bGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiB3b3JsZCwgUmVmPERPTUNsYXNzPiYgb2JqZWN0KSB7IHJldHVybiBnZXRDYWNoZWRXcmFw
cGVyKHdvcmxkLCBvYmplY3QuZ2V0KCkpOyB9Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywg
dHlwZW5hbWUgV3JhcHBlckNsYXNzPiB2b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQm
LCBET01DbGFzcyosIFdyYXBwZXJDbGFzcyopOwotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3Ms
IHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gdm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29y
bGQmLCBET01DbGFzcyosIFdyYXBwZXJDbGFzcyopOwotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xh
c3MsIHR5cGVuYW1lIFQ+IGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCosIFJl
ZjxUPiYmKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8RE9NQ2xhc3Ms
IFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNz
Pjo6V3JhcHBlckNsYXNzKj46OnR5cGU7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlw
ZW5hbWUgVD4gYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYp
IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2
YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3Jh
cHBlckNsYXNzKj46OnR5cGU7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBKU0M6OkpT
VmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgRE9NQ2xhc3Mm
KTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSYpOwogCiB2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0
cmluZyYpOwogCi1jb25zdCBKU0M6Okhhc2hUYWJsZSYgZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0
YShKU0M6OlZNJiwgY29uc3QgSlNDOjpIYXNoVGFibGUmIHN0YXRpY1RhYmxlKTsKLQotU3RyaW5n
IHJldHJpZXZlRXJyb3JNZXNzYWdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSBleGNlcHRpb24sIEpTQzo6Q2F0Y2hTY29wZSYpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCBy
ZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBD
YWNoZWRTY3JpcHQqID0gbnVsbHB0cik7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKiwgQ2FjaGVkU2NyaXB0KiA9IG51
bGxwdHIsIEV4Y2VwdGlvbkRldGFpbHMqID0gbnVsbHB0cik7Ci12b2lkIHJlcG9ydEN1cnJlbnRF
eGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKLQotSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2VwdGlvbiYmKTsKLUpTQzo6SlNWYWx1ZSBjcmVhdGVE
T01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBFeGNlcHRpb25Db2RlLCBjb25zdCBTdHJpbmcm
KTsKLQotLy8gQ29udmVydCBhIERPTSBpbXBsZW1lbnRhdGlvbiBleGNlcHRpb24gaW50byBhIEph
dmFTY3JpcHQgZXhjZXB0aW9uIGluIHRoZSBleGVjdXRpb24gc3RhdGUuCi12b2lkIHByb3BhZ2F0
ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYm
KTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uU2xvd1BhdGgoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb24mJik7Ci0KIEpTQzo6SlNWYWx1
ZSBqc1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFVSTCYpOyAvLyBlbXB0eSBpZiB0aGUg
VVJMIGlzIG51bGwKIAogSlNDOjpKU1ZhbHVlIGpzU3RyaW5nT3JVbmRlZmluZWQoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBTdHJpbmcmKTsgLy8gdW5kZWZpbmVkIGlmIHRoZSBzdHJpbmcgaXMgbnVs
bApAQCAtMjEwLDcgKzY3LDYgQEAgSlNDOjpKU1ZhbHVlIGpzU3RyaW5nT3JVbmRlZmluZWQoSlND
OjpFeAogSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBTdHJpbmcmKTsKIAogU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVy
dHlOYW1lKTsKLQogQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6
UHJvcGVydHlOYW1lKTsKIAogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVT
dHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKQEAgLTI1NCw5
ICsxMTAsNiBAQCBKU0M6OkpTVmFsdWUganNEYXRlKEpTQzo6RXhlY1N0YXRlKiwgZG91CiAvLyBO
YU4gaWYgdGhlIHZhbHVlIGNhbid0IGJlIGNvbnZlcnRlZCB0byBhIGRhdGUuCiBkb3VibGUgdmFs
dWVUb0RhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOwogCi0vLyBWYWxpZGF0ZXMg
dGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4x
LjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KLUpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgdW5zaWduZWQmIGxlbmd0aCk7Ci0KIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5
QnVmZmVyJik7CiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyYpOwogSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXIqKTsKQEAg
LTI2NywxMCArMTIwLDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMo
SgogdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFZlY3RvcjxSZWZQdHI8VD4+Jik7CiBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgSlND
OjpQcml2YXRlTmFtZSYpOwogCi1KU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0
YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xv
YmFsT2JqZWN0JiwgY29uc3QgVCYpOwotSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvckVuZChKU0M6
OkV4ZWNTdGF0ZSYpOwotCiBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvUG9zc2libHlT
aGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiBSZWZQdHI8SlND
OjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSk7CiBSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MTZBcnJh
eShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKQEAgLTI5MywyODUgKzE0MiwxNiBAQCBSZWZQdHI8
SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzCiBSZWZQdHI8SlNDOjpGbG9hdDMyQXJy
YXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiBSZWZQ
dHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYsIEpT
Qzo6SlNWYWx1ZSk7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEpTVHlwZT4gVmVj
dG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci1XRUJDT1JFX0VYUE9SVCBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKLQotZW51bSBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiB7IERvTm90
UmVwb3J0U2VjdXJpdHlFcnJvciwgTG9nU2VjdXJpdHlFcnJvciwgVGhyb3dTZWN1cml0eUVycm9y
IH07Ci1uYW1lc3BhY2UgQmluZGluZ1NlY3VyaXR5IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIFQmKTsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYs
IFQqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNlcHRpb25PcjxUKj4gY2hlY2tTZWN1
cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb25PcjxUKj4mJik7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpT
Qzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uT3I8VCY+JiYpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dB
Y2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSosIERPTVdpbmRvdyYsIFNlY3VyaXR5UmVw
b3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7Ci0gICAgYm9vbCBzaG91bGRBbGxvd0Fj
Y2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlJiwgRE9NV2luZG93JiwgU3RyaW5nJiBtZXNz
YWdlKTsKLSAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSos
IEZyYW1lKiwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1cml0eUVycm9yKTsKLSAg
ICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSYsIEZyYW1lJiwg
U3RyaW5nJiBtZXNzYWdlKTsKLSAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKEpTQzo6
RXhlY1N0YXRlJiwgTm9kZSopOwotfTsKLQotdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1l
KEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQogU3RyaW5nIHByb3BlcnR5TmFtZVRv
U3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKIEF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0
b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7CiAKLXRlbXBsYXRlPEpTQzo6TmF0aXZlRnVu
Y3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1
bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotCi0KLWVudW0gY2xhc3MgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3IgeyBU
aHJvdywgUmV0dXJuRWFybHksIFJlamVjdFByb21pc2UsIEFzc2VydCB9OwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBKU0NsYXNzPgotc3RydWN0IEJpbmRpbmdDYWxsZXIgewotICAgIHVzaW5nIEF0dHJp
YnV0ZVNldHRlckZ1bmN0aW9uID0gYm9vbChKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6
OkpTVmFsdWUsIEpTQzo6VGhyb3dTY29wZSYpOwotICAgIHVzaW5nIEF0dHJpYnV0ZUdldHRlckZ1
bmN0aW9uID0gSlNDOjpKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgSlNDbGFzcyYsIEpTQzo6VGhy
b3dTY29wZSYpOwotICAgIHVzaW5nIE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNv
ZGVkSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBKU0M6OlRocm93U2NvcGUmKTsK
LSAgICB1c2luZyBQcm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6OkVuY29kZWRK
U1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDbGFzcyosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYs
IEpTQzo6VGhyb3dTY29wZSYpOwotCi0gICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RGb3JBdHRyaWJ1
dGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLSAgICBzdGF0aWMgSlND
bGFzcyogY2FzdEZvck9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYpOwotCi0gICAgdGVtcGxhdGU8
UHJvbWlzZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNhbGxlciwgQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmVq
ZWN0UHJvbWlzZT4KLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxsUHJvbWlzZU9w
ZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJv
bWlzZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChz
dGF0ZSk7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3Rh
dGUtPnZtKCkpOwotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigq
c3RhdGUpOwotICAgICAgICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OkFzc2VydCAmJiBVTkxJS0VMWSghdGhpc09iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4g
cmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKHByb21pc2UuZ2V0KCksIEpTQ2xhc3M6Omlu
Zm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25OYW1lKTsKLSAgICAgICAgQVNTRVJUKHRoaXNPYmpl
Y3QpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIEpTQ2xh
c3M6OmluZm8oKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhlIGJp
bmRpbmcgZ2VuZXJhdGVkIGNvZGUgdG8gdXNlIHJlZmVyZW5jZXMgZm9yIHN0YXRlIGFuZCB0aGlz
T2JqZWN0LgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uQ2FsbGVyKHN0YXRlLCB0aGlzT2JqZWN0
LCBXVEZNb3ZlKHByb21pc2UpLCB0aHJvd1Njb3BlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxP
cGVyYXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgotICAg
IHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShz
dGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yT3BlcmF0aW9u
KCpzdGF0ZSk7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdyAhPSBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6QXNzZXJ0ICYmIFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgewotICAgICAgICAgICAgaWYg
KHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlND
bGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOwotICAgICAgICAgICAgLy8g
Rm9yIGN1c3RvbSBwcm9taXNlLXJldHVybmluZyBvcGVyYXRpb25zCi0gICAgICAgICAgICByZXR1
cm4gcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFzczo6aW5mbygp
LT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVCh0
aGlzT2JqZWN0KTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBKU0NsYXNzOjppbmZvKCkpOwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9y
IHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2RlIHRvIHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBh
bmQgdGhpc09iamVjdC4KLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhp
c09iamVjdCwgdGhyb3dTY29wZSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8QXR0cmlidXRlU2V0
dGVyRnVuY3Rpb24gc2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KLSAgICBzdGF0aWMgYm9vbCBzZXRBdHRy
aWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1
ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0
ZU5hbWUpCi0gICAgewotICAgICAgICBBU1NFUlQoc3RhdGUpOwotICAgICAgICBhdXRvIHRocm93
U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAgICAgYXV0byog
dGhpc09iamVjdCA9IGNhc3RGb3JBdHRyaWJ1dGUoKnN0YXRlLCB0aGlzVmFsdWUpOwotICAgICAg
ICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIChzaG91bGRU
aHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpID8gdGhyb3dTZXR0ZXJUeXBl
RXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0
cmlidXRlTmFtZSkgOiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHNldHRlcigqc3RhdGUsICp0aGlz
T2JqZWN0LCBKU0M6OkpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0aHJvd1Njb3BlKTsK
LSAgICB9CitXRUJDT1JFX0VYUE9SVCBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKIAotICAgIHRlbXBsYXRlPEF0dHJpYnV0ZUdldHRlckZ1bmN0
aW9uIGdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUg
YXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlz
VmFsdWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi0gICAgewotICAgICAgICBBU1NFUlQo
c3RhdGUpOwotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0
YXRlLT52bSgpKTsKLSAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JBdHRyaWJ1dGUo
KnN0YXRlLCB0aGlzVmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3QpKSB7
Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6
OlRocm93KQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3Rh
dGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1l
KTsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6UmVqZWN0UHJvbWlzZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZVdp
dGhHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0
cmlidXRlTmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlND
Ojpqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVl
OjplbmNvZGUoZ2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpKTsKLSAgICB9
Ci19OwordGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CiAKLS8vIEV4Y2VwdGlv
bk9yIGhhbmRsaW5nLgotdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25Pcjx2b2lkPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3Qm
LCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01H
bG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKTsK
IAogLy8gSW5saW5lIGZ1bmN0aW9ucyBhbmQgdGVtcGxhdGUgZGVmaW5pdGlvbnMuCiAKLWlubGlu
ZSBKU0M6OlN0cnVjdHVyZSogRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQotewotICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLX0KLQotaW5saW5lIERPTUNvbnN0cnVjdG9yT2JqZWN0
OjpET01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogSlNET01PYmplY3Qoc3RydWN0dXJlLCBn
bG9iYWxPYmplY3QpCi17Ci19Ci0KLWlubGluZSBTdHJpbmcgRE9NQ29uc3RydWN0b3JPYmplY3Q6
OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCopCi17Ci0gICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
RnVuY3Rpb24iKTsKLX0KLQotaW5saW5lIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0OjpE
T01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogRE9NQ29uc3RydWN0b3JPYmpl
Y3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLWlubGluZSBKU0M6OkpTRnVuY3Rp
b24qIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojppbml0aWFsaXplRnVuY3Rpb24oKQot
ewotICAgIHJldHVybiBtX2luaXRpYWxpemVGdW5jdGlvbi5nZXQoKTsKLX0KLQotaW5saW5lIHZv
aWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnNldEluaXRpYWxpemVGdW5jdGlvbihK
U0M6OlZNJiB2bSwgSlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAgICBtX2luaXRpYWxp
emVGdW5jdGlvbi5zZXQodm0sIHRoaXMsICZmdW5jdGlvbik7Ci19Ci0KLWlubGluZSBKU0RPTUds
b2JhbE9iamVjdCogZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICAvLyBGSVhNRTogQ2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIHNo
b3VsZCBiZSB1c2luZyB0aGUgZ2xvYmFsIG9iamVjdAotICAgIC8vIGZyb20gd2hpY2ggdGhlIG9i
amVjdCBpcyBiZWluZyBjcmVhdGVkLCBpbnN0ZWFkIG9mIGFzc3VtaW5nIHRoZSBsZXhpY2FsIG9u
ZS4KLSAgICAvLyBlLmcuIHN1YmZyYW1lLmRvY3VtZW50LmJvZHkgc2hvdWxkIHVzZSB0aGUgc3Vi
ZnJhbWUncyBnbG9iYWwgb2JqZWN0LCBub3QgdGhlIGxleGljYWwgb25lLgotICAgIHJldHVybiBK
U0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3Ry
dWN0dXJlKiBnZXRET01TdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCi17Ci0gICAgaWYgKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRD
YWNoZWRET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmluZm8oKSkpCi0g
ICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgcmV0dXJuIGNhY2hlRE9NU3RydWN0dXJlKGds
b2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmpl
Y3QsIFdyYXBwZXJDbGFzczo6Y3JlYXRlUHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSksIFdy
YXBwZXJDbGFzczo6aW5mbygpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNz
PiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgd3Jvbmcu
IEl0IHVzZXMgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QgZm9yIGNyZWF0aW5nIHRoZSBwcm90b3R5
cGUgc3RydWN0dXJlLgotICAgIHJldHVybiBnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihl
eGVjLT52bSgpLCAqZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3Qq
IGdldERPTVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQotewotICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oYXNPYmpl
Y3QoZ2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFzcz4odm0sICpKU0M6OmpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpLT5zdG9yZWRQcm90b3R5cGUoKSkpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVh
dGVKU0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRp
YWxpemVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBK
U0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0NsYXNzOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpT
Q2xhc3M+KGdsb2JhbE9iamVjdC52bSgpLCBnbG9iYWxPYmplY3QpLCAmZ2xvYmFsT2JqZWN0KTsK
LSAgICBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhzdGF0ZSwgKm9iamVjdCwgaW5p
dGlhbGl6ZUZ1bmN0aW9uKTsKLSAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUob2JqZWN0
KTsKLX0KLQotaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3Jh
cHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciopCi17Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcio+KHdvcmxkLnZtKCkubV90eXBlZEFy
cmF5Q29udHJvbGxlci5nZXQoKSktPndyYXBwZXJPd25lcigpOwotfQotCi1pbmxpbmUgdm9pZCog
d3JhcHBlcktleShKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QpCi17Ci0gICAgcmV0dXJuIGRv
bU9iamVjdDsKLX0KLQotaW5saW5lIEpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVy
KERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqKSB7IHJldHVybiBudWxscHRyOyB9Ci1pbmxpbmUgYm9v
bCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9i
amVjdCosIEpTQzo6V2Vha0hhbmRsZU93bmVyKikgeyByZXR1cm4gZmFsc2U7IH0KLWlubGluZSBi
b29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNE
T01PYmplY3QqKSB7IHJldHVybiBmYWxzZTsgfQotCi1pbmxpbmUgSlNET01PYmplY3QqIGdldElu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxl
KiBkb21PYmplY3QpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gZG9tT2JqZWN0LT53cmFwcGVyKCk7Ci19Ci0KLWlubGlu
ZSBKU0M6OkpTQXJyYXlCdWZmZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogYnVmZmVyKQotewotICAgIGlmICghd29ybGQu
aXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZlci0+
bV93cmFwcGVyLmdldCgpOwotfQotCi1pbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVy
KERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RP
TU9iamVjdCogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcikKLXsK
LSAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBk
b21PYmplY3QtPnNldFdyYXBwZXIod3JhcHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpK
U0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVy
KQotewotICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGRvbU9iamVjdC0+bV93cmFwcGVyID0gSlNDOjpXZWFrPEpTQzo6SlNBcnJheUJ1ZmZlcj4o
d3JhcHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1p
bmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3Js
ZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyKQotewot
ICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRv
bU9iamVjdC0+Y2xlYXJXcmFwcGVyKHdyYXBwZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1p
bmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3Js
ZCwgSlNDOjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBw
ZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgd2Vha0NsZWFyKGRvbU9iamVjdC0+bV93cmFwcGVyLCB3cmFwcGVyKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpT
T2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNz
JiBkb21PYmplY3QpCi17Ci0gICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNoZWRX
cmFwcGVyKHdvcmxkLCAmZG9tT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAg
cmV0dXJuIHdvcmxkLm1fd3JhcHBlcnMuZ2V0KHdyYXBwZXJLZXkoJmRvbU9iamVjdCkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxp
bmUgdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRv
bU9iamVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQotewotICAgIEpTQzo6V2Vha0hhbmRsZU93
bmVyKiBvd25lciA9IHdyYXBwZXJPd25lcih3b3JsZCwgZG9tT2JqZWN0KTsKLSAgICBpZiAoc2V0
SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyLCBvd25lcikpCi0g
ICAgICAgIHJldHVybjsKLSAgICB3ZWFrQWRkKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXko
ZG9tT2JqZWN0KSwgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+KHdyYXBwZXIsIG93bmVyLCAmd29y
bGQpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJD
bGFzcz4gaW5saW5lIHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwg
RE9NQ2xhc3MqIGRvbU9iamVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQotewotICAgIGlmIChj
bGVhcklubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCi0gICAg
ICAgIHJldHVybjsKLSAgICB3ZWFrUmVtb3ZlKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXko
ZG9tT2JqZWN0KSwgd3JhcHBlcik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0
eXBlbmFtZSBUPiBpbmxpbmUgYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFJlZjxUPiYmIGRvbU9iamVjdCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8c3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCi17Ci0gICAg
dXNpbmcgV3JhcHBlckNsYXNzID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PERPTUNsYXNzPjo6V3JhcHBlckNsYXNzOwotCi0gICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVy
KGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0KSk7Ci0gICAgYXV0byogZG9tT2JqZWN0
UHRyID0gZG9tT2JqZWN0LnB0cigpOwotICAgIGF1dG8qIHdyYXBwZXIgPSBXcmFwcGVyQ2xhc3M6
OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihnbG9iYWxPYmplY3QtPnZtKCks
ICpnbG9iYWxPYmplY3QpLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoZG9tT2JqZWN0KSk7Ci0gICAg
Y2FjaGVXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0UHRyLCB3cmFwcGVy
KTsKLSAgICByZXR1cm4gd3JhcHBlcjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3Ms
IHR5cGVuYW1lIFQ+IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjwhc3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3Jh
cHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCi17Ci0g
ICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8RE9NQ2xhc3M+KGdsb2JhbE9iamVjdCwgc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PERPTUNsYXNzPihXVEZNb3ZlKGRvbU9iamVjdCkpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERPTUNsYXNzJiBk
b21PYmplY3QpCi17Ci0gICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGds
b2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7
Ci0gICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgUmVmPERP
TUNsYXNzPihkb21PYmplY3QpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5s
aW5lIEpTQ2xhc3MmIGNhc3RUaGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQotewotICAg
IGF1dG8gdGhpc1ZhbHVlID0gc3RhdGUudGhpc1ZhbHVlKCk7Ci0gICAgYXV0byBjYXN0ZWRUaGlz
ID0ganNEeW5hbWljRG93bmNhc3Q8SlNDbGFzcyo+KHN0YXRlLnZtKCksIHRoaXNWYWx1ZSk7Ci0g
ICAgQVNTRVJUKGNhc3RlZFRoaXMpOwotICAgIHJldHVybiAqY2FzdGVkVGhpczsKLX0KLQogaW5s
aW5lIGludDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBib29sJiBva2F5KQogewogICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50
b051bWJlcihleGVjKTsKQEAgLTU3OSwzMiArMTU5LDYgQEAgaW5saW5lIGludDMyX3QgZmluaXRl
SW50MzJWYWx1ZShKU0M6OkpTVgogICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKIH0K
IAotLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBl
IHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCi1pbmxpbmUgSlNDOjpKU09i
amVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIHVuc2lnbmVkJiBsZW5ndGgpCi17Ci0gICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgSlNDOjpKU09i
amVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0KCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAg
ICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLQotICAgIEpTQzo6SlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotCi0gICAgaWYgKGxlbmd0aFZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBz
Y29wZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGxlbmd0aCA9IGxl
bmd0aFZhbHVlLnRvVUludDMyKCZleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KIGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6QXJyYXlCdWZmZXImIGJ1ZmZlcikKIHsKICAgICBpZiAoYXV0byByZXN1bHQg
PSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgYnVmZmVyKSkKQEAgLTY3
NiwyMSArMjMwLDYgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKgog
ICAgIHJldHVybiBKU0M6OlN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHByaXZhdGVOYW1lLnVp
ZCgpKTsKIH0KIAotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB2YWx1ZSwgZmFsc2Up
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVy
YXRvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFQmIHZhbHVlKQotewotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9i
amVjdCgmc3RhdGUsIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZSksIGZhbHNlKTsK
LX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlKQotewotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUs
IEpTQzo6anNVbmRlZmluZWQoKSwgdHJ1ZSk7Ci19Ci0KIGlubGluZSBSZWZQdHI8SlNDOjpBcnJh
eUJ1ZmZlclZpZXc+IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0s
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93
bmNhc3Q8SlNDOjpKU0FycmF5QnVmZmVyVmlldyo+KHZtLCB2YWx1ZSk7CkBAIC03MjcsMzAgKzI2
Niw2IEBAIGlubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXIKIGlubGluZSBS
ZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYg
dm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlw
ZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KIGlubGluZSBSZWZQdHI8
SlNDOjpGbG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3
PEpTQzo6RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgSlNUPiBpbmxpbmUgVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBKU0M6OlZN
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93U2VxdWVu
Y2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0K
LSAgICBWZWN0b3I8UmVmPFQ+PiByZXN1bHQ7Ci0gICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRl
LCB2YWx1ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
Qzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoanNWYWx1ZS5pbmhlcml0cyh2bSwgSlNUOjppbmZv
KCkpKSB7Ci0gICAgICAgICAgICBhdXRvKiBvYmplY3QgPSBKU1Q6OnRvV3JhcHBlZCh2bSwganNW
YWx1ZSk7Ci0gICAgICAgICAgICBBU1NFUlQob2JqZWN0KTsKLSAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoKm9iamVjdCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhyb3dBcnJheUVs
ZW1lbnRUeXBlRXJyb3IoKnN0YXRlLCBzY29wZSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQogaW5saW5lIFN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2wo
KSk7CkBAIC03NjcsNTkgKzI4Miw0IEBAIHRlbXBsYXRlPEpTQzo6TmF0aXZlRnVuY3Rpb24gbmF0
aXZlRnVuY3QKICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpKU0Z1bmN0aW9u
OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBsZW5ndGgs
IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5hdGl2ZUZ1bmN0aW9uKSk7CiB9CiAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKLXsKLSAg
ICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvblNsb3dQYXRoKHN0YXRlLCB0aHJvd1Njb3BlLCBXVEZNb3ZlKGV4Y2VwdGlv
bikpOwotfQotCi1pbmxpbmUgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYg
dmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkKLSAgICAg
ICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhj
ZXB0aW9uKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUp
Ci17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBw
cm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRp
b24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHJldHVybiB0b0pTKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpCi17Ci0gICAg
aWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVF
eGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0g
ICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZz
dGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3Vy
aXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQmIG5vZGUpCi17Ci0gICAgcmV0dXJu
IHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCAmbm9kZSkgPyAmbm9kZSA6IG51bGxwdHI7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBCaW5kaW5nU2VjdXJpdHk6OmNo
ZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVCogbm9kZSkKLXsKLSAg
ICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIG5vZGUpID8gbm9kZSA6IG51
bGxwdHI7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBFeGNlcHRpb25PcjxUKj4g
QmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEV4Y2VwdGlvbk9yPFQqPiYmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICByZXR1
cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgp
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEV4Y2VwdGlvbk9yPFQqPiBCaW5k
aW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
RXhjZXB0aW9uT3I8VCY+JiYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmhhc0V4Y2VwdGlvbigp
KQotICAgICAgICByZXR1cm4gdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpOwotICAgIHJldHVybiBj
aGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwot
fQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmdDYWxsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdDYWxsZXIuaAkocmV2aXNpb24gMjExMzUzKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoyMTEzNTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdDYWxsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDgyNSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2LCAy
MDA4LTIwMDksIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDEyIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJE
T01XcmFwcGVyV29ybGQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAi
RXhjZXB0aW9uT3IuaCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUg
IkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIkpTRHluYW1pY0Rvd25jYXN0LmgiCisjaW5jbHVk
ZSAiU2NyaXB0V3JhcHBhYmxlLmgiCisjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5o
IgorI2luY2x1ZGUgIldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIgorI2luY2x1ZGUgPGNz
dGRkZWY+CisjaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvU2xv
dFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9XZWFrLmg+CisjaW5jbHVkZSA8aGVh
cC9XZWFrSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGlu
ZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9JdGVy
YXRvck9wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJ
bmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NlbGxJbmxpbmVzLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU09iamVjdElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJh
eXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0xvb2t1cC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvT2Jq
ZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4K
KyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9UeXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmg+CisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisvLyBGSVhNRTog
V2UgY291bGQgbWFrZSB0aGlzIGZpbGUgYSBsb3QgZWFzaWVyIHRvIHJlYWQgYnkgcHV0dGluZyBh
bGwgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGF0IHRoZSB0b3AsCisvLyBhbmQgZnVuY3Rpb24gZGVm
aW5pdGlvbnMgYmVsb3csIGV2ZW4gZm9yIHRlbXBsYXRlIGFuZCBpbmxpbmUgZnVuY3Rpb25zLgor
CituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEpTRnVuY3Rpb247Cit9CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ2FjaGVkU2NyaXB0OworY2xhc3MgRGVmZXJyZWRQcm9taXNlOworY2xh
c3MgRE9NV2luZG93OworY2xhc3MgRnJhbWU7CitjbGFzcyBVUkw7CitjbGFzcyBOb2RlOworCitz
dHJ1Y3QgRXhjZXB0aW9uRGV0YWlscyB7CisgICAgU3RyaW5nIG1lc3NhZ2U7CisgICAgaW50IGxp
bmVOdW1iZXIgeyAwIH07CisgICAgaW50IGNvbHVtbk51bWJlciB7IDAgfTsKKyAgICBTdHJpbmcg
c291cmNlVVJMOworfTsKKworLy8gQmFzZSBjbGFzcyBmb3IgYWxsIGNvbnN0cnVjdG9yIG9iamVj
dHMgaW4gdGhlIEpTQyBiaW5kaW5ncy4KK2NsYXNzIERPTUNvbnN0cnVjdG9yT2JqZWN0IDogcHVi
bGljIEpTRE9NT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTRE9NT2JqZWN0IEJhc2U7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IEpTQzo6SW1wbGVtZW50c0Rl
ZmF1bHRIYXNJbnN0YW5jZSB8IEpTQzo6VHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRhOworICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKKworcHJvdGVjdGVkOgorICAgIERPTUNvbnN0
cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKKworICAg
IHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CisgICAgc3RhdGljIEpT
Qzo6Q2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgSlNDOjpDYWxsRGF0YSYpOworfTsKKwor
Y2xhc3MgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QgOiBwdWJsaWMgRE9NQ29uc3RydWN0
b3JPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFz
ZTsKKworcHJvdGVjdGVkOgorICAgIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworCisgICAgSlNDOjpKU0Z1
bmN0aW9uKiBpbml0aWFsaXplRnVuY3Rpb24oKTsKKyAgICB2b2lkIHNldEluaXRpYWxpemVGdW5j
dGlvbihKU0M6OlZNJiwgSlNDOjpKU0Z1bmN0aW9uJik7CisKK3ByaXZhdGU6CisgICAgSlNDOjpX
cml0ZUJhcnJpZXI8SlNDOjpKU0Z1bmN0aW9uPiBtX2luaXRpYWxpemVGdW5jdGlvbjsKK307CisK
K0RPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CitET01XaW5kb3cm
IGFjdGl2ZURPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworRE9NV2luZG93JiBmaXJzdERPTVdp
bmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworCitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1Zh
bHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworV0VCQ09SRV9F
WFBPUlQgdm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKKwor
dm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7CitXRUJDT1JFX0VYUE9SVCBib29sIHRocm93
U2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CisKK3ZvaWQg
dGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmKTsKK3ZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYpOwordm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJik7IC8vIE5vdCB0aGUgc2FtZSBhcyBhIEphdmFTY3JpcHQgc3ludGF4IGVy
cm9yLgordm9pZCB0aHJvd0luZGV4U2l6ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJik7Cit2b2lkIHRocm93SW52YWxpZFN0YXRlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKK1dFQkNPUkVfRVhQT1JUIHZv
aWQgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmKTsKK3ZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVzc2FnZSk7Cit2b2lkIHRocm93U2Vj
dXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSk7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHRocm93U2VxdWVuY2VUeXBlRXJyb3Io
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dUeXBlTWlzbWF0
Y2hFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOworCitXRUJDT1JFX0VY
UE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBj
b25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFZhbHVlcyk7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwg
Y29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5h
bWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVtYmVyTmFtZSwgY29uc3QgY2hhciog
ZGljdGlvbmFyeU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7CitKU0M6OkVuY29kZWRK
U1ZhbHVlIHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVy
ZmFjZU5hbWUpOworCitTdHJpbmcgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitTdHJpbmcgbWFr
ZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIGF0dHJpYnV0ZU5hbWUpOworCitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVl
IHRocm93R2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitX
RUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsK
K1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlz
VHlwZUVycm9yKERlZmVycmVkUHJvbWlzZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNW
YWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25z
dCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKTsKKworV0VC
Q09SRV9FWFBPUlQgSlNDOjpTdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShKU0RPTUds
b2JhbE9iamVjdCYsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7CitXRUJDT1JFX0VYUE9SVCBKU0M6
OlN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlN0
cnVjdHVyZSosIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFdy
YXBwZXJDbGFzcz4gSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVjdHVyZShKU0M6OlZNJiwgSlNE
T01HbG9iYWxPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpT
dHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90
eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisKK3ZvaWQgY2FsbEZ1bmN0aW9u
V2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0JiB0aGlz
T2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4g
SlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTRnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmplY3QmKTsKKwor
SlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBKU0M6
OkFycmF5QnVmZmVyKik7Cit2b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIqKTsKKwor
SlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9p
ZCopOworSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxk
JiwgU2NyaXB0V3JhcHBhYmxlKik7CitKU0M6OkpTQXJyYXlCdWZmZXIqIGdldElubGluZUNhY2hl
ZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciopOworCitib29sIHNl
dElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0
KiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqKTsKK2Jvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3JhcHBlciwg
SlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcik7Citib29sIHNldElubGluZUNhY2hl
ZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciosIEpTQzo6SlNBcnJh
eUJ1ZmZlciogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcik7CisK
K2Jvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBK
U0RPTU9iamVjdCopOworYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiwgU2NyaXB0V3JhcHBhYmxlKiwgSlNET01PYmplY3QqIHdyYXBwZXIpOworYm9vbCBjbGVh
cklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlcios
IEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlcik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNs
YXNzPiBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERP
TUNsYXNzJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNPYmpl
Y3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgUmVmPERPTUNsYXNz
PiYgb2JqZWN0KSB7IHJldHVybiBnZXRDYWNoZWRXcmFwcGVyKHdvcmxkLCBvYmplY3QuZ2V0KCkp
OyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiB2
b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyosIFdyYXBwZXJDbGFz
cyopOwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4g
dm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyosIFdyYXBwZXJD
bGFzcyopOwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGF1dG8gY3Jl
YXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUPiYmKSAtPiB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGU7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gYXV0byBjcmVhdGVXcmFw
cGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPCFzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGU7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0
ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgRE9NQ2xhc3MmKTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
SlNDbGFzcz4gSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYpOworCit2b2lk
IGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYpOworCitjb25zdCBKU0M6Okhh
c2hUYWJsZSYgZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShKU0M6OlZNJiwgY29uc3QgSlNDOjpI
YXNoVGFibGUmIHN0YXRpY1RhYmxlKTsKKworU3RyaW5nIHJldHJpZXZlRXJyb3JNZXNzYWdlKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIEpTQzo6Q2F0
Y2hTY29wZSYpOworV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7
CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RXhjZXB0aW9uKiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIsIEV4Y2VwdGlvbkRldGFpbHMq
ID0gbnVsbHB0cik7Cit2b2lkIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUq
KTsKKworSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEV4
Y2VwdGlvbiYmKTsKK0pTQzo6SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGVjU3Rh
dGUqLCBFeGNlcHRpb25Db2RlLCBjb25zdCBTdHJpbmcmKTsKKworLy8gQ29udmVydCBhIERPTSBp
bXBsZW1lbnRhdGlvbiBleGNlcHRpb24gaW50byBhIEphdmFTY3JpcHQgZXhjZXB0aW9uIGluIHRo
ZSBleGVjdXRpb24gc3RhdGUuCit2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQg
cHJvcGFnYXRlRXhjZXB0aW9uU2xvd1BhdGgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmLCBFeGNlcHRpb24mJik7CisKK0pTQzo6SlNWYWx1ZSBqc1N0cmluZyhKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IFVSTCYpOyAvLyBlbXB0eSBpZiB0aGUgVVJMIGlzIG51bGwKKworSlNDOjpKU1Zh
bHVlIGpzU3RyaW5nT3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsg
Ly8gdW5kZWZpbmVkIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAorSlNDOjpKU1ZhbHVlIGpzU3RyaW5n
T3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBVUkwmKTsgLy8gdW5kZWZpbmVkIGlm
IHRoZSBVUkwgaXMgbnVsbAorCisvLyBTZWUgSmF2YVNjcmlwdENvcmUgZm9yIGV4cGxhbmF0aW9u
OiBTaG91bGQgYmUgdXNlZCBmb3IgYW55IHN0cmluZyB0aGF0IGlzIGFscmVhZHkgb3duZWQgYnkg
YW5vdGhlcgorLy8gb2JqZWN0LCB0byBsZXQgdGhlIGVuZ2luZSBrbm93IHRoYXQgY29sbGVjdGlu
ZyB0aGUgSlNTdHJpbmcgd3JhcHBlciBpcyB1bmxpa2VseSB0byBzYXZlIG1lbW9yeS4KK0pTQzo6
SlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5n
Jik7CisKK1N0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7CisK
K0F0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFt
ZSk7CisKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEpTQzo6
RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CitXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgdmFsdWVUb0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9V
U1ZTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCitpbnQzMl90IGZpbml0
ZUludDMyVmFsdWUoSlNDOjpKU1ZhbHVlLCBKU0M6OkV4ZWNTdGF0ZSosIGJvb2wmIG9rYXkpOwor
CisvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBjb252ZXJ0IHZhbHVlcyB0byBpbnRlZ2VycyBh
cyBwZXIgdGhlIFdlYklETCBzcGVjaWZpY2F0aW9uLgorLy8gVGhlIGNvbnZlcnNpb24gZmFpbHMg
aWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgb3IsIGlmIEVuZm9y
Y2VSYW5nZSBpcyBzcGVjaWZpZWQsCisvLyB0aGUgdmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ug
b2YgdGhlIGRlc3RpbmF0aW9uIGludGVnZXIgdHlwZS4KKworV0VCQ09SRV9FWFBPUlQgaW50OF90
IHRvSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJD
T1JFX0VYUE9SVCB1aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQxNl90
IHRvVUludDE2RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dF
QkNPUkVfRVhQT1JUIGludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VS
YW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQ2
NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
V0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOworCitXRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4Q2xhbXAo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0
b1VJbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBP
UlQgaW50MTZfdCB0b0ludDE2Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
V0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJDbGFtcChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQz
MkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGlu
dDY0X3QgdG9JbnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNP
UkVfRVhQT1JUIHVpbnQ2NF90IHRvVUludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOworCitXRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTYoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9V
SW50MTYoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50
NjRfdCB0b0ludDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQ
T1JUIHVpbnQ2NF90IHRvVUludDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKwor
SlNDOjpKU1ZhbHVlIGpzRGF0ZShKU0M6OkV4ZWNTdGF0ZSosIGRvdWJsZSB2YWx1ZSk7CisKKy8v
IE5hTiBpZiB0aGUgdmFsdWUgY2FuJ3QgYmUgY29udmVydGVkIHRvIGEgZGF0ZS4KK2RvdWJsZSB2
YWx1ZVRvRGF0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7CisKKy8vIFZhbGlkYXRl
cyB0aGF0IHRoZSBwYXNzZWQgb2JqZWN0IGlzIGEgc2VxdWVuY2UgdHlwZSBwZXIgc2VjdGlvbiA0
LjEuMTMgb2YgdGhlIFdlYklETCBzcGVjLgorSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCB1bnNpZ25lZCYgbGVuZ3RoKTsKKworSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpTQzo6QXJy
YXlCdWZmZXImKTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Jik7CitKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciopOwor
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpBcnJheUJ1ZmZlclZpZXcqKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgUmVmUHRyPFQ+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0
IFZlY3RvcjxUPiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFZlY3RvcjxSZWZQdHI8VD4+
Jik7CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgY29uc3QgSlNDOjpQcml2YXRlTmFtZSYpOworCitKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9y
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgVCYpOworSlNDOjpKU1ZhbHVlIHRvSlNJdGVy
YXRvckVuZChKU0M6OkV4ZWNTdGF0ZSYpOworCitSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+
IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
CitSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hh
cmVkSW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDMy
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUp
OworUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4QXJyYXkoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9Q
b3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwor
UmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Bvc3NpYmx5
U2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpG
bG9hdDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9h
dDY0QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CisKK1JlZlB0cjxKU0M6OkFycmF5QnVm
ZmVyVmlldz4gdG9VbnNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKK1JlZlB0cjxKU0M6OkludDhBcnJheT4gdG9VbnNoYXJlZEludDhBcnJheShKU0M6OlZNJiwg
SlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFy
cmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9V
bnNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpV
aW50OEFycmF5PiB0b1Vuc2hhcmVkVWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsK
K1JlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJy
YXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9V
bnNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6
VWludDMyQXJyYXk+IHRvVW5zaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKK1JlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJl
ZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgSlNUeXBlPiBWZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSXRl
cmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCitlbnVtIFNlY3Vy
aXR5UmVwb3J0aW5nT3B0aW9uIHsgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yLCBMb2dTZWN1cml0
eUVycm9yLCBUaHJvd1NlY3VyaXR5RXJyb3IgfTsKK25hbWVzcGFjZSBCaW5kaW5nU2VjdXJpdHkg
eworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6
RXhlY1N0YXRlJiwgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJp
dHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgVCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IEV4Y2VwdGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIEV4
Y2VwdGlvbk9yPFQqPiYmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNlcHRpb25PcjxU
Kj4gY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb25PcjxUJj4m
Jik7CisgICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRl
KiwgRE9NV2luZG93JiwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1cml0eUVycm9y
KTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUm
LCBET01XaW5kb3cmLCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nl
c3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiwgRnJhbWUqLCBTZWN1cml0eVJlcG9ydGluZ09wdGlv
biA9IExvZ1NlY3VyaXR5RXJyb3IpOworICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1l
KEpTQzo6RXhlY1N0YXRlJiwgRnJhbWUmLCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIGJvb2wgc2hv
dWxkQWxsb3dBY2Nlc3NUb05vZGUoSlNDOjpFeGVjU3RhdGUmLCBOb2RlKik7Cit9OworCit2b2lk
IHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
OworCitTdHJpbmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOworQXRv
bWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsK
KwordGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVk
SlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKKworZW51bSBjbGFzcyBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvciB7IFRocm93LCBSZXR1cm5FYXJseSwgUmVqZWN0UHJvbWlz
ZSwgQXNzZXJ0IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+CitzdHJ1Y3QgQmluZGlu
Z0NhbGxlciB7CisgICAgdXNpbmcgQXR0cmlidXRlU2V0dGVyRnVuY3Rpb24gPSBib29sKEpTQzo6
RXhlY1N0YXRlJiwgSlNDbGFzcyYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpUaHJvd1Njb3BlJik7Cisg
ICAgdXNpbmcgQXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gPSBKU0M6OkpTVmFsdWUoSlNDOjpFeGVj
U3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNpbmcgT3BlcmF0aW9u
Q2FsbGVyRnVuY3Rpb24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlND
bGFzcyosIEpTQzo6VGhyb3dTY29wZSYpOworICAgIHVzaW5nIFByb21pc2VPcGVyYXRpb25DYWxs
ZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNz
KiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Njb3BlJik7CisKKyAgICBzdGF0
aWMgSlNDbGFzcyogY2FzdEZvckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUpOworICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yT3BlcmF0aW9uKEpTQzo6RXhl
Y1N0YXRlJik7CisKKyAgICB0ZW1wbGF0ZTxQcm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24g
b3BlcmF0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlPgorICAgIHN0YXRpYyBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGNhbGxQcm9taXNlT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
UmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1l
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBjYXN0Rm9yT3BlcmF0aW9uKCpzdGF0ZSk7CisgICAgICAgIGlmIChzaG91bGRUaHJv
dyAhPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0ICYmIFVOTElLRUxZKCF0aGlzT2Jq
ZWN0KSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3Io
cHJvbWlzZS5nZXQoKSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUp
OworICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7CisgICAgICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygpKTsKKyAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVm
ZXJlbmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNPYmplY3QuCisgICAgICAgIHJldHVybiBvcGVyYXRp
b25DYWxsZXIoc3RhdGUsIHRoaXNPYmplY3QsIFdURk1vdmUocHJvbWlzZSksIHRocm93U2NvcGUp
OworICAgIH0KKworICAgIHRlbXBsYXRlPE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uIG9wZXJhdGlv
bkNhbGxlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvcjo6VGhyb3c+CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2Fs
bE9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5h
bWUpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhdGUpOworICAgICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byogdGhp
c09iamVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsKKyAgICAgICAgaWYgKHNob3VsZFRo
cm93ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5MSUtFTFkoIXRoaXNP
YmplY3QpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OlRocm93KQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJy
b3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0
aW9uTmFtZSk7CisgICAgICAgICAgICAvLyBGb3IgY3VzdG9tIHByb21pc2UtcmV0dXJuaW5nIG9w
ZXJhdGlvbnMKKyAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJy
b3IoKnN0YXRlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9uTmFtZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QpOworICAgICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIEpTQ2xhc3M6OmluZm8oKSk7CisgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgdG8g
dXNlIHJlZmVyZW5jZXMgZm9yIHN0YXRlIGFuZCB0aGlzT2JqZWN0LgorICAgICAgICByZXR1cm4g
b3BlcmF0aW9uQ2FsbGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTxBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiBzZXR0ZXIsIENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93
PgorICAgIHN0YXRpYyBib29sIHNldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChz
dGF0ZSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3Rh
dGUtPnZtKCkpOworICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgq
c3RhdGUsIHRoaXNWYWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCisg
ICAgICAgICAgICByZXR1cm4gKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
OjpUaHJvdykgPyB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xh
c3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKSA6IGZhbHNlOworICAgICAgICBy
ZXR1cm4gc2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIEpTQzo6SlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSksIHRocm93U2NvcGUpOworICAgIH0KKworICAgIHRlbXBsYXRlPEF0dHJpYnV0
ZUdldHRlckZ1bmN0aW9uIGdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhy
b3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+CisgICAgc3RhdGljIEpTQzo6RW5j
b2RlZEpTVmFsdWUgYXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCisgICAgeworICAg
ICAgICBBU1NFUlQoc3RhdGUpOworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RG
b3JBdHRyaWJ1dGUoKnN0YXRlLCB0aGlzVmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXRo
aXNPYmplY3QpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3I6OlRocm93KQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5
cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBh
dHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvcjo6UmVqZWN0UHJvbWlzZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVq
ZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCBKU0NsYXNzOjppbmZvKCktPmNs
YXNzTmFtZSwgYXR0cmlidXRlTmFtZSk7CisgICAgICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVl
OjplbmNvZGUoSlNDOjpqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
SlNDOjpKU1ZhbHVlOjplbmNvZGUoZ2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2Nv
cGUpKTsKKyAgICB9Cit9OworCisvLyBFeGNlcHRpb25PciBoYW5kbGluZy4KK3ZvaWQgcHJvcGFn
YXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9u
T3I8dm9pZD4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0
aW9uT3I8VD4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5
Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Nj
b3BlJiwgRXhjZXB0aW9uT3I8VD4mJiB2YWx1ZSk7CisKKy8vIElubGluZSBmdW5jdGlvbnMgYW5k
IHRlbXBsYXRlIGRlZmluaXRpb25zLgorCitpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIERPTUNvbnN0
cnVjdG9yT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1
cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpT
Qzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9
CisKK2lubGluZSBET01Db25zdHJ1Y3Rvck9iamVjdDo6RE9NQ29uc3RydWN0b3JPYmplY3QoSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
KyAgICA6IEpTRE9NT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQoreworfQorCitpbmxp
bmUgU3RyaW5nIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3Qq
KQoreworICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkZ1bmN0aW9uIik7Cit9CisKK2lubGluZSBE
T01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmpl
Y3QoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKKyAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0
KQoreworfQorCitpbmxpbmUgSlNDOjpKU0Z1bmN0aW9uKiBET01Db25zdHJ1Y3RvckpTQnVpbHRp
bk9iamVjdDo6aW5pdGlhbGl6ZUZ1bmN0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9pbml0aWFsaXpl
RnVuY3Rpb24uZ2V0KCk7Cit9CisKK2lubGluZSB2b2lkIERPTUNvbnN0cnVjdG9ySlNCdWlsdGlu
T2JqZWN0OjpzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYgdm0sIEpTQzo6SlNGdW5jdGlv
biYgZnVuY3Rpb24pCit7CisgICAgbV9pbml0aWFsaXplRnVuY3Rpb24uc2V0KHZtLCB0aGlzLCAm
ZnVuY3Rpb24pOworfQorCitpbmxpbmUgSlNET01HbG9iYWxPYmplY3QqIGRlcHJlY2F0ZWRHbG9i
YWxPYmplY3RGb3JQcm90b3R5cGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgLy8gRklY
TUU6IENhbGxlcnMgdG8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNpbmcgdGhlIGdsb2JhbCBv
YmplY3QKKyAgICAvLyBmcm9tIHdoaWNoIHRoZSBvYmplY3QgaXMgYmVpbmcgY3JlYXRlZCwgaW5z
dGVhZCBvZiBhc3N1bWluZyB0aGUgbGV4aWNhbCBvbmUuCisgICAgLy8gZS5nLiBzdWJmcmFtZS5k
b2N1bWVudC5ib2R5IHNob3VsZCB1c2UgdGhlIHN1YmZyYW1lJ3MgZ2xvYmFsIG9iamVjdCwgbm90
IHRoZSBsZXhpY2FsIG9uZS4KKyAgICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3RydWN0dXJlKEpT
Qzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIGlmIChK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKGdsb2JhbE9i
amVjdCwgV3JhcHBlckNsYXNzOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gc3RydWN0dXJlOwor
ICAgIHJldHVybiBjYWNoZURPTVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFzczo6
Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVBy
b3RvdHlwZSh2bSwgJmdsb2JhbE9iamVjdCkpLCBXcmFwcGVyQ2xhc3M6OmluZm8oKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3RydWN0dXJlKiBk
ZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIC8v
IEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIHdyb25nLiBJdCB1c2VzIHRoZSB3cm9uZyBnbG9iYWwg
b2JqZWN0IGZvciBjcmVhdGluZyB0aGUgcHJvdG90eXBlIHN0cnVjdHVyZS4KKyAgICByZXR1cm4g
Z2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFzcz4oZXhlYy0+dm0oKSwgKmRlcHJlY2F0ZWRHbG9i
YWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYykpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFw
cGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRET01Qcm90b3R5cGUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlND
Ojpqc0Nhc3Q8SlNDOjpKU09iamVjdCo+KGFzT2JqZWN0KGdldERPTVN0cnVjdHVyZTxXcmFwcGVy
Q2xhc3M+KHZtLCAqSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3Qp
KS0+c3RvcmVkUHJvdG90eXBlKCkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4g
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUgY3JlYXRlSlNCdWlsdGluKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU0Z1bmN0aW9uJiBpbml0aWFsaXplRnVuY3Rpb24sIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlND
bGFzczo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxKU0NsYXNzPihnbG9iYWxPYmplY3Qudm0oKSwg
Z2xvYmFsT2JqZWN0KSwgJmdsb2JhbE9iamVjdCk7CisgICAgY2FsbEZ1bmN0aW9uV2l0aEN1cnJl
bnRBcmd1bWVudHMoc3RhdGUsICpvYmplY3QsIGluaXRpYWxpemVGdW5jdGlvbik7CisgICAgcmV0
dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKG9iamVjdCk7Cit9CisKK2lubGluZSBKU0M6OldlYWtI
YW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJy
YXlCdWZmZXIqKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlVHlwZWRBcnJheUNv
bnRyb2xsZXIqPih3b3JsZC52bSgpLm1fdHlwZWRBcnJheUNvbnRyb2xsZXIuZ2V0KCkpLT53cmFw
cGVyT3duZXIoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoSlNDOjpBcnJheUJ1ZmZl
ciogZG9tT2JqZWN0KQoreworICAgIHJldHVybiBkb21PYmplY3Q7Cit9CisKK2lubGluZSBKU0RP
TU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKikg
eyByZXR1cm4gbnVsbHB0cjsgfQoraW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqLCBKU0M6OldlYWtIYW5kbGVPd25l
ciopIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0KikgeyByZXR1cm4gZmFsc2U7
IH0KKworaW5saW5lIEpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBw
ZXJXb3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0KQoreworICAgIGlmICgh
d29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGRv
bU9iamVjdC0+d3JhcHBlcigpOworfQorCitpbmxpbmUgSlNDOjpKU0FycmF5QnVmZmVyKiBnZXRJ
bmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZm
ZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBidWZmZXItPm1fd3JhcHBlci5nZXQoKTsKK30KKworaW5s
aW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBT
Y3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01PYmplY3QqIHdyYXBwZXIsIEpTQzo6V2Vh
a0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpCit7CisgICAgaWYgKCF3b3JsZC5pc05vcm1hbCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZG9tT2JqZWN0LT5zZXRXcmFwcGVyKHdyYXBw
ZXIsIHdyYXBwZXJPd25lciwgJndvcmxkKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5l
IGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6
OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlciwgSlND
OjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcikKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9y
bWFsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb21PYmplY3QtPm1fd3JhcHBlciA9
IEpTQzo6V2VhazxKU0M6OkpTQXJyYXlCdWZmZXI+KHdyYXBwZXIsIHdyYXBwZXJPd25lciwgJndv
cmxkKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNo
ZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2Jq
ZWN0LCBKU0RPTU9iamVjdCogd3JhcHBlcikKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb21PYmplY3QtPmNsZWFyV3JhcHBlcih3cmFw
cGVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNo
ZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9i
amVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKQoreworICAgIGlmICghd29ybGQuaXNO
b3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHdlYWtDbGVhcihkb21PYmplY3Qt
Pm1fd3JhcHBlciwgd3JhcHBlcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyYgZG9tT2JqZWN0KQoreworICAgIGlmIChh
dXRvKiB3cmFwcGVyID0gZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgJmRvbU9iamVjdCkp
CisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVybiB3b3JsZC5tX3dyYXBwZXJzLmdl
dCh3cmFwcGVyS2V5KCZkb21PYmplY3QpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xh
c3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQgY2FjaGVXcmFwcGVyKERPTVdy
YXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QsIFdyYXBwZXJDbGFzcyogd3Jh
cHBlcikKK3sKKyAgICBKU0M6OldlYWtIYW5kbGVPd25lciogb3duZXIgPSB3cmFwcGVyT3duZXIo
d29ybGQsIGRvbU9iamVjdCk7CisgICAgaWYgKHNldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQs
IGRvbU9iamVjdCwgd3JhcHBlciwgb3duZXIpKQorICAgICAgICByZXR1cm47CisgICAgd2Vha0Fk
ZCh3b3JsZC5tX3dyYXBwZXJzLCB3cmFwcGVyS2V5KGRvbU9iamVjdCksIEpTQzo6V2VhazxKU0M6
OkpTT2JqZWN0Pih3cmFwcGVyLCBvd25lciwgJndvcmxkKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIHVuY2FjaGVX
cmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QsIFdyYXBw
ZXJDbGFzcyogd3JhcHBlcikKK3sKKyAgICBpZiAoY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKHdv
cmxkLCBkb21PYmplY3QsIHdyYXBwZXIpKQorICAgICAgICByZXR1cm47CisgICAgd2Vha1JlbW92
ZSh3b3JsZC5tX3dyYXBwZXJzLCB3cmFwcGVyS2V5KGRvbU9iamVjdCksIHdyYXBwZXIpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gaW5saW5lIGF1dG8gY3Jl
YXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VD4mJiBkb21P
YmplY3QpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxET01DbGFzcywg
VD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+
OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZQoreworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IHR5cGVu
YW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzczsK
KworICAgIEFTU0VSVCghZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIGRv
bU9iamVjdCkpOworICAgIGF1dG8qIGRvbU9iamVjdFB0ciA9IGRvbU9iamVjdC5wdHIoKTsKKyAg
ICBhdXRvKiB3cmFwcGVyID0gV3JhcHBlckNsYXNzOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPFdy
YXBwZXJDbGFzcz4oZ2xvYmFsT2JqZWN0LT52bSgpLCAqZ2xvYmFsT2JqZWN0KSwgZ2xvYmFsT2Jq
ZWN0LCBXVEZNb3ZlKGRvbU9iamVjdCkpOworICAgIGNhY2hlV3JhcHBlcihnbG9iYWxPYmplY3Qt
PndvcmxkKCksIGRvbU9iamVjdFB0ciwgd3JhcHBlcik7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBpbmxpbmUgYXV0byBj
cmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIGRv
bU9iamVjdCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxET01DbGFz
cywgVD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xh
c3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZQoreworICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPERP
TUNsYXNzPihnbG9iYWxPYmplY3QsIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxET01DbGFzcz4oV1RG
TW92ZShkb21PYmplY3QpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHdyYXAoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBET01DbGFzcyYgZG9tT2JqZWN0KQoreworICAgIGlmIChhdXRv
KiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIGRvbU9i
amVjdCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVybiB0b0pTTmV3bHlDcmVh
dGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIFJlZjxET01DbGFzcz4oZG9tT2JqZWN0KSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0NsYXNzJiBjYXN0VGhpc1ZhbHVl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKK3sKKyAgICBhdXRvIHRoaXNWYWx1ZSA9IHN0YXRlLnRo
aXNWYWx1ZSgpOworICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Rvd25jYXN0PEpTQ2xh
c3MqPihzdGF0ZS52bSgpLCB0aGlzVmFsdWUpOworICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKKyAg
ICByZXR1cm4gKmNhc3RlZFRoaXM7Cit9CisKK2lubGluZSBpbnQzMl90IGZpbml0ZUludDMyVmFs
dWUoSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgYm9vbCYgb2theSkK
K3sKKyAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoZXhlYyk7CisgICAgb2theSA9
IHN0ZDo6aXNmaW5pdGUobnVtYmVyKTsKKyAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7
Cit9CisKKy8vIFZhbGlkYXRlcyB0aGF0IHRoZSBwYXNzZWQgb2JqZWN0IGlzIGEgc2VxdWVuY2Ug
dHlwZSBwZXIgc2VjdGlvbiA0LjEuMTMgb2YgdGhlIFdlYklETCBzcGVjLgoraW5saW5lIEpTQzo6
SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVl
IHZhbHVlLCB1bnNpZ25lZCYgbGVuZ3RoKQoreworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTQzo6
SlNPYmplY3QqIG9iamVjdCA9IHZhbHVlLmdldE9iamVjdCgpOworICAgIGlmICghb2JqZWN0KSB7
CisgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBKU0M6OkpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBv
YmplY3QtPmdldCgmZXhlYywgZXhlYy5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKworICAgIGlmIChsZW5ndGhWYWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoZXhl
Yywgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBsZW5ndGgg
PSBsZW5ndGhWYWx1ZS50b1VJbnQzMigmZXhlYyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyJiBidWZmZXIpCit7CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIGJ1ZmZlcikpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAvLyBUaGUgSlNBcnJheUJ1ZmZlcjo6Y3JlYXRl
IGZ1bmN0aW9uIHdpbGwgcmVnaXN0ZXIgdGhlIHdyYXBwZXIgaW4gZmluaXNoQ3JlYXRpb24uCisg
ICAgcmV0dXJuIEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHN0YXRlLT52bSgpLCBnbG9iYWxP
YmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKGJ1ZmZlci5zaGFyaW5nTW9kZSgpKSwgJmJ1ZmZl
cik7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlclZpZXcm
IHZpZXcpCit7CisgICAgcmV0dXJuIHZpZXcud3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0KTsKK30K
KworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlciogYnVmZmVyKQorewor
ICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICByZXR1
cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqYnVmZmVyKTsKK30KKworaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyVmlldyogdmlldykKK3sKKyAgICBpZiAoIXZp
ZXcpCisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgIHJldHVybiB0b0pTKHN0YXRl
LCBnbG9iYWxPYmplY3QsICp2aWV3KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBSZWY8VD4mJiBwdHIpCit7CisgICAgcmV0dXJuIHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCBwdHIuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiYmIHB0cikKK3sKKyAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFQ+JiB2ZWN0b3IpCit7CisgICAg
SlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVj
dEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgdmVjdG9yLnNpemUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRl
eChleGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgdmVjdG9yW2ldKSk7CisgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICB9CisgICAg
cmV0dXJuIGFycmF5OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8VD4+JiB2ZWN0b3IpCit7CisgICAgSlNDOjpWTSYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJy
YXkoZXhlYywgbnVsbHB0ciwgdmVjdG9yLnNpemUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVj
dG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBp
LCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgdmVjdG9yW2ldLmdldCgpKSk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICB9CisgICAgcmV0
dXJuIGFycmF5OworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgSlNDOjpQcml2YXRlTmFtZSYgcHJpdmF0
ZU5hbWUpCit7CisgICAgcmV0dXJuIEpTQzo6U3ltYm9sOjpjcmVhdGUoZXhlYy0+dm0oKSwgcHJp
dmF0ZU5hbWUudWlkKCkpOworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQoreworICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIHZh
bHVlLCBmYWxzZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCwgY29uc3QgVCYgdmFsdWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJh
dG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwgdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVl
KSwgZmFsc2UpOworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvckVuZChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2Jq
ZWN0KCZzdGF0ZSwgSlNDOjpqc1VuZGVmaW5lZCgpLCB0cnVlKTsKK30KKworaW5saW5lIFJlZlB0
cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhK
U0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8qIHdyYXBwZXIgPSBq
c0R5bmFtaWNEb3duY2FzdDxKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Kj4odm0sIHZhbHVlKTsKKyAg
ICBpZiAoIXdyYXBwZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiB3cmFw
cGVyLT5wb3NzaWJseVNoYXJlZEltcGwoKTsKK30KKworaW5saW5lIFJlZlB0cjxKU0M6OkFycmF5
QnVmZmVyVmlldz4gdG9VbnNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiB2bSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8gcmVzdWx0ID0gdG9Qb3NzaWJseVNoYXJlZEFycmF5
QnVmZmVyVmlldyh2bSwgdmFsdWUpOworICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC0+aXNTaGFy
ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
aW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDhBcnJheShK
U0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlT
aGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5s
aW5lIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQxNkFycmF5KEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNo
YXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5s
aW5lIFJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQzMkFycmF5KEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNo
YXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5s
aW5lIFJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OEFycmF5KEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNo
YXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5s
aW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhD
bGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhDbGFtcGVkQWRhcHRv
cj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0b1Bvc3Np
Ymx5U2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDE2QWRh
cHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Bv
c3NpYmx5U2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkg
eyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDMy
QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4g
dG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpG
bG9hdDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0NjRB
cnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVlKTsgfQorCitpbmxpbmUgUmVmUHRyPEpTQzo6
SW50OEFycmF5PiB0b1Vuc2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDhB
ZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9V
bnNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1
cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFwdG9yPih2bSwg
dmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9VbnNoYXJlZEludDMy
QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vu
c2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Citp
bmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9VbnNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpW
TSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZl
VHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRy
PEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5zaGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6
OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRp
dmVUeXBlZFZpZXc8SlNDOjpVaW50OENsYW1wZWRBZGFwdG9yPih2bSwgdmFsdWUpOyB9Citpbmxp
bmUgUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvVW5zaGFyZWRVaW50MTZBcnJheShKU0M6OlZN
JiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVU
eXBlZFZpZXc8SlNDOjpVaW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRy
PEpTQzo6VWludDMyQXJyYXk+IHRvVW5zaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpVaW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6Rmxv
YXQzMkFycmF5PiB0b1Vuc2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZs
b2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQ2NEFy
cmF5PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFs
dWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0NjRB
ZGFwdG9yPih2bSwgdmFsdWUpOyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEpT
VD4gaW5saW5lIFZlY3RvcjxSZWY8VD4+IHRvUmVmTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlm
ICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0
YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgVmVjdG9yPFJl
ZjxUPj4gcmVzdWx0OworICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwgdmFsdWUsIFsmcmVz
dWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNW
YWx1ZSkgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICAgICAgaWYgKGpzVmFsdWUuaW5oZXJpdHModm0sIEpTVDo6aW5mbygpKSkgeworICAgICAg
ICAgICAgYXV0byogb2JqZWN0ID0gSlNUOjp0b1dyYXBwZWQodm0sIGpzVmFsdWUpOworICAgICAg
ICAgICAgQVNTRVJUKG9iamVjdCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCpvYmplY3Qp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9y
KCpzdGF0ZSwgc2NvcGUpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGlu
ZSBTdHJpbmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQoreworICAgIEFTU0VSVCghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpOworICAgIHJldHVy
biBwcm9wZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlkKCkgOiBwcm9wZXJ0eU5hbWUu
cHVibGljTmFtZSgpOworfQorCitpbmxpbmUgQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRv
bWljU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4g
QXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFtZS51aWQoKSA6IHBy
b3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworfQorCit0ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0
aW9uIG5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNh
Y2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVy
biBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGxlbmd0aCwgcHJvcGVydHlOYW1lLnB1Ymxp
Y05hbWUoKSwgbmF0aXZlRnVuY3Rpb24pKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIHByb3Bh
Z2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhy
b3dTY29wZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQoreworICAgIGlmICh0aHJvd1Njb3BlLmV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm47CisgICAgcHJvcGFnYXRlRXhjZXB0aW9uU2xvd1Bh
dGgoc3RhdGUsIHRocm93U2NvcGUsIFdURk1vdmUoZXhjZXB0aW9uKSk7Cit9CisKK2lubGluZSB2
b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8dm9pZD4mJiB2YWx1ZSkKK3sKKyAgICBpZiAo
VU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKQorICAgICAgICBwcm9wYWdhdGVFeGNlcHRp
b24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VD4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtF
TFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihz
dGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2
YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSwgRXhjZXB0aW9uT3I8VD4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUu
aGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhy
b3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSBUKiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgVCYgbm9kZSkKK3sKKyAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NU
b05vZGUoc3RhdGUsICZub2RlKSA/ICZub2RlIDogbnVsbHB0cjsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBUKiBub2RlKQoreworICAgIHJldHVybiBzaG91bGRBbGxv
d0FjY2Vzc1RvTm9kZShzdGF0ZSwgbm9kZSkgPyBub2RlIDogbnVsbHB0cjsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIEV4Y2VwdGlvbk9yPFQqPiBCaW5kaW5nU2VjdXJpdHk6OmNo
ZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uT3I8VCo+
JiYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpOworICAgIHJldHVybiBjaGVja1NlY3VyaXR5Rm9y
Tm9kZShzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tT
ZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb25PcjxUJj4mJiB2
YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiB2
YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIGNoZWNrU2VjdXJpdHlGb3JOb2Rl
KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCAr
MSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ0NhbGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ0NhbGxlci5oCShyZXZpc2lv
biAyMTEzNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdDYWxs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMzAwICsyMywxMCBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKLSNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgotI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0
LmgiCi0jaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiSlNEeW5hbWljRG93bmNh
c3QuaCIKLSNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKLSNpbmNsdWRlICJTY3JpcHRXcmFw
cGFibGVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgi
Ci0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+Ci0jaW5j
bHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1dlYWsuaD4K
LSNpbmNsdWRlIDxoZWFwL1dlYWtJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9BdXhpbGlh
cnlCYXJyaWVySW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRl
IDxydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJh
eS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgotI2luY2x1ZGUgPHJ1bnRp
bWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ2VsbElubGluZXMu
aD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRp
bWUvSlNUeXBlZEFycmF5cy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNp
bmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9Xcml0ZUJh
cnJpZXIuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLS8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgZmlsZSBhIGxvdCBlYXNpZXIgdG8gcmVh
ZCBieSBwdXR0aW5nIGFsbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXQgdGhlIHRvcCwKLS8vIGFu
ZCBmdW5jdGlvbiBkZWZpbml0aW9ucyBiZWxvdywgZXZlbiBmb3IgdGVtcGxhdGUgYW5kIGlubGlu
ZSBmdW5jdGlvbnMuCi0KLW5hbWVzcGFjZSBKU0MgewotY2xhc3MgSlNGdW5jdGlvbjsKLX0KKyNp
bmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgQ2FjaGVkU2NyaXB0OwotY2xhc3MgRGVmZXJyZWRQcm9taXNlOwotY2xhc3MgRE9N
V2luZG93OwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBVUkw7Ci1jbGFzcyBOb2RlOwotCi1zdHJ1Y3Qg
RXhjZXB0aW9uRGV0YWlscyB7Ci0gICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgaW50IGxpbmVOdW1i
ZXIgeyAwIH07Ci0gICAgaW50IGNvbHVtbk51bWJlciB7IDAgfTsKLSAgICBTdHJpbmcgc291cmNl
VVJMOwotfTsKLQotLy8gQmFzZSBjbGFzcyBmb3IgYWxsIGNvbnN0cnVjdG9yIG9iamVjdHMgaW4g
dGhlIEpTQyBiaW5kaW5ncy4KLWNsYXNzIERPTUNvbnN0cnVjdG9yT2JqZWN0IDogcHVibGljIEpT
RE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTRE9NT2JqZWN0IEJhc2U7Ci0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IEpTQzo6SW1wbGVtZW50c0RlZmF1bHRI
YXNJbnN0YW5jZSB8IEpTQzo6VHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRhOwotICAgIHN0YXRp
YyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKLQotcHJvdGVjdGVkOgotICAgIERPTUNvbnN0cnVjdG9y
T2JqZWN0KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQotICAgIHN0YXRp
YyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpTQzo6Q2Fs
bFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgSlNDOjpDYWxsRGF0YSYpOwotfTsKLQotY2xhc3Mg
RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgewotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLQot
cHJvdGVjdGVkOgotICAgIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6U3RydWN0
dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOwotCi0gICAgSlNDOjpKU0Z1bmN0aW9u
KiBpbml0aWFsaXplRnVuY3Rpb24oKTsKLSAgICB2b2lkIHNldEluaXRpYWxpemVGdW5jdGlvbihK
U0M6OlZNJiwgSlNDOjpKU0Z1bmN0aW9uJik7Ci0KLXByaXZhdGU6Ci0gICAgSlNDOjpXcml0ZUJh
cnJpZXI8SlNDOjpKU0Z1bmN0aW9uPiBtX2luaXRpYWxpemVGdW5jdGlvbjsKLX07Ci0KLURPTVdp
bmRvdyYgY2FsbGVyRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci1ET01XaW5kb3cmIGFjdGl2
ZURPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwotRE9NV2luZG93JiBmaXJzdERPTVdpbmRvdyhK
U0M6OkV4ZWNTdGF0ZSopOwotCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJl
cG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9FWFBPUlQg
dm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLQotdm9pZCB0
aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYs
IGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUsIGNv
bnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1XRUJDT1JFX0VYUE9SVCBib29sIHRocm93U2V0dGVy
VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci0KLXZvaWQgdGhyb3dB
cnJheUVsZW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsK
LXZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29w
ZSYpOwotdm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJik7IC8vIE5vdCB0aGUgc2FtZSBhcyBhIEphdmFTY3JpcHQgc3ludGF4IGVycm9yLgot
dm9pZCB0aHJvd0luZGV4U2l6ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
Jik7Ci12b2lkIHRocm93SW52YWxpZFN0YXRlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgdGhy
b3dOb25GaW5pdGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsK
LXZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYpOwotdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVzc2FnZSk7Ci12b2lkIHRocm93U2VjdXJpdHlF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLXZvaWQgdGhyb3dUeXBlTWlzbWF0Y2hFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotCi1XRUJDT1JFX0VYUE9SVCBK
U0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBj
aGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFZhbHVlcyk7Ci1KU0M6
OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3Qg
Y2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1Zh
bHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVk
SlNWYWx1ZSB0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVtYmVyTmFtZSwgY29uc3QgY2hhciogZGljdGlv
bmFyeU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1KU0M6OkVuY29kZWRKU1ZhbHVl
IHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUpOwotCi1TdHJpbmcgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci1TdHJpbmcgbWFrZVRoaXNU
eXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUpOwotCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93
R2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci1XRUJDT1JF
X0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFs
dWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25z
dCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLVdFQkNP
UkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVy
cm9yKERlZmVycmVkUHJvbWlzZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIG9wZXJhdGlvbk5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSBy
ZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBjaGFy
KiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKTsKLQotV0VCQ09SRV9F
WFBPUlQgSlNDOjpTdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9i
amVjdCYsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVj
dHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlN0cnVjdHVy
ZSosIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJD
bGFzcz4gSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVjdHVyZShKU0M6OlZNJiwgSlNET01HbG9i
YWxPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpTdHJ1Y3R1
cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90eXBlKEpT
Qzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0KLXZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1
cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0
LCBKU0M6OkpTRnVuY3Rpb24mKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gSlNDOjpF
bmNvZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTRnVu
Y3Rpb24mIGluaXRpYWxpemVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQotSlNDOjpX
ZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5
QnVmZmVyKik7Ci12b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIqKTsKLQotSlNET01P
YmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCopOwot
SlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgU2Ny
aXB0V3JhcHBhYmxlKik7Ci1KU0M6OkpTQXJyYXlCdWZmZXIqIGdldElubGluZUNhY2hlZFdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciopOwotCi1ib29sIHNldElubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0KiwgSlND
OjpXZWFrSGFuZGxlT3duZXIqKTsKLWJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3JhcHBlciwgSlNDOjpX
ZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcik7Ci1ib29sIHNldElubGluZUNhY2hlZFdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciosIEpTQzo6SlNBcnJheUJ1ZmZl
ciogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcik7Ci0KLWJvb2wg
Y2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9i
amVjdCopOwotYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwg
U2NyaXB0V3JhcHBhYmxlKiwgSlNET01PYmplY3QqIHdyYXBwZXIpOwotYm9vbCBjbGVhcklubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciosIEpTQzo6
SlNBcnJheUJ1ZmZlciogd3JhcHBlcik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBK
U0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNz
Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdl
dENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgUmVmPERPTUNsYXNzPiYgb2Jq
ZWN0KSB7IHJldHVybiBnZXRDYWNoZWRXcmFwcGVyKHdvcmxkLCBvYmplY3QuZ2V0KCkpOyB9Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiB2b2lkIGNh
Y2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyosIFdyYXBwZXJDbGFzcyopOwot
dGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gdm9pZCB1
bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyosIFdyYXBwZXJDbGFzcyop
OwotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGF1dG8gY3JlYXRlV3Jh
cHBlcihKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUPiYmKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGU7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gYXV0byBjcmVhdGVXcmFwcGVyKEpT
RE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFz
dGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGU7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIERPTUNsYXNzPiBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgRE9NQ2xhc3MmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFz
cz4gSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYpOwotCi12b2lkIGFkZElt
cHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYpOwotCi1jb25zdCBKU0M6Okhhc2hUYWJs
ZSYgZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShKU0M6OlZNJiwgY29uc3QgSlNDOjpIYXNoVGFi
bGUmIHN0YXRpY1RhYmxlKTsKLQotU3RyaW5nIHJldHJpZXZlRXJyb3JNZXNzYWdlKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIEpTQzo6Q2F0Y2hTY29w
ZSYpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7Ci1XRUJD
T1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhj
ZXB0aW9uKiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIsIEV4Y2VwdGlvbkRldGFpbHMqID0gbnVs
bHB0cik7Ci12b2lkIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKLQot
SlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2VwdGlv
biYmKTsKLUpTQzo6SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBF
eGNlcHRpb25Db2RlLCBjb25zdCBTdHJpbmcmKTsKLQotLy8gQ29udmVydCBhIERPTSBpbXBsZW1l
bnRhdGlvbiBleGNlcHRpb24gaW50byBhIEphdmFTY3JpcHQgZXhjZXB0aW9uIGluIHRoZSBleGVj
dXRpb24gc3RhdGUuCi12b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgcHJvcGFn
YXRlRXhjZXB0aW9uU2xvd1BhdGgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBF
eGNlcHRpb24mJik7Ci0KLUpTQzo6SlNWYWx1ZSBqc1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IFVSTCYpOyAvLyBlbXB0eSBpZiB0aGUgVVJMIGlzIG51bGwKLQotSlNDOjpKU1ZhbHVlIGpz
U3RyaW5nT3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsgLy8gdW5k
ZWZpbmVkIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAotSlNDOjpKU1ZhbHVlIGpzU3RyaW5nT3JVbmRl
ZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBVUkwmKTsgLy8gdW5kZWZpbmVkIGlmIHRoZSBV
UkwgaXMgbnVsbAotCi0vLyBTZWUgSmF2YVNjcmlwdENvcmUgZm9yIGV4cGxhbmF0aW9uOiBTaG91
bGQgYmUgdXNlZCBmb3IgYW55IHN0cmluZyB0aGF0IGlzIGFscmVhZHkgb3duZWQgYnkgYW5vdGhl
cgotLy8gb2JqZWN0LCB0byBsZXQgdGhlIGVuZ2luZSBrbm93IHRoYXQgY29sbGVjdGluZyB0aGUg
SlNTdHJpbmcgd3JhcHBlciBpcyB1bmxpa2VseSB0byBzYXZlIG1lbW9yeS4KLUpTQzo6SlNWYWx1
ZSBqc093bmVkU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7Ci0K
LVN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7Ci0KLUF0b21p
Y1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7Ci0K
LVdFQkNPUkVfRVhQT1JUIFN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEpTQzo6RXhlY1N0
YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgdmFs
dWVUb0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9F
WFBPUlQgU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYpOwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9VU1ZTdHJp
bmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi1pbnQzMl90IGZpbml0ZUludDMy
VmFsdWUoSlNDOjpKU1ZhbHVlLCBKU0M6OkV4ZWNTdGF0ZSosIGJvb2wmIG9rYXkpOwotCi0vLyBU
aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBjb252ZXJ0IHZhbHVlcyB0byBpbnRlZ2VycyBhcyBwZXIg
dGhlIFdlYklETCBzcGVjaWZpY2F0aW9uLgotLy8gVGhlIGNvbnZlcnNpb24gZmFpbHMgaWYgdGhl
IHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgb3IsIGlmIEVuZm9yY2VSYW5n
ZSBpcyBzcGVjaWZpZWQsCi0vLyB0aGUgdmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhl
IGRlc3RpbmF0aW9uIGludGVnZXIgdHlwZS4KLQotV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50
OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VY
UE9SVCB1aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdlKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUlu
dDE2RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVf
RVhQT1JUIGludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRv
SW50NjRFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09S
RV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotCi1XRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4Q2xhbXAoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4
Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50
MTZfdCB0b0ludDE2Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09S
RV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJDbGFtcChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQzMkNsYW1w
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDY0X3Qg
dG9JbnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQ
T1JUIHVpbnQ2NF90IHRvVUludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OwotCi1XRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTYoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTYo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0
b0ludDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVp
bnQ2NF90IHRvVUludDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotSlNDOjpK
U1ZhbHVlIGpzRGF0ZShKU0M6OkV4ZWNTdGF0ZSosIGRvdWJsZSB2YWx1ZSk7Ci0KLS8vIE5hTiBp
ZiB0aGUgdmFsdWUgY2FuJ3QgYmUgY29udmVydGVkIHRvIGEgZGF0ZS4KLWRvdWJsZSB2YWx1ZVRv
RGF0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7Ci0KLS8vIFZhbGlkYXRlcyB0aGF0
IHRoZSBwYXNzZWQgb2JqZWN0IGlzIGEgc2VxdWVuY2UgdHlwZSBwZXIgc2VjdGlvbiA0LjEuMTMg
b2YgdGhlIFdlYklETCBzcGVjLgotSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCB1bnNpZ25lZCYgbGVuZ3RoKTsKLQotSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZm
ZXImKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Jik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciopOwotSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpB
cnJheUJ1ZmZlclZpZXcqKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJik7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xv
YmFsT2JqZWN0KiwgUmVmUHRyPFQ+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFZlY3Rv
cjxUPiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFZlY3RvcjxSZWZQdHI8VD4+Jik7Ci1K
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29u
c3QgSlNDOjpQcml2YXRlTmFtZSYpOwotCi1KU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgVCYpOwotSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvckVu
ZChKU0M6OkV4ZWNTdGF0ZSYpOwotCi1SZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvUG9z
c2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQ
dHI8SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYsIEpT
Qzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50
MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDMyQXJyYXk+
IHRvUG9zc2libHlTaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVm
UHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9Qb3NzaWJs
eVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRy
PEpTQzo6VWludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiwg
SlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVk
VWludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpGbG9hdDMy
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7Ci1SZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDY0QXJy
YXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmll
dz4gdG9VbnNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJl
ZlB0cjxKU0M6OkludDhBcnJheT4gdG9VbnNoYXJlZEludDhBcnJheShKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFycmF5KEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9VbnNoYXJl
ZEludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OEFy
cmF5PiB0b1Vuc2hhcmVkVWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0
cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNoYXJl
ZFVpbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDMy
QXJyYXk+IHRvVW5zaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJl
ZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiwg
SlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZsb2F0
NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgSlNUeXBlPiBWZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSXRlcmF0b3JN
ZXRob2QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi1lbnVtIFNlY3VyaXR5UmVw
b3J0aW5nT3B0aW9uIHsgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yLCBMb2dTZWN1cml0eUVycm9y
LCBUaHJvd1NlY3VyaXR5RXJyb3IgfTsKLW5hbWVzcGFjZSBCaW5kaW5nU2VjdXJpdHkgewotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0
YXRlJiwgVCYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JO
b2RlKEpTQzo6RXhlY1N0YXRlJiwgVCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEV4Y2Vw
dGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2VwdGlv
bk9yPFQqPiYmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNlcHRpb25PcjxUKj4gY2hl
Y2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb25PcjxUJj4mJik7Ci0g
ICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKiwgRE9N
V2luZG93JiwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1cml0eUVycm9yKTsKLSAg
ICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUmLCBET01X
aW5kb3cmLCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0Zy
YW1lKEpTQzo6RXhlY1N0YXRlKiwgRnJhbWUqLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9IExv
Z1NlY3VyaXR5RXJyb3IpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6
RXhlY1N0YXRlJiwgRnJhbWUmLCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIGJvb2wgc2hvdWxkQWxs
b3dBY2Nlc3NUb05vZGUoSlNDOjpFeGVjU3RhdGUmLCBOb2RlKik7Ci19OwotCi12b2lkIHByaW50
RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotCi1T
dHJpbmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwotQXRvbWljU3Ry
aW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKLQotdGVt
cGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1
ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci0KLQogZW51bSBjbGFzcyBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvciB7IFRocm93LCBSZXR1cm5FYXJseSwgUmVqZWN0UHJvbWlzZSwgQXNz
ZXJ0IH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+CkBAIC0zODksNDM3ICs5OSw0IEBA
IHN0cnVjdCBCaW5kaW5nQ2FsbGVyIHsKICAgICB9CiB9OwogCi0vLyBFeGNlcHRpb25PciBoYW5k
bGluZy4KLXZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJiwgRXhjZXB0aW9uT3I8dm9pZD4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpU
aHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VD4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6
OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VD4mJiB2YWx1ZSk7Ci0KLS8vIElu
bGluZSBmdW5jdGlvbnMgYW5kIHRlbXBsYXRlIGRlZmluaXRpb25zLgotCi1pbmxpbmUgSlNDOjpT
dHJ1Y3R1cmUqIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYg
dm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3Rv
dHlwZSkKLXsKLSAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7Ci19Ci0KLWlubGluZSBET01Db25zdHJ1Y3Rvck9iamVjdDo6RE9NQ29u
c3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKLSAgICA6IEpTRE9NT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2Jq
ZWN0KQotewotfQotCi1pbmxpbmUgU3RyaW5nIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpjbGFzc05h
bWUoY29uc3QgSlNPYmplY3QqKQotewotICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkZ1bmN0aW9u
Iik7Ci19Ci0KLWlubGluZSBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6RE9NQ29uc3Ry
dWN0b3JKU0J1aWx0aW5PYmplY3QoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVj
dHVyZSwgZ2xvYmFsT2JqZWN0KQotewotfQotCi1pbmxpbmUgSlNDOjpKU0Z1bmN0aW9uKiBET01D
b25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6aW5pdGlhbGl6ZUZ1bmN0aW9uKCkKLXsKLSAgICBy
ZXR1cm4gbV9pbml0aWFsaXplRnVuY3Rpb24uZ2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkIERPTUNv
bnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0OjpzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYg
dm0sIEpTQzo6SlNGdW5jdGlvbiYgZnVuY3Rpb24pCi17Ci0gICAgbV9pbml0aWFsaXplRnVuY3Rp
b24uc2V0KHZtLCB0aGlzLCAmZnVuY3Rpb24pOwotfQotCi1pbmxpbmUgSlNET01HbG9iYWxPYmpl
Y3QqIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgLy8gRklYTUU6IENhbGxlcnMgdG8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUg
dXNpbmcgdGhlIGdsb2JhbCBvYmplY3QKLSAgICAvLyBmcm9tIHdoaWNoIHRoZSBvYmplY3QgaXMg
YmVpbmcgY3JlYXRlZCwgaW5zdGVhZCBvZiBhc3N1bWluZyB0aGUgbGV4aWNhbCBvbmUuCi0gICAg
Ly8gZS5nLiBzdWJmcmFtZS5kb2N1bWVudC5ib2R5IHNob3VsZCB1c2UgdGhlIHN1YmZyYW1lJ3Mg
Z2xvYmFsIG9iamVjdCwgbm90IHRoZSBsZXhpY2FsIG9uZS4KLSAgICByZXR1cm4gSlNDOjpqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSog
Z2V0RE9NU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQotewotICAgIGlmIChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0Q2FjaGVkRE9N
U3RydWN0dXJlKGdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjppbmZvKCkpKQotICAgICAgICBy
ZXR1cm4gc3RydWN0dXJlOwotICAgIHJldHVybiBjYWNoZURPTVN0cnVjdHVyZShnbG9iYWxPYmpl
Y3QsIFdyYXBwZXJDbGFzczo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBXcmFw
cGVyQ2xhc3M6OmNyZWF0ZVByb3RvdHlwZSh2bSwgJmdsb2JhbE9iamVjdCkpLCBXcmFwcGVyQ2xh
c3M6OmluZm8oKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5l
IEpTQzo6U3RydWN0dXJlKiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRl
KiBleGVjKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIHdyb25nLiBJdCB1c2Vz
IHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0IGZvciBjcmVhdGluZyB0aGUgcHJvdG90eXBlIHN0cnVj
dHVyZS4KLSAgICByZXR1cm4gZ2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFzcz4oZXhlYy0+dm0o
KSwgKmRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYykpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRET01Q
cm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
LXsKLSAgICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNDOjpKU09iamVjdCo+KGFzT2JqZWN0KGdldERP
TVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KHZtLCAqSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihnbG9iYWxPYmplY3QpKS0+c3RvcmVkUHJvdG90eXBlKCkpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUgY3JlYXRlSlNCdWls
dGluKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU0Z1bmN0aW9uJiBpbml0aWFsaXplRnVu
Y3Rpb24sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgSlNDOjpKU09i
amVjdCogb2JqZWN0ID0gSlNDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxKU0NsYXNzPihn
bG9iYWxPYmplY3Qudm0oKSwgZ2xvYmFsT2JqZWN0KSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgY2Fs
bEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoc3RhdGUsICpvYmplY3QsIGluaXRpYWxpemVG
dW5jdGlvbik7Ci0gICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKG9iamVjdCk7Ci19Ci0K
LWlubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3Js
ZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxX
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIqPih3b3JsZC52bSgpLm1fdHlwZWRBcnJheUNvbnRy
b2xsZXIuZ2V0KCkpLT53cmFwcGVyT3duZXIoKTsKLX0KLQotaW5saW5lIHZvaWQqIHdyYXBwZXJL
ZXkoSlNDOjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0KQotewotICAgIHJldHVybiBkb21PYmplY3Q7
Ci19Ci0KLWlubGluZSBKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQmLCB2b2lkKikgeyByZXR1cm4gbnVsbHB0cjsgfQotaW5saW5lIGJvb2wgc2V0SW5s
aW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqLCBK
U0M6OldlYWtIYW5kbGVPd25lciopIHsgcmV0dXJuIGZhbHNlOyB9Ci1pbmxpbmUgYm9vbCBjbGVh
cklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0
KikgeyByZXR1cm4gZmFsc2U7IH0KLQotaW5saW5lIEpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNo
ZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2Jq
ZWN0KQotewotICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgcmV0dXJuIGRvbU9iamVjdC0+d3JhcHBlcigpOwotfQotCi1pbmxpbmUgSlNDOjpK
U0FycmF5QnVmZmVyKiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29y
bGQsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBpZiAoIXdvcmxkLmlzTm9ybWFs
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXItPm1fd3JhcHBl
ci5nZXQoKTsKLX0KLQotaW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01PYmplY3Qq
IHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpCi17Ci0gICAgaWYg
KCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0
LT5zZXRXcmFwcGVyKHdyYXBwZXIsIHdyYXBwZXJPd25lciwgJndvcmxkKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotaW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVy
V29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6SlNBcnJheUJ1
ZmZlciogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcikKLXsKLSAg
ICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkb21P
YmplY3QtPm1fd3JhcHBlciA9IEpTQzo6V2VhazxKU0M6OkpTQXJyYXlCdWZmZXI+KHdyYXBwZXIs
IHdyYXBwZXJPd25lciwgJndvcmxkKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIGJv
b2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlw
dFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTU9iamVjdCogd3JhcHBlcikKLXsKLSAgICBpZiAo
IXdvcmxkLmlzTm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkb21PYmplY3Qt
PmNsZWFyV3JhcHBlcih3cmFwcGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIGJv
b2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6
QXJyYXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKQotewot
ICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHdl
YWtDbGVhcihkb21PYmplY3QtPm1fd3JhcHBlciwgd3JhcHBlcik7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCog
Z2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyYgZG9tT2Jq
ZWN0KQotewotICAgIGlmIChhdXRvKiB3cmFwcGVyID0gZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3
b3JsZCwgJmRvbU9iamVjdCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiB3
b3JsZC5tX3dyYXBwZXJzLmdldCh3cmFwcGVyS2V5KCZkb21PYmplY3QpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQg
Y2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3Qs
IFdyYXBwZXJDbGFzcyogd3JhcHBlcikKLXsKLSAgICBKU0M6OldlYWtIYW5kbGVPd25lciogb3du
ZXIgPSB3cmFwcGVyT3duZXIod29ybGQsIGRvbU9iamVjdCk7Ci0gICAgaWYgKHNldElubGluZUNh
Y2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlciwgb3duZXIpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgd2Vha0FkZCh3b3JsZC5tX3dyYXBwZXJzLCB3cmFwcGVyS2V5KGRvbU9iamVj
dCksIEpTQzo6V2VhazxKU0M6OkpTT2JqZWN0Pih3cmFwcGVyLCBvd25lciwgJndvcmxkKSk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlu
bGluZSB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNz
KiBkb21PYmplY3QsIFdyYXBwZXJDbGFzcyogd3JhcHBlcikKLXsKLSAgICBpZiAoY2xlYXJJbmxp
bmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBwZXIpKQotICAgICAgICByZXR1
cm47Ci0gICAgd2Vha1JlbW92ZSh3b3JsZC5tX3dyYXBwZXJzLCB3cmFwcGVyS2V5KGRvbU9iamVj
dCksIHdyYXBwZXIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUg
VD4gaW5saW5lIGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWY8VD4mJiBkb21PYmplY3QpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6
aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZQotewotICAgIHVzaW5nIFdy
YXBwZXJDbGFzcyA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFz
cz46OldyYXBwZXJDbGFzczsKLQotICAgIEFTU0VSVCghZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxP
YmplY3QtPndvcmxkKCksIGRvbU9iamVjdCkpOwotICAgIGF1dG8qIGRvbU9iamVjdFB0ciA9IGRv
bU9iamVjdC5wdHIoKTsKLSAgICBhdXRvKiB3cmFwcGVyID0gV3JhcHBlckNsYXNzOjpjcmVhdGUo
Z2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFzcz4oZ2xvYmFsT2JqZWN0LT52bSgpLCAqZ2xvYmFs
T2JqZWN0KSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGRvbU9iamVjdCkpOwotICAgIGNhY2hlV3Jh
cHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIGRvbU9iamVjdFB0ciwgd3JhcHBlcik7Ci0gICAg
cmV0dXJuIHdyYXBwZXI7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFt
ZSBUPiBpbmxpbmUgYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFJlZjxUPiYmIGRvbU9iamVjdCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0
ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252
ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZQotewotICAgIHJldHVy
biBjcmVhdGVXcmFwcGVyPERPTUNsYXNzPihnbG9iYWxPYmplY3QsIHN0YXRpY19yZWZlcmVuY2Vf
Y2FzdDxET01DbGFzcz4oV1RGTW92ZShkb21PYmplY3QpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHdyYXAoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBET01DbGFzcyYgZG9tT2JqZWN0
KQotewotICAgIGlmIChhdXRvKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmpl
Y3QtPndvcmxkKCksIGRvbU9iamVjdCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJl
dHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIFJlZjxET01DbGFzcz4o
ZG9tT2JqZWN0KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0Ns
YXNzJiBjYXN0VGhpc1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKLXsKLSAgICBhdXRvIHRo
aXNWYWx1ZSA9IHN0YXRlLnRoaXNWYWx1ZSgpOwotICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHlu
YW1pY0Rvd25jYXN0PEpTQ2xhc3MqPihzdGF0ZS52bSgpLCB0aGlzVmFsdWUpOwotICAgIEFTU0VS
VChjYXN0ZWRUaGlzKTsKLSAgICByZXR1cm4gKmNhc3RlZFRoaXM7Ci19Ci0KLWlubGluZSBpbnQz
Ml90IGZpbml0ZUludDMyVmFsdWUoSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgYm9vbCYgb2theSkKLXsKLSAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIo
ZXhlYyk7Ci0gICAgb2theSA9IHN0ZDo6aXNmaW5pdGUobnVtYmVyKTsKLSAgICByZXR1cm4gSlND
Ojp0b0ludDMyKG51bWJlcik7Ci19Ci0KLS8vIFZhbGlkYXRlcyB0aGF0IHRoZSBwYXNzZWQgb2Jq
ZWN0IGlzIGEgc2VxdWVuY2UgdHlwZSBwZXIgc2VjdGlvbiA0LjEuMTMgb2YgdGhlIFdlYklETCBz
cGVjLgotaW5saW5lIEpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSYg
ZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCYgbGVuZ3RoKQotewotICAgIEpTQzo6
Vk0mIHZtID0gZXhlYy52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IHZhbHVlLmdldE9iamVjdCgpOwot
ICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoZXhlYywg
c2NvcGUpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBKU0M6OkpTVmFs
dWUgbGVuZ3RoVmFsdWUgPSBvYmplY3QtPmdldCgmZXhlYywgZXhlYy5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLQotICAg
IGlmIChsZW5ndGhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgIHRocm93U2Vx
dWVuY2VUeXBlRXJyb3IoZXhlYywgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci0KLSAgICBsZW5ndGggPSBsZW5ndGhWYWx1ZS50b1VJbnQzMigmZXhlYyk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0KLSAgICByZXR1cm4gb2JqZWN0Owot
fQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyJiBidWZmZXIpCi17
Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndv
cmxkKCksIGJ1ZmZlcikpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAvLyBUaGUgSlNB
cnJheUJ1ZmZlcjo6Y3JlYXRlIGZ1bmN0aW9uIHdpbGwgcmVnaXN0ZXIgdGhlIHdyYXBwZXIgaW4g
ZmluaXNoQ3JlYXRpb24uCi0gICAgcmV0dXJuIEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHN0
YXRlLT52bSgpLCBnbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKGJ1ZmZlci5zaGFy
aW5nTW9kZSgpKSwgJmJ1ZmZlcik7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpBcnJheUJ1ZmZlclZpZXcmIHZpZXcpCi17Ci0gICAgcmV0dXJuIHZpZXcud3JhcChzdGF0ZSwg
Z2xvYmFsT2JqZWN0KTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1
ZmZlciogYnVmZmVyKQotewotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gSlNDOjpq
c051bGwoKTsKLSAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqYnVmZmVyKTsK
LX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyVmlldyogdmll
dykKLXsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAg
IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICp2aWV3KTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VD4mJiBwdHIpCi17Ci0gICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBwdHIuZ2V0KCkpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiYmIHB0cikKLXsK
LSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFQ+
JiB2ZWN0b3IpCi17Ci0gICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgSlNDOjpKU0FycmF5
KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgdmVjdG9yLnNpemUo
KSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGFy
cmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgdmVj
dG9yW2ldKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1
ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFycmF5OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8VD4+JiB2ZWN0b3Ip
Ci17Ci0gICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgSlNDOjpKU0FycmF5KiBhcnJheSA9
IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgdmVjdG9yLnNpemUoKSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGFycmF5LT5wdXRE
aXJlY3RJbmRleChleGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgdmVjdG9yW2ldLmdl
dCgpKSk7Ci0gICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgp
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGFycmF5OwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgSlNDOjpQ
cml2YXRlTmFtZSYgcHJpdmF0ZU5hbWUpCi17Ci0gICAgcmV0dXJuIEpTQzo6U3ltYm9sOjpjcmVh
dGUoZXhlYy0+dm0oKSwgcHJpdmF0ZU5hbWUudWlkKCkpOwotfQotCi1pbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3Vs
dE9iamVjdCgmc3RhdGUsIHZhbHVlLCBmYWxzZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgdmFsdWUpCi17Ci0gICAg
cmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwgdG9KUygmc3RhdGUsICZn
bG9iYWxPYmplY3QsIHZhbHVlKSwgZmFsc2UpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNJdGVyYXRvckVuZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCi17Ci0gICAgcmV0dXJuIGNyZWF0
ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwgSlNDOjpqc1VuZGVmaW5lZCgpLCB0cnVlKTsK
LX0KLQotaW5saW5lIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJl
ZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAg
IGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0M6OkpTQXJyYXlCdWZmZXJWaWV3
Kj4odm0sIHZhbHVlKTsKLSAgICBpZiAoIXdyYXBwZXIpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIHJldHVybiB3cmFwcGVyLT5wb3NzaWJseVNoYXJlZEltcGwoKTsKLX0KLQotaW5saW5l
IFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9VbnNoYXJlZEFycmF5QnVmZmVyVmlldyhK
U0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8gcmVzdWx0ID0gdG9Q
b3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyh2bSwgdmFsdWUpOwotICAgIGlmICghcmVzdWx0
IHx8IHJlc3VsdC0+aXNTaGFyZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJs
eVNoYXJlZEludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4o
dm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvUG9zc2libHlT
aGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJu
IEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4o
dm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvUG9zc2libHlT
aGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJu
IEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDMyQWRhcHRvcj4o
dm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvUG9zc2libHlT
aGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJu
IEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRvcj4o
dm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Bv
c3NpYmx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6
VWludDhDbGFtcGVkQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVp
bnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRW
aWV3PEpTQzo6VWludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6
OlVpbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlw
ZWRWaWV3PEpTQzo6VWludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxK
U0M6OkZsb2F0MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRp
dmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJl
ZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0NjRBcnJheShKU0M6
OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFy
ZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotCi1p
bmxpbmUgUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVkSW50OEFycmF5KEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5
cGVkVmlldzxKU0M6OkludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpT
Qzo6SW50MTZBcnJheT4gdG9VbnNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6
SW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6SW50MzJBcnJh
eT4gdG9VbnNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkg
eyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFwdG9y
Pih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9VbnNoYXJl
ZFVpbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwgdmFsdWUp
OyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5zaGFyZWRVaW50
OENsYW1wZWRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENsYW1wZWRBZGFwdG9yPih2
bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvVW5zaGFyZWRV
aW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6
OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MTZBZGFwdG9yPih2bSwgdmFsdWUp
OyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVW5zaGFyZWRVaW50MzJBcnJh
eShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFy
ZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxp
bmUgUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2
ZVR5cGVkVmlldzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVm
UHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mIHZt
LCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVk
VmlldzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEpTVD4gaW5saW5lIFZlY3RvcjxSZWY8VD4+IHRvUmVmTmF0aXZlQXJy
YXkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgSlND
OjpWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLQotICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICB0aHJvd1Nl
cXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
fQotCi0gICAgVmVjdG9yPFJlZjxUPj4gcmVzdWx0OwotICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZz
dGF0ZSwgdmFsdWUsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgewotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICAgICAgaWYgKGpzVmFsdWUuaW5oZXJpdHModm0sIEpTVDo6
aW5mbygpKSkgewotICAgICAgICAgICAgYXV0byogb2JqZWN0ID0gSlNUOjp0b1dyYXBwZWQodm0s
IGpzVmFsdWUpOwotICAgICAgICAgICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgICAgICAgICByZXN1
bHQuYXBwZW5kKCpvYmplY3QpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRocm93QXJy
YXlFbGVtZW50VHlwZUVycm9yKCpzdGF0ZSwgc2NvcGUpOwotICAgIH0pOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLWlubGluZSBTdHJpbmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIEFTU0VSVCghcHJvcGVydHlOYW1lLmlzU3lt
Ym9sKCkpOwotICAgIHJldHVybiBwcm9wZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlk
KCkgOiBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpOwotfQotCi1pbmxpbmUgQXRvbWljU3RyaW5n
IHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkKLXsKLSAgICByZXR1cm4gQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3Bl
cnR5TmFtZS51aWQoKSA6IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwotfQotCi10ZW1wbGF0
ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3RoPiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKQotewotICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OkpTRnVuY3Rpb246
OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGxlbmd0aCwg
cHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSwgbmF0aXZlRnVuY3Rpb24pKTsKLX0KLQotQUxXQVlT
X0lOTElORSB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQotewotICAg
IGlmICh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm47Ci0gICAgcHJvcGFn
YXRlRXhjZXB0aW9uU2xvd1BhdGgoc3RhdGUsIHRocm93U2NvcGUsIFdURk1vdmUoZXhjZXB0aW9u
KSk7Ci19Ci0KLWlubGluZSB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8dm9pZD4mJiB2
YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKQotICAgICAg
ICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNl
cHRpb24oKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VD4mJiB2YWx1ZSkK
LXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHBy
b3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlv
bigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoJnN0YXRl
LCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VD4mJiB2YWx1ZSkKLXsKLSAgICBp
ZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4
Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0
YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJp
dHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVCYgbm9kZSkKLXsKLSAgICByZXR1cm4g
c2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsICZub2RlKSA/ICZub2RlIDogbnVsbHB0cjsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hl
Y2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBUKiBub2RlKQotewotICAg
IHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgbm9kZSkgPyBub2RlIDogbnVs
bHB0cjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEV4Y2VwdGlvbk9yPFQqPiBC
aW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgRXhjZXB0aW9uT3I8VCo+JiYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmhhc0V4Y2VwdGlv
bigpKQotICAgICAgICByZXR1cm4gdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpOwotICAgIHJldHVy
biBjaGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRp
bmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBF
eGNlcHRpb25PcjxUJj4mJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkp
Ci0gICAgICAgIHJldHVybiB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGNo
ZWNrU2VjdXJpdHlGb3JOb2RlKHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19
Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5jcHAJKHJldmlzaW9uIDIxMTM1MykJ
KGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoyMTEzNTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDM0IEBACisvKgorICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA0LTIwMTEsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMTMgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKKworI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1
ZGUgIkNvbW1vblZNLmgiCisjaW5jbHVkZSAiRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uSGVhZGVycy5oIgorI2luY2x1ZGUgIkV4Y2Vw
dGlvbkludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxQYXJz
ZXJJZGlvbXMuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUg
IkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgorI2luY2x1ZGUgIkpT
RE9NV2luZG93Q3VzdG9tLmgiCisjaW5jbHVkZSAiSlNFeGNlcHRpb25CYXNlLmgiCisjaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDxieXRlY29kZS9Db2RlQmxvY2suaD4KKyNp
bmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5j
ZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0Vycm9y
SGFuZGxpbmdTY29wZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25I
ZWxwZXJzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8c3Rk
YXJnLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9DaGFyYWN0ZXJOYW1lcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
KwordXNpbmcgbmFtZXNwYWNlIEpTQzsKK3VzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJ
QkxFKERPTUNvbnN0cnVjdG9yT2JqZWN0KTsKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RF
U1RSVUNUSUJMRShET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCk7CisKK3ZvaWQgYWRkSW1wdXJl
UHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgY29tbW9u
Vk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOworfQorCitKU1ZhbHVlIGpzT3du
ZWRTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCit7CisgICAg
aWYgKHMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICByZXR1cm4ganNP
d25lZFN0cmluZyhleGVjLCBzKTsKK30KKworSlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQoreworICAgIGlmIChzLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2Fj
aGUoZXhlYywgcyk7Cit9CisKK0pTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBVUkwmIHVybCkKK3sKKyAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdXJsLnN0
cmluZygpKTsKK30KKworSlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgVVJMJiB1cmwpCit7CisgICAgaWYgKHVybC5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHVy
bC5zdHJpbmcoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvQnl0ZVN0cmlu
ZyhFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBTdHJpbmcmJiBzdHJp
bmcpCit7CisgICAgaWYgKCFzdHJpbmcuY29udGFpbnNPbmx5TGF0aW4xKCkpIHsKKyAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KKworU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVTdHJp
bmcoRXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOworICAg
IHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3RhdGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmluZykp
OworfQorCitTdHJpbmcgdmFsdWVUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dU
RlN0cmluZygmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisK
KyAgICByZXR1cm4gc3RyaW5nVG9CeXRlU3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJp
bmcpKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGhhc1VucGFpcmVkU3Vycm9nYXRlKFN0cmlu
Z1ZpZXcgc3RyaW5nKQoreworICAgIC8vIEZhc3QgcGF0aCBmb3IgOC1iaXQgc3RyaW5nczsgdGhl
eSBjYW4ndCBoYXZlIGFueSBzdXJyb2dhdGVzLgorICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogc3RyaW5nLmNv
ZGVQb2ludHMoKSkgeworICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0
YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvVVNWU3RyaW5nKFN0cmluZyYmIHN0cmluZykKK3sK
KyAgICAvLyBGYXN0IHBhdGggZm9yIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBubyB1bnBhaXJl
ZCBzdXJyb2dhdGVzLgorICAgIGlmICghaGFzVW5wYWlyZWRTdXJyb2dhdGUoc3RyaW5nKSkKKyAg
ICAgICAgcmV0dXJuIHN0cmluZzsKKworICAgIC8vIFNsb3cgcGF0aDogaHR0cDovL2hleWNhbS5n
aXRodWIuaW8vd2ViaWRsLyNkZm4tb2J0YWluLXVuaWNvZGUKKyAgICAvLyBSZXBsYWNlcyB1bnBh
aXJlZCBzdXJyb2dhdGVzIHdpdGggdGhlIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4KKyAgICBTdHJp
bmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KHN0cmluZy5sZW5n
dGgoKSk7CisgICAgU3RyaW5nVmlldyB2aWV3IHsgc3RyaW5nIH07CisgICAgZm9yIChhdXRvIGNv
ZGVQb2ludCA6IHZpZXcuY29kZVBvaW50cygpKSB7CisgICAgICAgIGlmIChVX0lTX1NVUlJPR0FU
RShjb2RlUG9pbnQpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVudENoYXJh
Y3Rlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29kZVBvaW50
KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworfQorCitTdHJpbmcgaWRl
bnRpZmllclRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZp
ZXIpCit7CisgICAgU3RyaW5nIHN0cmluZyA9IGlkZW50aWZpZXIuc3RyaW5nKCk7CisgICAgcmV0
dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK1N0cmluZyB2YWx1
ZVRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgcmV0dXJuIHN0cmluZ1Rv
VVNWU3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK0pTVmFsdWUganNEYXRlKEV4ZWNTdGF0
ZSogZXhlYywgZG91YmxlIHZhbHVlKQoreworICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0
ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUo
KSwgdmFsdWUpOworfQorCitkb3VibGUgdmFsdWVUb0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQorICAgICAgICByZXR1cm4g
dmFsdWUuYXNOdW1iZXIoKTsKKyAgICBpZiAoIXZhbHVlLmluaGVyaXRzKGV4ZWMtPnZtKCksIERh
dGVJbnN0YW5jZTo6aW5mbygpKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGVJbnN0YW5j
ZSo+KHZhbHVlLnRvT2JqZWN0KGV4ZWMpKS0+aW50ZXJuYWxOdW1iZXIoKTsKK30KKwordm9pZCBy
ZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBD
YWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwor
ICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpzRHluYW1pY0Rvd25jYXN0PEpTQzo6RXhjZXB0aW9uKj4o
dm0sIGV4Y2VwdGlvblZhbHVlKTsKKyAgICBpZiAoIWV4Y2VwdGlvbikgeworICAgICAgICBleGNl
cHRpb24gPSB2bS5sYXN0RXhjZXB0aW9uKCk7CisgICAgICAgIGlmICghZXhjZXB0aW9uKQorICAg
ICAgICAgICAgZXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246OmNyZWF0ZShleGVjLT52bSgpLCBl
eGNlcHRpb25WYWx1ZSwgSlNDOjpFeGNlcHRpb246OkRvTm90Q2FwdHVyZVN0YWNrKTsKKyAgICB9
CisKKyAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBjYWNoZWRTY3JpcHQpOwor
fQorCitTdHJpbmcgcmV0cmlldmVFcnJvck1lc3NhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgVk0mIHZt
LCBKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2F0Y2hTY29wZSYgY2F0Y2hTY29wZSkKK3sKKyAgICBpZiAo
YXV0byogZXhjZXB0aW9uQmFzZSA9IHRvRXhjZXB0aW9uQmFzZSh2bSwgZXhjZXB0aW9uKSkKKyAg
ICAgICAgcmV0dXJuIGV4Y2VwdGlvbkJhc2UtPnRvU3RyaW5nKCk7CisKKyAgICAvLyBGSVhNRTog
PGh0dHA6Ly93ZWJraXQub3JnL2IvMTE1MDg3PiBXZWIgSW5zcGVjdG9yOiBXZWJDb3JlOjpyZXBv
cnRFeGNlcHRpb24gc2hvdWxkIG5vdCBldmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2Vw
dGlvbnMKKyAgICAvLyBJZiB0aGlzIGlzIGEgY3VzdG9tIGV4Y2VwdGlvbiBvYmplY3QsIGNhbGwg
dG9TdHJpbmcgb24gaXQgdG8gdHJ5IGFuZCBnZXQgYSBuaWNlIHN0cmluZyByZXByZXNlbnRhdGlv
biBmb3IgdGhlIGV4Y2VwdGlvbi4KKyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOworICAgIGlmIChh
dXRvKiBlcnJvciA9IGpzRHluYW1pY0Rvd25jYXN0PEVycm9ySW5zdGFuY2UqPih2bSwgZXhjZXB0
aW9uKSkKKyAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3ItPnNhbml0aXplZFRvU3RyaW5nKCZz
dGF0ZSk7CisgICAgZWxzZQorICAgICAgICBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb24udG9XVEZT
dHJpbmcoJnN0YXRlKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgYW55IG5ldyBleGNlcHRp
b24gdGhhdCBtYXkgYmUgdGhyb3duIGluIHRoZSB0b1N0cmluZygpIGNhbGwgYWJvdmUuCisgICAg
Ly8gcmVwb3J0RXhjZXB0aW9uKCkgaXMgbm90IHN1cHBvc2VkIHRvIGJlIG1ha2luZyBuZXcgZXhj
ZXB0aW9ucy4KKyAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgdm0uY2xlYXJM
YXN0RXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIGVycm9yTWVzc2FnZTsKK30KKwordm9pZCByZXBv
cnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uLCBD
YWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCwgRXhjZXB0aW9uRGV0YWlscyogZXhjZXB0aW9uRGV0
YWlscykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNl
cHRpb24odm0sIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybjsKKworICAgIEVycm9ySGFuZGxp
bmdTY29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkpOworCisgICAgUmVmUHRyPFNjcmlwdENhbGxT
dGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oZXhlYywg
ZXhjZXB0aW9uLCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUpKTsK
KyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigp
OworCisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7CisgICAgaWYgKEpTRE9N
V2luZG93KiB3aW5kb3cgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0RPTVdpbmRvdyo+KHZtLCBnbG9i
YWxPYmplY3QpKSB7CisgICAgICAgIGlmICghd2luZG93LT53cmFwcGVkKCkuaXNDdXJyZW50bHlE
aXNwbGF5ZWRJbkZyYW1lKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50
IGxpbmVOdW1iZXIgPSAwOworICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOworICAgIFN0cmluZyBl
eGNlcHRpb25Tb3VyY2VVUkw7CisgICAgaWYgKGNvbnN0IFNjcmlwdENhbGxGcmFtZSogY2FsbEZy
YW1lID0gY2FsbFN0YWNrLT5maXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSgpKSB7CisgICAgICAgIGxp
bmVOdW1iZXIgPSBjYWxsRnJhbWUtPmxpbmVOdW1iZXIoKTsKKyAgICAgICAgY29sdW1uTnVtYmVy
ID0gY2FsbEZyYW1lLT5jb2x1bW5OdW1iZXIoKTsKKyAgICAgICAgZXhjZXB0aW9uU291cmNlVVJM
ID0gY2FsbEZyYW1lLT5zb3VyY2VVUkwoKTsKKyAgICB9CisKKyAgICBTdHJpbmcgZXJyb3JNZXNz
YWdlID0gcmV0cmlldmVFcnJvck1lc3NhZ2UoKmV4ZWMsIHZtLCBleGNlcHRpb24tPnZhbHVlKCks
IHNjb3BlKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKGVycm9yTWVzc2FnZSwgbGluZU51bWJl
ciwgY29sdW1uTnVtYmVyLCBleGNlcHRpb25Tb3VyY2VVUkwsIGV4Y2VwdGlvbiwgY2FsbFN0YWNr
LT5zaXplKCkgPyBjYWxsU3RhY2sgOiBudWxscHRyLCBjYWNoZWRTY3JpcHQpOworCisgICAgaWYg
KGV4Y2VwdGlvbkRldGFpbHMpIHsKKyAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+bWVzc2FnZSA9
IGVycm9yTWVzc2FnZTsKKyAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+bGluZU51bWJlciA9IGxp
bmVOdW1iZXI7CisgICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPmNvbHVtbk51bWJlciA9IGNvbHVt
bk51bWJlcjsKKyAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+c291cmNlVVJMID0gZXhjZXB0aW9u
U291cmNlVVJMOworICAgIH0KK30KKwordm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBleGNlcHRpb24gPSBzY29wZS5l
eGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgIHJlcG9ydEV4Y2Vw
dGlvbihleGVjLCBleGNlcHRpb24pOworfQorCitzdGF0aWMgSlNWYWx1ZSBjcmVhdGVET01FeGNl
cHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVjLCBjb25zdCBTdHJpbmcqIG1l
c3NhZ2UgPSBudWxscHRyKQoreworICAgIGlmICghZWMgfHwgZWMgPT0gRXhpc3RpbmdFeGNlcHRp
b25FcnJvcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICAvLyBGSVhNRTog
SGFuZGxlIG90aGVyIFdlYklETCBleGNlcHRpb24gdHlwZXMuCisgICAgaWYgKGVjID09IFR5cGVF
cnJvcikgeworICAgICAgICBpZiAoIW1lc3NhZ2UgfHwgbWVzc2FnZS0+aXNFbXB0eSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZVR5cGVFcnJvcihleGVjLCAqbWVzc2FnZSk7CisgICAgfQorCisgICAgaWYgKGVjID09IFJh
bmdlRXJyb3IpIHsKKyAgICAgICAgaWYgKCFtZXNzYWdlIHx8IG1lc3NhZ2UtPmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
QmFkIHZhbHVlIikpOworICAgICAgICByZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAqbWVz
c2FnZSk7CisgICAgfQorCisgICAgaWYgKGVjID09IFN0YWNrT3ZlcmZsb3dFcnJvcikKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKKworICAgIC8vIEZJWE1F
OiBBbGwgY2FsbGVycyB0byBjcmVhdGVET01FeGNlcHRpb24gbmVlZCB0byBwYXNzIGluIHRoZSBj
b3JyZWN0IGdsb2JhbCBvYmplY3QuCisgICAgLy8gRm9yIG5vdywgd2UncmUgZ29pbmcgdG8gYXNz
dW1lIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LiBXaGljaCBpcyB3cm9uZyBpbiBjYXNlcyBsaWtl
IHRoaXM6CisgICAgLy8gZnJhbWVzWzBdLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobnVsbCwgbnVs
bCk7IC8vIHRocm93cyBhbiBleGNlcHRpb24gd2hpY2ggc2hvdWxkIGhhdmUgdGhlIHN1YmZyYW1l
J3MgcHJvdG90eXBlcy4KKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZGVw
cmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKTsKKworICAgIEV4Y2VwdGlvbkNv
ZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisKKyAgICBDU3RyaW5nIG1lc3NhZ2VDU3Ry
aW5nOworICAgIGlmIChtZXNzYWdlKQorICAgICAgICBtZXNzYWdlQ1N0cmluZyA9IG1lc3NhZ2Ut
PnV0ZjgoKTsKKyAgICBpZiAobWVzc2FnZSAmJiAhbWVzc2FnZS0+aXNFbXB0eSgpKSB7CisgICAg
ICAgIC8vIEl0IGlzIHNhZmUgdG8gZG8gdGhpcyBiZWNhdXNlIHRoZSBjaGFyKiBjb250ZW50cyBv
ZiB0aGUgQ1N0cmluZyBhcmUgY29waWVkIGludG8gYSBuZXcgV1RGOjpTdHJpbmcgYmVmb3JlIHRo
ZSBDU3RyaW5nIGlzIGRlc3Ryb3llZC4KKyAgICAgICAgZGVzY3JpcHRpb24uZGVzY3JpcHRpb24g
PSBtZXNzYWdlQ1N0cmluZy5kYXRhKCk7CisgICAgfQorCisgICAgSlNWYWx1ZSBlcnJvck9iamVj
dDsKKyAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLnR5cGUpIHsKKyAgICBjYXNlIERPTUNvcmVFeGNl
cHRpb25UeXBlOgorI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgIGNhc2UgSURCRGF0
YWJhc2VFeGNlcHRpb25UeXBlOgorI2VuZGlmCisgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIERPTUNvcmVFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVFeGNlcHRpb25UeXBlOgorICAgICAgICBl
cnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBGaWxlRXhjZXB0aW9uOjpjcmVh
dGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTUUxFeGNlcHRpb25U
eXBlOgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTUUxF
eGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFNWR0V4Y2VwdGlvblR5cGU6CisgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIFNWR0V4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgWFBhdGhFeGNlcHRpb25UeXBlOgorICAgICAgICBlcnJvck9iamVjdCA9
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBYUGF0aEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0
aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoZXJyb3JPYmpl
Y3QpOworICAgIGFkZEVycm9ySW5mbyhleGVjLCBhc09iamVjdChlcnJvck9iamVjdCksIHRydWUp
OworICAgIHJldHVybiBlcnJvck9iamVjdDsKK30KKworSlNWYWx1ZSBjcmVhdGVET01FeGNlcHRp
b24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVjLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCit7CisgICAgcmV0dXJuIGNyZWF0ZURPTUV4Y2VwdGlvbihleGVjLCBlYywgJm1lc3NhZ2Up
OworfQorCitKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBFeGNl
cHRpb24mJiBleGNlcHRpb24pCit7CisgICAgcmV0dXJuIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3Rh
dGUsIGV4Y2VwdGlvbi5jb2RlKCksIGV4Y2VwdGlvbi5yZWxlYXNlTWVzc2FnZSgpKTsKK30KKwor
dm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQoreworICAg
IEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVET01FeGNlcHRpb24oc3RhdGUsIFdURk1vdmUoZXhjZXB0
aW9uKSkpOworfQorCitib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBD
YWxsVHlwZSBjYWxsVHlwZTsKKyAgICBKU1ZhbHVlIGFwcGx5TWV0aG9kID0gb2JqZWN0LT5nZXRN
ZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJh
dG9yU3ltYm9sLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC5pdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQg
YmUgY2FsbGFibGUiKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwor
CisgICAgcmV0dXJuICFhcHBseU1ldGhvZC5pc1VuZGVmaW5lZCgpOworfQorCitib29sIEJpbmRp
bmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEV4ZWNTdGF0ZSYgc3RhdGUsIEZy
YW1lJiBmcmFtZSwgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsICZmcmFtZSwgRG9Ob3RSZXBvcnRTZWN1
cml0eUVycm9yKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgbWVzc2FnZSA9IGZyYW1lLmRv
Y3VtZW50KCktPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3Rp
dmVET01XaW5kb3coJnN0YXRlKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEJpbmRp
bmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhFeGVjU3RhdGUmIHN0YXRl
LCBET01XaW5kb3cmIGdsb2JhbE9iamVjdCwgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmIChC
aW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRlLCBnbG9i
YWxPYmplY3QsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIG1lc3NhZ2UgPSBnbG9iYWxPYmplY3QuY3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3Nh
Z2UoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQoreworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBmcmFtZS0+
ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPnByaW50RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOworfQor
CitTdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKK3sKKyAgICBKU0RPTVN0cnVj
dHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5zdHJ1Y3R1cmVzKE5vTG9ja2luZ05l
Y2Vzc2FyeSk7CisgICAgcmV0dXJuIHN0cnVjdHVyZXMuZ2V0KGNsYXNzSW5mbykuZ2V0KCk7Cit9
CisKK1N0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
KQoreworICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtpbmcoZ2xvYmFsT2JqZWN0LnZt
KCkuaGVhcCwgZ2xvYmFsT2JqZWN0LmdjTG9jaygpKTsKKyAgICBKU0RPTVN0cnVjdHVyZU1hcCYg
c3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5zdHJ1Y3R1cmVzKGxvY2tlcik7CisgICAgQVNTRVJU
KCFzdHJ1Y3R1cmVzLmNvbnRhaW5zKGNsYXNzSW5mbykpOworICAgIHJldHVybiBzdHJ1Y3R1cmVz
LnNldChjbGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC52bSgp
LCAmZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Cit9CisK
K3N0YXRpYyBjb25zdCBpbnQzMl90IGtNYXhJbnQzMiA9IDB4N2ZmZmZmZmY7CitzdGF0aWMgY29u
c3QgaW50MzJfdCBrTWluSW50MzIgPSAta01heEludDMyIC0gMTsKK3N0YXRpYyBjb25zdCB1aW50
MzJfdCBrTWF4VUludDMyID0gMHhmZmZmZmZmZlU7CitzdGF0aWMgY29uc3QgaW50NjRfdCBrSlNN
YXhJbnRlZ2VyID0gMHgyMDAwMDAwMDAwMDAwMExMIC0gMTsgLy8gMl41MyAtIDEsIGxhcmdlc3Qg
aW50ZWdlciBleGFjdGx5IHJlcHJlc2VudGFibGUgaW4gRUNNQVNjcmlwdC4KKworc3RhdGljIFN0
cmluZyByYW5nZUVycm9yU3RyaW5nKGRvdWJsZSB2YWx1ZSwgZG91YmxlIG1pbiwgZG91YmxlIG1h
eCkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiVmFsdWUgIiwgU3RyaW5nOjpudW1iZXJUb1N0
cmluZ0VDTUFTY3JpcHQodmFsdWUpLCAiIGlzIG91dHNpZGUgdGhlIHJhbmdlIFsiLCBTdHJpbmc6
Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtaW4pLCAiLCAiLCBTdHJpbmc6Om51bWJlclRvU3Ry
aW5nRUNNQVNjcmlwdChtYXgpLCAiXSIpOworfQorCitzdGF0aWMgZG91YmxlIGVuZm9yY2VSYW5n
ZShFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgeCwgZG91YmxlIG1pbmltdW0sIGRvdWJsZSBtYXhp
bXVtKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2lu
Zih4KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5nZUVycm9y
U3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgIHggPSB0cnVuYyh4KTsKKyAgICBpZiAoeCA8IG1pbmltdW0gfHwgeCA+IG1heGltdW0pIHsK
KyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4
LCBtaW5pbXVtLCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1
cm4geDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSW50VHlwZUxpbWl0cyB7
Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVMaW1pdHM8aW50OF90PiB7CisgICAg
c3RhdGljIGNvbnN0IGludDhfdCBtaW5WYWx1ZSA9IC0xMjg7CisgICAgc3RhdGljIGNvbnN0IGlu
dDhfdCBtYXhWYWx1ZSA9IDEyNzsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZW
YWx1ZXMgPSAyNTY7IC8vIDJeOAorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBJbnRUeXBlTGlt
aXRzPHVpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBtYXhWYWx1ZSA9IDI1NTsK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAor
fTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBJbnRUeXBlTGltaXRzPGludDE2X3Q+IHsKKyAgICBz
dGF0aWMgY29uc3Qgc2hvcnQgbWluVmFsdWUgPSAtMzI3Njg7CisgICAgc3RhdGljIGNvbnN0IHNo
b3J0IG1heFZhbHVlID0gMzI3Njc7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9m
VmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlw
ZUxpbWl0czx1aW50MTZfdD4geworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtYXhW
YWx1ZSA9IDY1NTM1OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9
IDY1NTM2OyAvLyAyXjE2Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBpbmxp
bmUgVCB0b1NtYWxsZXJJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2lu
dGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHNpZ25lZCBpbnRlZ3Jh
bCB0eXBlcyIpOworCisgICAgdHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0Owor
ICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCBzaWduZWQg
aW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCisgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkgewor
ICAgICAgICBpbnQzMl90IGQgPSB2YWx1ZS5hc0ludDMyKCk7CisgICAgICAgIGlmIChkID49IExp
bWl0c1RyYWl0OjptaW5WYWx1ZSAmJiBkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKKyAgICAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiBk
IDwgTGltaXRzVHJhaXQ6Om1pblZhbHVlID8gTGltaXRzVHJhaXQ6Om1pblZhbHVlIDogTGltaXRz
VHJhaXQ6Om1heFZhbHVlOworICAgICAgICB9CisgICAgICAgIGQgJT0gTGltaXRzVHJhaXQ6Om51
bWJlck9mVmFsdWVzOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCA+IExpbWl0c1Ry
YWl0OjptYXhWYWx1ZSA/IGQgLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiBkKTsKKyAg
ICB9CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisKKyAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
KyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgorICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBMaW1pdHNUcmFp
dDo6bWluVmFsdWUsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7CisgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICByZXR1cm4gc3RkOjppc25hbih4
KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOworICAgIH0KKworICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8
IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCisgICAgICAgIHJldHVybiAwOworCisgICAgeCA9IHggPCAw
ID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7CisgICAgeCA9IGZtb2QoeCwgTGlt
aXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih4
ID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8geCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVl
cyA6IHgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBpbmxpbmUgVCB0b1Nt
YWxsZXJVSW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFs
PFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHVuc2lnbmVkIGludGVncmFsIHR5
cGVzIik7CisKKyAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4gTGltaXRzVHJhaXQ7CisgICAg
Ly8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0IHVuc2lnbmVkIGlu
dGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgorICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKSB7Cisg
ICAgICAgIHVpbnQzMl90IGQgPSB2YWx1ZS5hc1VJbnQzMigpOworICAgICAgICBpZiAoZCA8PSBM
aW1pdHNUcmFpdDo6bWF4VmFsdWUpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4o
ZCk7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KGQpOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0dXJuIExpbWl0c1RyYWl0
OjptYXhWYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKworICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgIHJldHVybiBlbmZvcmNl
UmFuZ2Uoc3RhdGUsIHgsIDAsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7CisgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICByZXR1cm4gc3RkOjpp
c25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOworICAgIH0KKworICAgIGlmIChzdGQ6OmlzbmFu
KHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCisgICAgICAgIHJldHVybiAwOworCisgICAgeCA9
IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKSk7Cit9CisK
K2ludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKK30KKwordWlu
dDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKK30KKworaW50
OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKwordWludDhfdCB0b1VJbnQ4Q2xhbXAo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1Nt
YWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMt
Ynl0ZQoraW50OF90IHRvSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQorewor
ICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvV2ViSURMLyNlcy1vY3RldAordWludDhfdCB0b1VJbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUs
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisKK2lu
dDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisKK3VpbnQxNl90
IHRvVUludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7
CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOworfQorCitpbnQxNl90IHRv
SW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVy
biB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKwordWludDE2X3QgdG9VSW50MTZDbGFtcChFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVp
bnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xh
bXApOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXNob3J0CitpbnQx
Nl90IHRvSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJ
REwvI2VzLXVuc2lnbmVkLXNob3J0Cit1aW50MTZfdCB0b1VJbnQxNihFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90Pihz
dGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKK30K
KworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nCitpbnQzMl90IHRvSW50
MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5h
c0ludDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShz
dGF0ZSwgeCwga01pbkludDMyLCBrTWF4SW50MzIpOworfQorCitpbnQzMl90IHRvSW50MzJDbGFt
cChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0lu
dDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICBkb3VibGUgeCA9
IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDog
Y2xhbXBUbzxpbnQzMl90Pih4KTsKK30KKwordWludDMyX3QgdG9VSW50MzJDbGFtcChFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQor
ICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRv
PHVpbnQzMl90Pih4KTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11
bnNpZ25lZC1sb25nCit1aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHZhbHVlLmlzVUlu
dDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOworCisgICAgZG91YmxlIHgg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtNYXhVSW50MzIpOwor
fQorCitpbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworICAgIHJl
dHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIC1rSlNNYXhJbnRlZ2VyLCBrSlNNYXhJbnRlZ2Vy
KTsKK30KKwordWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgZG91YmxlIHggPSB2YWx1
ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwor
ICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtKU01heEludGVnZXIpOworfQor
CitpbnQ2NF90IHRvSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIHJldHVy
biBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bWluPGRvdWJs
ZT4oc3RkOjptYXg8ZG91YmxlPih4LCAta0pTTWF4SW50ZWdlciksIGtKU01heEludGVnZXIpKTsK
K30KKwordWludDY0X3QgdG9VSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAg
IHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om1p
bjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgMCksIGtKU01heEludGVnZXIpKTsKK30KKwor
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nLWxvbmcKK2ludDY0X3QgdG9J
bnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJsZSB4ID0g
dmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKworICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0
eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCisgICAgdW5zaWduZWQg
bG9uZyBsb25nIG47CisgICAgZG91YmxlVG9JbnRlZ2VyKHgsIG4pOworICAgIHJldHVybiBuOwor
fQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmctbG9u
ZwordWludDY0X3QgdG9VSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisKKyAgICAvLyBNYXAgTmFO
cyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0
LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOworICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsK
KyAgICByZXR1cm4gbjsKK30KKworY2xhc3MgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvciB7
CitwdWJsaWM6CisgICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvcigpID0gZGVmYXVsdDsK
KworICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2hhc1NraXBwZWRGaXJzdEZyYW1lKSB7
CisgICAgICAgICAgICBtX2hhc1NraXBwZWRGaXJzdEZyYW1lID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGF1dG8qIGNvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpKQorICAgICAgICAgICAgbV9n
bG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIEFTU0VSVCh2aXNpdG9yLT5jYWxsZWUoKSk7CisgICAgICAgICAgICAvLyBG
SVhNRTogQ2FsbGVlIGlzIG5vdCBhbiBvYmplY3QgaWYgdGhlIGNhbGxlciBpcyBXZWIgQXNzZW1i
bHkuCisgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gaGVyZS4gV2UgY2FuIHBy
b2JhYmx5IGdldCB0aGUgZ2xvYmFsIG9iamVjdAorICAgICAgICAgICAgLy8gZnJvbSB0aGUgdG9w
LW1vc3QgV2FzbSBJbnN0YW5jZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTcyMQorICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxlZSgpLT5pc09iamVjdCgp
KQorICAgICAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odmlz
aXRvci0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gU3RhY2tWaXNpdG9yOjpEb25lOworICAgIH0KKworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdDsgfQorCitwcml2YXRlOgor
ICAgIG11dGFibGUgYm9vbCBtX2hhc1NraXBwZWRGaXJzdEZyYW1lIHsgZmFsc2UgfTsKKyAgICBt
dXRhYmxlIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdCB7IG51bGxwdHIgfTsKK307CisK
K0RPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBHZXRD
YWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yIGl0ZXI7CisgICAgZXhlYy0+aXRlcmF0ZShpdGVyKTsK
KyAgICByZXR1cm4gaXRlci5nbG9iYWxPYmplY3QoKSA/IGFzSlNET01XaW5kb3coaXRlci5nbG9i
YWxPYmplY3QoKSktPndyYXBwZWQoKSA6IGZpcnN0RE9NV2luZG93KGV4ZWMpOworfQorCitET01X
aW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGFz
SlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOworfQor
CitET01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1
cm4gYXNKU0RPTVdpbmRvdyhleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjYW5BY2Nlc3NEb2N1bWVudChKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIERvY3VtZW50KiB0YXJnZXREb2N1bWVudCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRp
b24gcmVwb3J0aW5nT3B0aW9uKQoreworICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICghdGFyZ2V0RG9j
dW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIERPTVdpbmRvdyYgYWN0aXZlID0g
YWN0aXZlRE9NV2luZG93KHN0YXRlKTsKKworICAgIGlmIChhY3RpdmUuZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS5jYW5BY2Nlc3ModGFyZ2V0RG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHN3aXRjaCAocmVwb3J0aW5nT3B0aW9uKSB7
CisgICAgY2FzZSBUaHJvd1NlY3VyaXR5RXJyb3I6CisgICAgICAgIHRocm93U2VjdXJpdHlFcnJv
cigqc3RhdGUsIHNjb3BlLCB0YXJnZXREb2N1bWVudC0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWlu
QWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExv
Z1NlY3VyaXR5RXJyb3I6CisgICAgICAgIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUodGFyZ2V0
RG9jdW1lbnQtPmZyYW1lKCksIHRhcmdldERvY3VtZW50LT5kb21XaW5kb3coKS0+Y3Jvc3NEb21h
aW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yOgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vz
c1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRE9NV2luZG93JiB0YXJnZXQsIFNl
Y3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKK3sKKyAgICByZXR1cm4gY2Fu
QWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC5kb2N1bWVudCgpLCByZXBvcnRpbmdPcHRpb24p
OworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgRnJhbWUqIHRhcmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRp
b24gcmVwb3J0aW5nT3B0aW9uKQoreworICAgIHJldHVybiB0YXJnZXQgJiYgY2FuQWNjZXNzRG9j
dW1lbnQoc3RhdGUsIHRhcmdldC0+ZG9jdW1lbnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKK30KKwor
Ym9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgTm9kZSogdGFyZ2V0KQoreworICAgIHJldHVybiAhdGFyZ2V0IHx8IGNhbkFj
Y2Vzc0RvY3VtZW50KCZzdGF0ZSwgJnRhcmdldC0+ZG9jdW1lbnQoKSwgTG9nU2VjdXJpdHlFcnJv
cik7Cit9CisgICAgCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdGhyb3dUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
LCBlcnJvck1lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRBcmd1bWVudE11c3RCZShT
dHJpbmdCdWlsZGVyJiBidWlsZGVyLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFy
KiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSkKK3sKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIkFyZ3VtZW50ICIpOwor
ICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGFyZ3VtZW50SW5kZXggKyAxKTsKKyAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoIiAoJyIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGFyZ3VtZW50TmFtZSk7
CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCInKSB0byAiKTsKKyAgICBpZiAoIWZ1bmN0aW9u
TmFtZSkgeworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoInRoZSAiKTsKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiIGNvbnN0cnVjdG9yIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQoaW50ZXJmYWNlTmFtZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKGZ1bmN0aW9uTmFtZSk7CisgICAgfQorICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiIG11c3QgYmUgIik7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgcmVwb3J0RGVw
cmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKK3sKKyAgICBhdXRvJiBjb250
ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBjb250ZXh0LmFkZENvbnNvbGVN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtYWtlU3RyaW5n
KCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICciLCBhdHRyaWJ1dGVOYW1l
LCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VOYW1lLCAiIG9iamVjdC4iKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKyAgICAKK3ZvaWQgcmVwb3J0RGVw
cmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKK3sKKyAgICBhdXRvJiBjb250
ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBjb250ZXh0LmFkZENvbnNvbGVN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtYWtlU3RyaW5n
KCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gc2V0IHByb3BlcnR5ICciLCBhdHRyaWJ1dGVOYW1lLCAi
JyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VOYW1lLCAiIG9iamVjdC4iKSk7Cit9CisKK3ZvaWQgdGhy
b3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NV
UFBPUlRFRF9FUlIpKTsKK30KKwordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVzc2Fn
ZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBTdHJpbmcgbWVzc2Fn
ZVN0cmluZyhtZXNzYWdlKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVh
dGVET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUiwgJm1lc3NhZ2VTdHJpbmcp
KTsKK30KKwordm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBB
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNz
YWdlKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRp
b24oJnN0YXRlLCBJTlZBTElEX1NUQVRFX0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsKK30KKwordm9p
ZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9N
RXhjZXB0aW9uKCZzdGF0ZSwgU0VDVVJJVFlfRVJSLCBtZXNzYWdlKSk7Cit9CisKK0pTQzo6RW5j
b2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNv
bnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1l
LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVzKQor
eworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBhcHBlbmRBcmd1bWVudE11c3RCZShi
dWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFt
ZSwgZnVuY3Rpb25OYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIm9uZSBvZjogIik7
CisgICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRWYWx1ZXMpOworICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Cit9CisKK0pTQzo6
RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudElu
ZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
CisgICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1l
bnROYW1lLCBpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiYSBmdW5jdGlvbiIpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
dGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50
TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVy
IGJ1aWxkZXI7CisgICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRl
eCwgYXJndW1lbnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7Cisg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJhbiBpbnN0YW5jZSBvZiAiKTsKKyAgICBidWlsZGVy
LmFwcGVuZChleHBlY3RlZFR5cGUpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Cit9CisKK3ZvaWQgdGhyb3dBcnJheUVsZW1l
bnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KQoreworICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJJbnZh
bGlkIEFycmF5IGVsZW1lbnQgdHlwZSIpKTsKK30KKwordm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IGNo
YXIqIGV4cGVjdGVkVHlwZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1h
a2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgYXR0
cmlidXRlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIiwgZXhwZWN0ZWRUeXBlKSk7Cit9CisKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lbWJlck5h
bWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUp
Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiTWVtYmVyICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGRpY3Rpb25hcnlOYW1lKTsKKyAgICBi
dWlsZGVyLmFwcGVuZCgnLicpOworICAgIGJ1aWxkZXIuYXBwZW5kKG1lbWJlck5hbWUpOworICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGFuIGluc3Rh
bmNlIG9mICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVHlwZSk7CisgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKK30K
KworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKQoreworICAgIHJldHVybiB0aHJv
d1ZNRXJyb3IoJnN0YXRlLCBzY29wZSwgY3JlYXRlUmVmZXJlbmNlRXJyb3IoJnN0YXRlLCBtYWtl
U3RyaW5nKGludGVyZmFjZU5hbWUsICIgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBleGVjdXRpb24g
Y29udGV4dCBpcyB1bmF2YWlsYWJsZSIpKSk7Cit9CisKK3ZvaWQgdGhyb3dTZXF1ZW5jZVR5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7Cisg
ICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlZhbHVlIGlzIG5v
dCBhIHNlcXVlbmNlIikpOworfQorCit2b2lkIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgdGhyb3dUeXBlRXJy
b3IoJnN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJUaGUgcHJvdmlkZWQgdmFsdWUgaXMgbm9u
LWZpbml0ZSIpKTsKK30KKworU3RyaW5nIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAg
cmV0dXJuIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5h
bWUsICIgZ2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFj
ZU5hbWUpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93R2V0dGVyVHlwZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKK3sKKyAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2Fn
ZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFs
dWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQor
eworICAgIHJldHVybiBjcmVhdGVSZWplY3RlZFByb21pc2VXaXRoVHlwZUVycm9yKHN0YXRlLCBt
YWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7
Cit9CisKK2Jvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBhdHRyaWJ1dGVOYW1lKQoreworICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwg
bWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcuJywgYXR0cmlidXRlTmFtZSwgIiBz
ZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBpbnN0YW5jZXMgb2YgIiwgaW50ZXJmYWNlTmFtZSkp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIG1ha2VUaGlzVHlwZUVycm9yTWVzc2Fn
ZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7
CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNhbiBvbmx5IGNhbGwgIiwgaW50ZXJmYWNlTmFtZSwg
Jy4nLCBmdW5jdGlvbk5hbWUsICIgb24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7CisgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKHN0
YXRlLCBzY29wZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGZ1bmN0
aW9uTmFtZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhp
c1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmIHByb21pc2UsIGNvbnN0IGNoYXIqIGludGVyZmFj
ZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCit7CisgICAgcHJvbWlzZS5yZWplY3QoVHlw
ZUVycm9yLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgbWV0aG9kTmFt
ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0
aG9kTmFtZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJv
cihzdGF0ZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIG1ldGhvZE5h
bWUpKTsKK30KKwordm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlv
biYgZnVuY3Rpb24pCit7CisgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICBKU0M6OkNh
bGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YSgmZnVuY3Rpb24sIGNhbGxEYXRhKTsK
KyAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOworCisgICAgSlNDOjpNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHN0
YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICBKU0M6OmNhbGwoJnN0YXRlLCAmZnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJnRoaXNPYmplY3QsIGFyZ3VtZW50cyk7Cit9CisKK3Zv
aWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDOjpKU0Nl
bGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCo+KGNlbGwpOworICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNl
Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5k
KHRoaXNPYmplY3QtPm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsKK30KKworc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRl
cmFsKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyBvcGVyYXRvciIpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKK30KKworQ2FsbFR5cGUgRE9NQ29uc3RydWN0b3JP
YmplY3Q6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sKKyAgICBj
YWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsVGhyb3dUeXBlRXJyb3I7CisgICAgcmV0dXJu
IENhbGxUeXBlOjpIb3N0OworfQorCit2b2lkIHRocm93RE9NU3ludGF4RXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0
ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNZTlRBWF9FUlIpKTsKK30KKwordm9pZCB0aHJvd0RhdGFD
bG9uZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkK
K3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigm
c3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBEQVRBX0NMT05FX0VSUikp
OworfQorCit2b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigm
c3RhdGUsIElOREVYX1NJWkVfRVJSKSk7Cit9CisKK3ZvaWQgdGhyb3dUeXBlTWlzbWF0Y2hFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAg
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBz
Y29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgVFlQRV9NSVNNQVRDSF9FUlIpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHBy
b3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1
cml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nU2VjdXJpdHkuY3BwCShyZXZpc2lvbiAyMTEzNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
LDM2NyArMjAsMjAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIKIAotI2luY2x1
ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUgIkNvbW1vblZNLmgiCi0jaW5jbHVkZSAiRE9N
Q29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9u
SGVhZGVycy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJE
T01XaW5kb3cuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0j
aW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0
aW9uLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCi0jaW5jbHVkZSAiSlNET01Qcm9taXNl
LmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKLSNpbmNsdWRlICJKU0V4Y2VwdGlv
bkJhc2UuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAi
SlNET01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRl
IDxieXRlY29kZS9Db2RlQmxvY2suaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0
YWNrLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4KLSNp
bmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3Iu
aD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9ySGFuZGxpbmdTY29wZS5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvRXJyb3JJbnN0YW5jZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9K
U0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJV
Q1RJQkxFKERPTUNvbnN0cnVjdG9yT2JqZWN0KTsKLVNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZ
X0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCk7Ci0KLXZvaWQgYWRkSW1w
dXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgY29t
bW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwotfQotCi1KU1ZhbHVlIGpz
T3duZWRTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCi17Ci0g
ICAgaWYgKHMuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICByZXR1cm4g
anNPd25lZFN0cmluZyhleGVjLCBzKTsKLX0KLQotSlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVk
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQotewotICAgIGlmIChzLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRo
Q2FjaGUoZXhlYywgcyk7Ci19Ci0KLUpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBVUkwmIHVybCkKLXsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdXJs
LnN0cmluZygpKTsKLX0KLQotSlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgaWYgKHVybC5pc051bGwoKSkKLSAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMs
IHVybC5zdHJpbmcoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvQnl0ZVN0
cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBTdHJpbmcmJiBz
dHJpbmcpCi17Ci0gICAgaWYgKCFzdHJpbmcuY29udGFpbnNPbmx5TGF0aW4xKCkpIHsKLSAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHN0cmluZzsKLX0KLQotU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVT
dHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKLXsK
LSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgIFN0cmluZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOwot
ICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3RhdGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmlu
ZykpOwotfQotCi1TdHJpbmcgdmFsdWVUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50
b1dURlN0cmluZygmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
Ci0KLSAgICByZXR1cm4gc3RyaW5nVG9CeXRlU3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShz
dHJpbmcpKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGhhc1VucGFpcmVkU3Vycm9nYXRlKFN0
cmluZ1ZpZXcgc3RyaW5nKQotewotICAgIC8vIEZhc3QgcGF0aCBmb3IgOC1iaXQgc3RyaW5nczsg
dGhleSBjYW4ndCBoYXZlIGFueSBzdXJyb2dhdGVzLgotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogc3RyaW5n
LmNvZGVQb2ludHMoKSkgewotICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvVVNWU3RyaW5nKFN0cmluZyYmIHN0cmluZykK
LXsKLSAgICAvLyBGYXN0IHBhdGggZm9yIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBubyB1bnBh
aXJlZCBzdXJyb2dhdGVzLgotICAgIGlmICghaGFzVW5wYWlyZWRTdXJyb2dhdGUoc3RyaW5nKSkK
LSAgICAgICAgcmV0dXJuIHN0cmluZzsKLQotICAgIC8vIFNsb3cgcGF0aDogaHR0cDovL2hleWNh
bS5naXRodWIuaW8vd2ViaWRsLyNkZm4tb2J0YWluLXVuaWNvZGUKLSAgICAvLyBSZXBsYWNlcyB1
bnBhaXJlZCBzdXJyb2dhdGVzIHdpdGggdGhlIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4KLSAgICBT
dHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KHN0cmluZy5s
ZW5ndGgoKSk7Ci0gICAgU3RyaW5nVmlldyB2aWV3IHsgc3RyaW5nIH07Ci0gICAgZm9yIChhdXRv
IGNvZGVQb2ludCA6IHZpZXcuY29kZVBvaW50cygpKSB7Ci0gICAgICAgIGlmIChVX0lTX1NVUlJP
R0FURShjb2RlUG9pbnQpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVudENo
YXJhY3Rlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29kZVBv
aW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotfQotCi1TdHJpbmcg
aWRlbnRpZmllclRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
aWZpZXIpCi17Ci0gICAgU3RyaW5nIHN0cmluZyA9IGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAg
cmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7Ci19Ci0KLVN0cmluZyB2
YWx1ZVRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgcmV0dXJuIHN0cmlu
Z1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7Ci19Ci0KLUpTVmFsdWUganNEYXRlKEV4ZWNT
dGF0ZSogZXhlYywgZG91YmxlIHZhbHVlKQotewotICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNy
ZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1
cmUoKSwgdmFsdWUpOwotfQotCi1kb3VibGUgdmFsdWVUb0RhdGUoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICByZXR1
cm4gdmFsdWUuYXNOdW1iZXIoKTsKLSAgICBpZiAoIXZhbHVlLmluaGVyaXRzKGV4ZWMtPnZtKCks
IERhdGVJbnN0YW5jZTo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGVJbnN0
YW5jZSo+KHZhbHVlLnRvT2JqZWN0KGV4ZWMpKS0+aW50ZXJuYWxOdW1iZXIoKTsKLX0KLQotdm9p
ZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
LCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkp
OwotICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpzRHluYW1pY0Rvd25jYXN0PEpTQzo6RXhjZXB0aW9u
Kj4odm0sIGV4Y2VwdGlvblZhbHVlKTsKLSAgICBpZiAoIWV4Y2VwdGlvbikgewotICAgICAgICBl
eGNlcHRpb24gPSB2bS5sYXN0RXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmICghZXhjZXB0aW9uKQot
ICAgICAgICAgICAgZXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246OmNyZWF0ZShleGVjLT52bSgp
LCBleGNlcHRpb25WYWx1ZSwgSlNDOjpFeGNlcHRpb246OkRvTm90Q2FwdHVyZVN0YWNrKTsKLSAg
ICB9Ci0KLSAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBjYWNoZWRTY3JpcHQp
OwotfQotCi1TdHJpbmcgcmV0cmlldmVFcnJvck1lc3NhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgVk0m
IHZtLCBKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2F0Y2hTY29wZSYgY2F0Y2hTY29wZSkKLXsKLSAgICBp
ZiAoYXV0byogZXhjZXB0aW9uQmFzZSA9IHRvRXhjZXB0aW9uQmFzZSh2bSwgZXhjZXB0aW9uKSkK
LSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkJhc2UtPnRvU3RyaW5nKCk7Ci0KLSAgICAvLyBGSVhN
RTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE1MDg3PiBXZWIgSW5zcGVjdG9yOiBXZWJDb3JlOjpy
ZXBvcnRFeGNlcHRpb24gc2hvdWxkIG5vdCBldmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4
Y2VwdGlvbnMKLSAgICAvLyBJZiB0aGlzIGlzIGEgY3VzdG9tIGV4Y2VwdGlvbiBvYmplY3QsIGNh
bGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5IGFuZCBnZXQgYSBuaWNlIHN0cmluZyByZXByZXNlbnRh
dGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4KLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlm
IChhdXRvKiBlcnJvciA9IGpzRHluYW1pY0Rvd25jYXN0PEVycm9ySW5zdGFuY2UqPih2bSwgZXhj
ZXB0aW9uKSkKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3ItPnNhbml0aXplZFRvU3RyaW5n
KCZzdGF0ZSk7Ci0gICAgZWxzZQotICAgICAgICBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb24udG9X
VEZTdHJpbmcoJnN0YXRlKTsKLQotICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgYW55IG5ldyBleGNl
cHRpb24gdGhhdCBtYXkgYmUgdGhyb3duIGluIHRoZSB0b1N0cmluZygpIGNhbGwgYWJvdmUuCi0g
ICAgLy8gcmVwb3J0RXhjZXB0aW9uKCkgaXMgbm90IHN1cHBvc2VkIHRvIGJlIG1ha2luZyBuZXcg
ZXhjZXB0aW9ucy4KLSAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgdm0uY2xl
YXJMYXN0RXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGVycm9yTWVzc2FnZTsKLX0KLQotdm9pZCBy
ZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9u
LCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCwgRXhjZXB0aW9uRGV0YWlscyogZXhjZXB0aW9u
RGV0YWlscykKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25F
eGNlcHRpb24odm0sIGV4Y2VwdGlvbikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEVycm9ySGFu
ZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkpOwotCi0gICAgUmVmUHRyPFNjcmlwdENh
bGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oZXhl
YywgZXhjZXB0aW9uLCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUp
KTsKLSAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlv
bigpOwotCi0gICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Ci0gICAgaWYgKEpT
RE9NV2luZG93KiB3aW5kb3cgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0RPTVdpbmRvdyo+KHZtLCBn
bG9iYWxPYmplY3QpKSB7Ci0gICAgICAgIGlmICghd2luZG93LT53cmFwcGVkKCkuaXNDdXJyZW50
bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aW50IGxpbmVOdW1iZXIgPSAwOwotICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOwotICAgIFN0cmlu
ZyBleGNlcHRpb25Tb3VyY2VVUkw7Ci0gICAgaWYgKGNvbnN0IFNjcmlwdENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gY2FsbFN0YWNrLT5maXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAg
IGxpbmVOdW1iZXIgPSBjYWxsRnJhbWUtPmxpbmVOdW1iZXIoKTsKLSAgICAgICAgY29sdW1uTnVt
YmVyID0gY2FsbEZyYW1lLT5jb2x1bW5OdW1iZXIoKTsKLSAgICAgICAgZXhjZXB0aW9uU291cmNl
VVJMID0gY2FsbEZyYW1lLT5zb3VyY2VVUkwoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlID0gcmV0cmlldmVFcnJvck1lc3NhZ2UoKmV4ZWMsIHZtLCBleGNlcHRpb24tPnZhbHVl
KCksIHNjb3BlKTsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKGVycm9yTWVzc2FnZSwgbGluZU51
bWJlciwgY29sdW1uTnVtYmVyLCBleGNlcHRpb25Tb3VyY2VVUkwsIGV4Y2VwdGlvbiwgY2FsbFN0
YWNrLT5zaXplKCkgPyBjYWxsU3RhY2sgOiBudWxscHRyLCBjYWNoZWRTY3JpcHQpOwotCi0gICAg
aWYgKGV4Y2VwdGlvbkRldGFpbHMpIHsKLSAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+bWVzc2Fn
ZSA9IGVycm9yTWVzc2FnZTsKLSAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+bGluZU51bWJlciA9
IGxpbmVOdW1iZXI7Ci0gICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPmNvbHVtbk51bWJlciA9IGNv
bHVtbk51bWJlcjsKLSAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+c291cmNlVVJMID0gZXhjZXB0
aW9uU291cmNlVVJMOwotICAgIH0KLX0KLQotdm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBleGNlcHRpb24gPSBzY29w
ZS5leGNlcHRpb24oKTsKLSAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIHJlcG9ydEV4
Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwotfQotCi1zdGF0aWMgSlNWYWx1ZSBjcmVhdGVET01F
eGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVjLCBjb25zdCBTdHJpbmcq
IG1lc3NhZ2UgPSBudWxscHRyKQotewotICAgIGlmICghZWMgfHwgZWMgPT0gRXhpc3RpbmdFeGNl
cHRpb25FcnJvcikKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBGSVhN
RTogSGFuZGxlIG90aGVyIFdlYklETCBleGNlcHRpb24gdHlwZXMuCi0gICAgaWYgKGVjID09IFR5
cGVFcnJvcikgewotICAgICAgICBpZiAoIW1lc3NhZ2UgfHwgbWVzc2FnZS0+aXNFbXB0eSgpKQot
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZVR5cGVFcnJvcihleGVjLCAqbWVzc2FnZSk7Ci0gICAgfQotCi0gICAgaWYgKGVjID09
IFJhbmdlRXJyb3IpIHsKLSAgICAgICAgaWYgKCFtZXNzYWdlIHx8IG1lc3NhZ2UtPmlzRW1wdHko
KSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJh
bCgiQmFkIHZhbHVlIikpOwotICAgICAgICByZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAq
bWVzc2FnZSk7Ci0gICAgfQotCi0gICAgaWYgKGVjID09IFN0YWNrT3ZlcmZsb3dFcnJvcikKLSAg
ICAgICAgcmV0dXJuIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKLQotICAgIC8vIEZJ
WE1FOiBBbGwgY2FsbGVycyB0byBjcmVhdGVET01FeGNlcHRpb24gbmVlZCB0byBwYXNzIGluIHRo
ZSBjb3JyZWN0IGdsb2JhbCBvYmplY3QuCi0gICAgLy8gRm9yIG5vdywgd2UncmUgZ29pbmcgdG8g
YXNzdW1lIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LiBXaGljaCBpcyB3cm9uZyBpbiBjYXNlcyBs
aWtlIHRoaXM6Ci0gICAgLy8gZnJhbWVzWzBdLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobnVsbCwg
bnVsbCk7IC8vIHRocm93cyBhbiBleGNlcHRpb24gd2hpY2ggc2hvdWxkIGhhdmUgdGhlIHN1YmZy
YW1lJ3MgcHJvdG90eXBlcy4KLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
ZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKTsKLQotICAgIEV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7Ci0KLSAgICBDU3RyaW5nIG1lc3NhZ2VD
U3RyaW5nOwotICAgIGlmIChtZXNzYWdlKQotICAgICAgICBtZXNzYWdlQ1N0cmluZyA9IG1lc3Nh
Z2UtPnV0ZjgoKTsKLSAgICBpZiAobWVzc2FnZSAmJiAhbWVzc2FnZS0+aXNFbXB0eSgpKSB7Ci0g
ICAgICAgIC8vIEl0IGlzIHNhZmUgdG8gZG8gdGhpcyBiZWNhdXNlIHRoZSBjaGFyKiBjb250ZW50
cyBvZiB0aGUgQ1N0cmluZyBhcmUgY29waWVkIGludG8gYSBuZXcgV1RGOjpTdHJpbmcgYmVmb3Jl
IHRoZSBDU3RyaW5nIGlzIGRlc3Ryb3llZC4KLSAgICAgICAgZGVzY3JpcHRpb24uZGVzY3JpcHRp
b24gPSBtZXNzYWdlQ1N0cmluZy5kYXRhKCk7Ci0gICAgfQotCi0gICAgSlNWYWx1ZSBlcnJvck9i
amVjdDsKLSAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLnR5cGUpIHsKLSAgICBjYXNlIERPTUNvcmVF
eGNlcHRpb25UeXBlOgotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIGNhc2UgSURC
RGF0YWJhc2VFeGNlcHRpb25UeXBlOgotI2VuZGlmCi0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIERPTUNvcmVFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlv
bikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbGVFeGNlcHRpb25UeXBlOgotICAgICAg
ICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBGaWxlRXhjZXB0aW9uOjpj
cmVhdGUoZGVzY3JpcHRpb24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTUUxFeGNlcHRp
b25UeXBlOgotICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBT
UUxFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFNWR0V4Y2VwdGlvblR5cGU6Ci0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIFNWR0V4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgWFBhdGhFeGNlcHRpb25UeXBlOgotICAgICAgICBlcnJvck9iamVj
dCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBYUGF0aEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2Ny
aXB0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoZXJyb3JP
YmplY3QpOwotICAgIGFkZEVycm9ySW5mbyhleGVjLCBhc09iamVjdChlcnJvck9iamVjdCksIHRy
dWUpOwotICAgIHJldHVybiBlcnJvck9iamVjdDsKLX0KLQotSlNWYWx1ZSBjcmVhdGVET01FeGNl
cHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVjLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZURPTUV4Y2VwdGlvbihleGVjLCBlYywgJm1lc3Nh
Z2UpOwotfQotCi1KU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBF
eGNlcHRpb24mJiBleGNlcHRpb24pCi17Ci0gICAgcmV0dXJuIGNyZWF0ZURPTUV4Y2VwdGlvbigm
c3RhdGUsIGV4Y2VwdGlvbi5jb2RlKCksIGV4Y2VwdGlvbi5yZWxlYXNlTWVzc2FnZSgpKTsKLX0K
LQotdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQotewot
ICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24o
JnN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVET01FeGNlcHRpb24oc3RhdGUsIFdURk1vdmUoZXhj
ZXB0aW9uKSkpOwotfQotCi1ib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoIXZh
bHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTT2JqZWN0KiBv
YmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAg
ICBDYWxsVHlwZSBjYWxsVHlwZTsKLSAgICBKU1ZhbHVlIGFwcGx5TWV0aG9kID0gb2JqZWN0LT5n
ZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMtPml0
ZXJhdG9yU3ltYm9sLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC5pdGVyYXRvciBwcm9wZXJ0eSBzaG91
bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2Up
OwotCi0gICAgcmV0dXJuICFhcHBseU1ldGhvZC5pc1VuZGVmaW5lZCgpOwotfQotCi1ib29sIEJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEV4ZWNTdGF0ZSYgc3RhdGUs
IEZyYW1lJiBmcmFtZSwgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChCaW5kaW5nU2VjdXJp
dHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsICZmcmFtZSwgRG9Ob3RSZXBvcnRT
ZWN1cml0eUVycm9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgbWVzc2FnZSA9IGZyYW1l
LmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShh
Y3RpdmVET01XaW5kb3coJnN0YXRlKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhFeGVjU3RhdGUmIHN0
YXRlLCBET01XaW5kb3cmIGdsb2JhbE9iamVjdCwgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlm
IChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRlLCBn
bG9iYWxPYmplY3QsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIG1lc3NhZ2UgPSBnbG9iYWxPYmplY3QuY3Jvc3NEb21haW5BY2Nlc3NFcnJvck1l
c3NhZ2UoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQog
dm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQogewogICAgIGlmICghZnJhbWUpCkBAIC0zODgsMzgxICs0MSw2IEBAIHZvaWQg
cHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSogZnIKICAgICBmcmFtZS0+ZG9jdW1lbnQo
KS0+ZG9tV2luZG93KCktPnByaW50RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOwogfQogCi1TdHJ1Y3R1
cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKLXsKLSAgICBKU0RPTVN0cnVjdHVyZU1hcCYg
c3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5zdHJ1Y3R1cmVzKE5vTG9ja2luZ05lY2Vzc2FyeSk7
Ci0gICAgcmV0dXJuIHN0cnVjdHVyZXMuZ2V0KGNsYXNzSW5mbykuZ2V0KCk7Ci19Ci0KLVN0cnVj
dHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQotewotICAg
IGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtpbmcoZ2xvYmFsT2JqZWN0LnZtKCkuaGVhcCwg
Z2xvYmFsT2JqZWN0LmdjTG9jaygpKTsKLSAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJl
cyA9IGdsb2JhbE9iamVjdC5zdHJ1Y3R1cmVzKGxvY2tlcik7Ci0gICAgQVNTRVJUKCFzdHJ1Y3R1
cmVzLmNvbnRhaW5zKGNsYXNzSW5mbykpOwotICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChjbGFz
c0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC52bSgpLCAmZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpKS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci19Ci0KLXN0YXRpYyBj
b25zdCBpbnQzMl90IGtNYXhJbnQzMiA9IDB4N2ZmZmZmZmY7Ci1zdGF0aWMgY29uc3QgaW50MzJf
dCBrTWluSW50MzIgPSAta01heEludDMyIC0gMTsKLXN0YXRpYyBjb25zdCB1aW50MzJfdCBrTWF4
VUludDMyID0gMHhmZmZmZmZmZlU7Ci1zdGF0aWMgY29uc3QgaW50NjRfdCBrSlNNYXhJbnRlZ2Vy
ID0gMHgyMDAwMDAwMDAwMDAwMExMIC0gMTsgLy8gMl41MyAtIDEsIGxhcmdlc3QgaW50ZWdlciBl
eGFjdGx5IHJlcHJlc2VudGFibGUgaW4gRUNNQVNjcmlwdC4KLQotc3RhdGljIFN0cmluZyByYW5n
ZUVycm9yU3RyaW5nKGRvdWJsZSB2YWx1ZSwgZG91YmxlIG1pbiwgZG91YmxlIG1heCkKLXsKLSAg
ICByZXR1cm4gbWFrZVN0cmluZygiVmFsdWUgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFT
Y3JpcHQodmFsdWUpLCAiIGlzIG91dHNpZGUgdGhlIHJhbmdlIFsiLCBTdHJpbmc6Om51bWJlclRv
U3RyaW5nRUNNQVNjcmlwdChtaW4pLCAiLCAiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNj
cmlwdChtYXgpLCAiXSIpOwotfQotCi1zdGF0aWMgZG91YmxlIGVuZm9yY2VSYW5nZShFeGVjU3Rh
dGUmIHN0YXRlLCBkb3VibGUgeCwgZG91YmxlIG1pbmltdW0sIGRvdWJsZSBtYXhpbXVtKQotewot
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSkgewot
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5nZUVycm9yU3RyaW5nKHgs
IG1pbmltdW0sIG1heGltdW0pKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHggPSB0
cnVuYyh4KTsKLSAgICBpZiAoeCA8IG1pbmltdW0gfHwgeCA+IG1heGltdW0pIHsKLSAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVt
LCBtYXhpbXVtKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4geDsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0cyB7Ci19OwotCi10
ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8aW50OF90PiB7Ci0gICAgc3RhdGljIGNv
bnN0IGludDhfdCBtaW5WYWx1ZSA9IC0xMjg7Ci0gICAgc3RhdGljIGNvbnN0IGludDhfdCBtYXhW
YWx1ZSA9IDEyNzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAy
NTY7IC8vIDJeOAotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQ4
X3Q+IHsKLSAgICBzdGF0aWMgY29uc3QgdWludDhfdCBtYXhWYWx1ZSA9IDI1NTsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAotfTsKLQotdGVt
cGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzPGludDE2X3Q+IHsKLSAgICBzdGF0aWMgY29u
c3Qgc2hvcnQgbWluVmFsdWUgPSAtMzI3Njg7Ci0gICAgc3RhdGljIGNvbnN0IHNob3J0IG1heFZh
bHVlID0gMzI3Njc7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0g
NjU1MzY7IC8vIDJeMTYKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czx1
aW50MTZfdD4gewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtYXhWYWx1ZSA9IDY1
NTM1OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAv
LyAyXjE2Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgVCB0b1Nt
YWxsZXJJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+
Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIp
OwotCi0gICAgdHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OwotICAgIC8vIEZh
c3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciBp
biB0aGUgcmlnaHQgcmFuZ2UuCi0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkgewotICAgICAgICBp
bnQzMl90IGQgPSB2YWx1ZS5hc0ludDMyKCk7Ci0gICAgICAgIGlmIChkID49IExpbWl0c1RyYWl0
OjptaW5WYWx1ZSAmJiBkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUPihkKTsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiBkIDwgTGltaXRz
VHJhaXQ6Om1pblZhbHVlID8gTGltaXRzVHJhaXQ6Om1pblZhbHVlIDogTGltaXRzVHJhaXQ6Om1h
eFZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIGQgJT0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFs
dWVzOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCA+IExpbWl0c1RyYWl0OjptYXhW
YWx1ZSA/IGQgLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiBkKTsKLSAgICB9Ci0KLSAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgMCk7Ci0KLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgot
ICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBMaW1pdHNUcmFpdDo6bWluVmFs
dWUsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBj
bGFtcFRvPFQ+KHgpOwotICAgIH0KLQotICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNp
bmYoeCkgfHwgIXgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgeCA9IHggPCAwID8gLWZsb29y
KGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7Ci0gICAgeCA9IGZtb2QoeCwgTGltaXRzVHJhaXQ6
Om51bWJlck9mVmFsdWVzKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih4ID4gTGltaXRz
VHJhaXQ6Om1heFZhbHVlID8geCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyA6IHgpOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1
ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHVuc2lnbmVkIGludGVncmFsIHR5cGVzIik7Ci0K
LSAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4gTGltaXRzVHJhaXQ7Ci0gICAgLy8gRmFzdCBw
YXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgaW4g
dGhlIHJpZ2h0IHJhbmdlLgotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKSB7Ci0gICAgICAgIHVp
bnQzMl90IGQgPSB2YWx1ZS5hc1VJbnQzMigpOwotICAgICAgICBpZiAoZCA8PSBMaW1pdHNUcmFp
dDo6bWF4VmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7Ci0gICAg
ICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KGQpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIExpbWl0c1RyYWl0OjptYXhWYWx1
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0
YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLQotICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgewotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWw6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHgsIDAsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/
IDAgOiBjbGFtcFRvPFQ+KHgpOwotICAgIH0KLQotICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0
ZDo6aXNpbmYoeCkgfHwgIXgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgeCA9IHggPCAwID8g
LWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKSk7Ci19Ci0KLWludDhfdCB0
b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQot
ewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotdWludDhfdCB0b1VJ
bnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotaW50OF90IHRvSW50
OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wKTsKLX0KLQotdWludDhfdCB0b1VJbnQ4Q2xhbXAoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50
PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtYnl0ZQotaW50
OF90IHRvSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVy
biB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURM
LyNlcy1vY3RldAotdWludDhfdCB0b1VJbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLWludDE2X3QgdG9J
bnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAg
IHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLXVpbnQxNl90IHRvVUludDE2
RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0
dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi1pbnQxNl90IHRvSW50MTZDbGFt
cChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxs
ZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wKTsKLX0KLQotdWludDE2X3QgdG9VSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90Pihz
dGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQot
Ci0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXNob3J0Ci1pbnQxNl90IHRvSW50
MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFs
bGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVu
c2lnbmVkLXNob3J0Ci11aW50MTZfdCB0b1VJbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nCi1pbnQzMl90IHRvSW50MzJFbmZvcmNl
UmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7
Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgMCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwg
a01pbkludDMyLCBrTWF4SW50MzIpOwotfQotCi1pbnQzMl90IHRvSW50MzJDbGFtcChFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0g
ICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxp
bnQzMl90Pih4KTsKLX0KLQotdWludDMyX3QgdG9VSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPHVpbnQzMl90
Pih4KTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1s
b25nCi11aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0g
ICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50
b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAg
IHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtNYXhVSW50MzIpOwotfQotCi1pbnQ2
NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVybiBlbmZv
cmNlUmFuZ2Uoc3RhdGUsIHgsIC1rSlNNYXhJbnRlZ2VyLCBrSlNNYXhJbnRlZ2VyKTsKLX0KLQot
dWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVy
biBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtKU01heEludGVnZXIpOwotfQotCi1pbnQ2NF90
IHRvSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6Omlz
bmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjpt
YXg8ZG91YmxlPih4LCAta0pTTWF4SW50ZWdlciksIGtKU01heEludGVnZXIpKTsKLX0KLQotdWlu
dDY0X3QgdG9VSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBz
dGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+
KHN0ZDo6bWF4PGRvdWJsZT4oeCwgMCksIGtKU01heEludGVnZXIpKTsKLX0KLQotLy8gaHR0cDov
L3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nLWxvbmcKLWludDY0X3QgdG9JbnQ2NChFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKLQotICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBj
b252ZXJ0IGZpbml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCi0gICAgdW5zaWduZWQgbG9uZyBsb25n
IG47Ci0gICAgZG91YmxlVG9JbnRlZ2VyKHgsIG4pOwotICAgIHJldHVybiBuOwotfQotCi0vLyBo
dHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmctbG9uZwotdWludDY0
X3QgdG9VSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBkb3Vi
bGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0KLSAgICAvLyBNYXAgTmFOcyBhbmQgKy8t
SW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0LgotICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBuOwotICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsKLSAgICByZXR1
cm4gbjsKLX0KLQotY2xhc3MgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvciB7Ci1wdWJsaWM6
Ci0gICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvcigpID0gZGVmYXVsdDsKLQotICAgIFN0
YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dAotICAgIHsKLSAgICAgICAgaWYgKCFtX2hhc1NraXBwZWRGaXJzdEZyYW1lKSB7Ci0gICAgICAg
ICAgICBtX2hhc1NraXBwZWRGaXJzdEZyYW1lID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBT
dGFja1Zpc2l0b3I6OkNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF1dG8qIGNv
ZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpKQotICAgICAgICAgICAgbV9nbG9iYWxPYmpl
Y3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIEFTU0VSVCh2aXNpdG9yLT5jYWxsZWUoKSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQ2Fs
bGVlIGlzIG5vdCBhbiBvYmplY3QgaWYgdGhlIGNhbGxlciBpcyBXZWIgQXNzZW1ibHkuCi0gICAg
ICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gaGVyZS4gV2UgY2FuIHByb2JhYmx5IGdl
dCB0aGUgZ2xvYmFsIG9iamVjdAotICAgICAgICAgICAgLy8gZnJvbSB0aGUgdG9wLW1vc3QgV2Fz
bSBJbnN0YW5jZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcy
MQotICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxlZSgpLT5pc09iamVjdCgpKQotICAgICAg
ICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2Fs
bGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RhY2tW
aXNpdG9yOjpEb25lOwotICAgIH0KLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qo
KSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdDsgfQotCi1wcml2YXRlOgotICAgIG11dGFi
bGUgYm9vbCBtX2hhc1NraXBwZWRGaXJzdEZyYW1lIHsgZmFsc2UgfTsKLSAgICBtdXRhYmxlIEpT
R2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdCB7IG51bGxwdHIgfTsKLX07Ci0KLURPTVdpbmRv
dyYgY2FsbGVyRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBHZXRDYWxsZXJHbG9i
YWxPYmplY3RGdW5jdG9yIGl0ZXI7Ci0gICAgZXhlYy0+aXRlcmF0ZShpdGVyKTsKLSAgICByZXR1
cm4gaXRlci5nbG9iYWxPYmplY3QoKSA/IGFzSlNET01XaW5kb3coaXRlci5nbG9iYWxPYmplY3Qo
KSktPndyYXBwZWQoKSA6IGZpcnN0RE9NV2luZG93KGV4ZWMpOwotfQotCi1ET01XaW5kb3cmIGFj
dGl2ZURPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGFzSlNET01XaW5k
b3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOwotfQotCi1ET01XaW5k
b3cmIGZpcnN0RE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gYXNKU0RP
TVdpbmRvdyhleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCk7Ci19Ci0KIHN0
YXRpYyBpbmxpbmUgYm9vbCBjYW5BY2Nlc3NEb2N1bWVudChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IERvY3VtZW50KiB0YXJnZXREb2N1bWVudCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0
aW5nT3B0aW9uKQogewogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwpAQCAtNzkwLDI0NSArNjgs
MzUgQEAgc3RhdGljIGlubGluZSBib29sIGNhbkFjY2Vzc0RvY3VtZW50KEpTQwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9E
T01XaW5kb3coSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBET01XaW5kb3cmIHRhcmdldCwgU2VjdXJp
dHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQotewotICAgIHJldHVybiBjYW5BY2Nl
c3NEb2N1bWVudChzdGF0ZSwgdGFyZ2V0LmRvY3VtZW50KCksIHJlcG9ydGluZ09wdGlvbik7Ci19
Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBGcmFtZSogdGFyZ2V0LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiBy
ZXBvcnRpbmdPcHRpb24pCi17Ci0gICAgcmV0dXJuIHRhcmdldCAmJiBjYW5BY2Nlc3NEb2N1bWVu
dChzdGF0ZSwgdGFyZ2V0LT5kb2N1bWVudCgpLCByZXBvcnRpbmdPcHRpb24pOwotfQotCi1ib29s
IEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBOb2RlKiB0YXJnZXQpCi17Ci0gICAgcmV0dXJuICF0YXJnZXQgfHwgY2FuQWNjZXNz
RG9jdW1lbnQoJnN0YXRlLCAmdGFyZ2V0LT5kb2N1bWVudCgpLCBMb2dTZWN1cml0eUVycm9yKTsK
LX0KLSAgICAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB0aHJvd1R5cGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlKQotewotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGVy
cm9yTWVzc2FnZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFwcGVuZEFyZ3VtZW50TXVzdEJlKFN0cmlu
Z0J1aWxkZXImIGJ1aWxkZXIsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFy
Z3VtZW50TmFtZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lKQotewotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiQXJndW1lbnQgIik7Ci0gICAg
YnVpbGRlci5hcHBlbmROdW1iZXIoYXJndW1lbnRJbmRleCArIDEpOwotICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiICgnIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoYXJndW1lbnROYW1lKTsKLSAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIicpIHRvICIpOwotICAgIGlmICghZnVuY3Rpb25OYW1l
KSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgidGhlICIpOwotICAgICAgICBidWls
ZGVyLmFwcGVuZChpbnRlcmZhY2VOYW1lKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIgY29uc3RydWN0b3IiKTsKLSAgICB9IGVsc2UgewotICAgICAgICBidWlsZGVyLmFwcGVuZChp
bnRlcmZhY2VOYW1lKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJy4nKTsKLSAgICAgICAgYnVp
bGRlci5hcHBlbmQoZnVuY3Rpb25OYW1lKTsKLSAgICB9Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIgbXVzdCBiZSAiKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSByZXBvcnREZXByZWNh
dGVkR2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZh
Y2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewotICAgIGF1dG8mIGNvbnRleHQg
PSAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgp
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGNvbnRleHQuYWRkQ29uc29sZU1lc3Nh
Z2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIkRl
cHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJyIsIGF0dHJpYnV0ZU5hbWUsICIn
IG9uIGEgbm9uLSIsIGludGVyZmFjZU5hbWUsICIgb2JqZWN0LiIpKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotICAgIAotdm9pZCByZXBvcnREZXByZWNh
dGVkU2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZh
Y2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewotICAgIGF1dG8mIGNvbnRleHQg
PSAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgp
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGNvbnRleHQuYWRkQ29uc29sZU1lc3Nh
Z2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIkRl
cHJlY2F0ZWQgYXR0ZW1wdCB0byBzZXQgcHJvcGVydHkgJyIsIGF0dHJpYnV0ZU5hbWUsICInIG9u
IGEgbm9uLSIsIGludGVyZmFjZU5hbWUsICIgb2JqZWN0LiIpKTsKLX0KLQotdm9pZCB0aHJvd05v
dFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9S
VEVEX0VSUikpOwotfQotCi12b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQot
ewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIFN0cmluZyBtZXNzYWdlU3Ry
aW5nKG1lc3NhZ2UpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURP
TUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSLCAmbWVzc2FnZVN0cmluZykpOwot
fQotCi12b2lkIHRocm93SW52YWxpZFN0YXRlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQotewotICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2Up
OwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigm
c3RhdGUsIElOVkFMSURfU1RBVEVfRVJSLCAmbWVzc2FnZVN0cmluZykpOwotfQotCi12b2lkIHRo
cm93U2VjdXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2Vw
dGlvbigpKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNl
cHRpb24oJnN0YXRlLCBTRUNVUklUWV9FUlIsIG1lc3NhZ2UpKTsKLX0KLQotSlNDOjpFbmNvZGVk
SlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3Qg
Y2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRWYWx1ZXMpCi17Ci0g
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxk
ZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBm
dW5jdGlvbk5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgib25lIG9mOiAiKTsKLSAg
ICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFZhbHVlcyk7Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKLX0KLQotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgs
IGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAg
ICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5h
bWUsIGludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJhIGZ1bmN0aW9uIik7Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJv
d0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1l
LCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKLSAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBh
cmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKLSAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoImFuIGluc3RhbmNlIG9mICIpOwotICAgIGJ1aWxkZXIuYXBw
ZW5kKGV4cGVjdGVkVHlwZSk7Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKLX0KLQotdm9pZCB0aHJvd0FycmF5RWxlbWVudFR5
cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17
Ci0gICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkludmFsaWQg
QXJyYXkgZWxlbWVudCB0eXBlIikpOwotfQotCi12b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSwgY29uc3QgY2hhciog
ZXhwZWN0ZWRUeXBlKQotewotICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVN0
cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcuJywgYXR0cmlidXRlTmFtZSwgIiBhdHRyaWJ1
dGUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiLCBleHBlY3RlZFR5cGUpKTsKLX0KLQotSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVtYmVyTmFtZSwg
Y29uc3QgY2hhciogZGljdGlvbmFyeU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKLXsK
LSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJN
ZW1iZXIgIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoZGljdGlvbmFyeU5hbWUpOwotICAgIGJ1aWxk
ZXIuYXBwZW5kKCcuJyk7Ci0gICAgYnVpbGRlci5hcHBlbmQobWVtYmVyTmFtZSk7Ci0gICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYW4gaW5zdGFuY2Ug
b2YgIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRUeXBlKTsKLSAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOwotfQotCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0
VW5hdmFpbGFibGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUpCi17Ci0gICAgcmV0dXJuIHRocm93Vk1F
cnJvcigmc3RhdGUsIHNjb3BlLCBjcmVhdGVSZWZlcmVuY2VFcnJvcigmc3RhdGUsIG1ha2VTdHJp
bmcoaW50ZXJmYWNlTmFtZSwgIiBjb25zdHJ1Y3RvciBhc3NvY2lhdGVkIGV4ZWN1dGlvbiBjb250
ZXh0IGlzIHVuYXZhaWxhYmxlIikpKTsKLX0KLQotdm9pZCB0aHJvd1NlcXVlbmNlVHlwZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICB0
aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVmFsdWUgaXMgbm90IGEg
c2VxdWVuY2UiKSk7Ci19Ci0KLXZvaWQgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3IoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICB0aHJvd1R5cGVFcnJvcigm
c3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlRoZSBwcm92aWRlZCB2YWx1ZSBpcyBub24tZmlu
aXRlIikpOwotfQotCi1TdHJpbmcgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICByZXR1
cm4gbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcuJywgYXR0cmlidXRlTmFtZSwg
IiBnZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBpbnN0YW5jZXMgb2YgIiwgaW50ZXJmYWNlTmFt
ZSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewotICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGlu
dGVyZmFjZU5hbWUsIGF0dHJpYnV0ZU5hbWUpKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSBy
ZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0g
ICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VH
ZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGF0dHJpYnV0ZU5hbWUpKTsKLX0K
LQotYm9vbCB0aHJvd1NldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NU
b0ZyYW1lKEV4ZWNTdGF0ZSYgc3RhdGUsIEZyYW1lJiBmcmFtZSwgU3RyaW5nJiBtZXNzYWdlKQog
ewotICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhlICIsIGlu
dGVyZmFjZU5hbWUsICcuJywgYXR0cmlidXRlTmFtZSwgIiBzZXR0ZXIgY2FuIG9ubHkgYmUgdXNl
ZCBvbiBpbnN0YW5jZXMgb2YgIiwgaW50ZXJmYWNlTmFtZSkpOworICAgIGlmIChCaW5kaW5nU2Vj
dXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsICZmcmFtZSwgRG9Ob3RSZXBv
cnRTZWN1cml0eUVycm9yKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgbWVzc2FnZSA9IGZy
YW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2Fn
ZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1TdHJp
bmcgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiQ2FuIG9u
bHkgY2FsbCAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGZ1bmN0aW9uTmFtZSwgIiBvbiBpbnN0YW5j
ZXMgb2YgIiwgaW50ZXJmYWNlTmFtZSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5
cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsKLSAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlVGhpc1R5cGVFcnJvck1l
c3NhZ2UoaW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpT
VmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKERlZmVycmVkUHJvbWlzZSYgcHJv
bWlzZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkK
LXsKLSAgICBwcm9taXNlLnJlamVjdChUeXBlRXJyb3IsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2Fn
ZShpbnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNl
V2l0aFRoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lKQotewotICAgIHJldHVybiBjcmVhdGVS
ZWplY3RlZFByb21pc2VXaXRoVHlwZUVycm9yKHN0YXRlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3Nh
Z2UoaW50ZXJmYWNlTmFtZSwgbWV0aG9kTmFtZSkpOwotfQotCi12b2lkIGNhbGxGdW5jdGlvbldp
dGhDdXJyZW50QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCYg
dGhpc09iamVjdCwgSlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAgICBKU0M6OkNhbGxE
YXRhIGNhbGxEYXRhOwotICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENhbGxE
YXRhKCZmdW5jdGlvbiwgY2FsbERhdGEpOwotICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlw
ZTo6Tm9uZSk7Ci0KLSAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuYXJndW1lbnRDb3VudCgpOyArK2kpCi0g
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOwotICAg
IEpTQzo6Y2FsbCgmc3RhdGUsICZmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmdGhpc09i
amVjdCwgYXJndW1lbnRzKTsKLX0KLQotdm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVj
dDo6dmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlz
aXRvcikKLXsKLSAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PERPTUNvbnN0cnVjdG9ySlNC
dWlsdGluT2JqZWN0Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7Ci0gICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVuY3Rp
b24pOwotfQotCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsVGhyb3dU
eXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcn
IG9wZXJhdG9yIikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwotfQot
Ci1DYWxsVHlwZSBET01Db25zdHJ1Y3Rvck9iamVjdDo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2Fs
bERhdGEmIGNhbGxEYXRhKQotewotICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxU
aHJvd1R5cGVFcnJvcjsKLSAgICByZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7Ci19Ci0KLXZvaWQgdGhy
b3dET01TeW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRv
dyhFeGVjU3RhdGUmIHN0YXRlLCBET01XaW5kb3cmIGdsb2JhbE9iamVjdCwgU3RyaW5nJiBtZXNz
YWdlKQogewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0
aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNZTlRBWF9FUlIp
KTsKKyAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93
KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBtZXNzYWdlID0gZ2xvYmFsT2JqZWN0LmNyb3NzRG9tYWluQWNj
ZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpKTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxs
b3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERPTVdpbmRvdyYgdGFy
Z2V0LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCiB7Ci0gICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgREFUQV9DTE9ORV9FUlIpKTsKKyAgICByZXR1
cm4gY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC5kb2N1bWVudCgpLCByZXBvcnRpbmdP
cHRpb24pOwogfQogCi12b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQorYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3Vs
ZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEZyYW1lKiB0YXJnZXQs
IFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKIHsKLSAgICBBU1NFUlQo
IXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBj
cmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTkRFWF9TSVpFX0VSUikpOworICAgIHJldHVybiB0
YXJnZXQgJiYgY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC0+ZG9jdW1lbnQoKSwgcmVw
b3J0aW5nT3B0aW9uKTsKIH0KIAotdm9pZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK2Jvb2wgQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIE5vZGUq
IHRhcmdldCkKIHsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4
Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBUWVBFX01J
U01BVENIX0VSUikpOworICAgIHJldHVybiAhdGFyZ2V0IHx8IGNhbkFjY2Vzc0RvY3VtZW50KCZz
dGF0ZSwgJnRhcmdldC0+ZG9jdW1lbnQoKSwgTG9nU2VjdXJpdHlFcnJvcik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
QmluZGluZ1NlY3VyaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nU2VjdXJpdHkuaAkocmV2aXNpb24gMjExMzUzKQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoyMTEzNTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODI1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBv
cnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDYsIDIwMDgt
MjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICogIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTIgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDEzIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRPTVdy
YXBwZXJXb3JsZC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJFeGNl
cHRpb25Pci5oIgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNE
T01XcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNEeW5hbWljRG93bmNhc3QuaCIKKyNpbmNsdWRlICJT
Y3JpcHRXcmFwcGFibGUuaCIKKyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGVJbmxpbmVzLmgiCisj
aW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCisjaW5jbHVkZSA8Y3N0ZGRl
Zj4KKyNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9TbG90Vmlz
aXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KKyNpbmNsdWRlIDxoZWFwL1dl
YWtJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0l0ZXJhdG9y
T3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgorI2luY2x1ZGUgPHJ1
bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGlu
ZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ2VsbElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0pTT2JqZWN0SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CisjaW5jbHVkZSA8cnVudGltZS9PYmplY3RD
b25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5
cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGltZS9Xcml0ZUJhcnJpZXIuaD4KKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKy8vIEZJWE1FOiBXZSBj
b3VsZCBtYWtlIHRoaXMgZmlsZSBhIGxvdCBlYXNpZXIgdG8gcmVhZCBieSBwdXR0aW5nIGFsbCBm
dW5jdGlvbiBkZWNsYXJhdGlvbnMgYXQgdGhlIHRvcCwKKy8vIGFuZCBmdW5jdGlvbiBkZWZpbml0
aW9ucyBiZWxvdywgZXZlbiBmb3IgdGVtcGxhdGUgYW5kIGlubGluZSBmdW5jdGlvbnMuCisKK25h
bWVzcGFjZSBKU0MgeworY2xhc3MgSlNGdW5jdGlvbjsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDYWNoZWRTY3JpcHQ7CitjbGFzcyBEZWZlcnJlZFByb21pc2U7CitjbGFzcyBE
T01XaW5kb3c7CitjbGFzcyBGcmFtZTsKK2NsYXNzIFVSTDsKK2NsYXNzIE5vZGU7CisKK3N0cnVj
dCBFeGNlcHRpb25EZXRhaWxzIHsKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICBpbnQgbGluZU51
bWJlciB7IDAgfTsKKyAgICBpbnQgY29sdW1uTnVtYmVyIHsgMCB9OworICAgIFN0cmluZyBzb3Vy
Y2VVUkw7Cit9OworCisvLyBCYXNlIGNsYXNzIGZvciBhbGwgY29uc3RydWN0b3Igb2JqZWN0cyBp
biB0aGUgSlNDIGJpbmRpbmdzLgorY2xhc3MgRE9NQ29uc3RydWN0b3JPYmplY3QgOiBwdWJsaWMg
SlNET01PYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNET01PYmplY3QgQmFzZTsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVG
bGFncyB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpJbXBsZW1lbnRzRGVmYXVs
dEhhc0luc3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGE7CisgICAgc3Rh
dGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYsIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworCitwcm90ZWN0ZWQ6CisgICAgRE9NQ29uc3RydWN0
b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOworCisgICAgc3Rh
dGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpD
YWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBKU0M6OkNhbGxEYXRhJik7Cit9OworCitjbGFz
cyBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9i
amVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwor
Citwcm90ZWN0ZWQ6CisgICAgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QoSlNDOjpTdHJ1
Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisKKyAgICBKU0M6OkpTRnVuY3Rp
b24qIGluaXRpYWxpemVGdW5jdGlvbigpOworICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9u
KEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKKworcHJpdmF0ZToKKyAgICBKU0M6OldyaXRl
QmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6ZUZ1bmN0aW9uOworfTsKKworRE9N
V2luZG93JiBjYWxsZXJET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKK0RPTVdpbmRvdyYgYWN0
aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CitET01XaW5kb3cmIGZpcnN0RE9NV2luZG93
KEpTQzo6RXhlY1N0YXRlKik7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUg
cmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworCit2b2lk
IHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
JiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSwg
Y29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wgdGhyb3dTZXR0
ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFy
KiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKKwordm9pZCB0aHJv
d0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYp
Owordm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJik7Cit2b2lkIHRocm93RE9NU3ludGF4RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmKTsgLy8gTm90IHRoZSBzYW1lIGFzIGEgSmF2YVNjcmlwdCBzeW50YXggZXJyb3Iu
Cit2b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmKTsKK3ZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworV0VCQ09SRV9FWFBPUlQgdm9pZCB0
aHJvd05vbkZpbml0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYp
Owordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJik7Cit2b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKK3ZvaWQgdGhyb3dTZWN1cml0
eUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd1R5cGVNaXNtYXRjaEVy
cm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7CisKK1dFQkNPUkVfRVhQT1JU
IEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0
IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVzKTsKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25z
dCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpT
VmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwg
Y29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0
aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK0pTQzo6RW5jb2RlZEpTVmFs
dWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNl
TmFtZSk7CisKK1N0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBp
bnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKK1N0cmluZyBtYWtlVGhp
c1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSk7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25z
dCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKK1dFQkNP
UkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dUaGlzVHlwZUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lKTsKKworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNW
YWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworV0VC
Q09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBl
RXJyb3IoRGVmZXJyZWRQcm9taXNlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogb3BlcmF0aW9uTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVl
IHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpOworCitXRUJDT1JF
X0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFs
T2JqZWN0JiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6U3Ry
dWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6U3RydWN0
dXJlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBl
ckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3RydWN0dXJlKEpTQzo6Vk0mLCBKU0RPTUds
b2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cnVj
dHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSopOwordGVtcGxh
dGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTT2JqZWN0KiBnZXRET01Qcm90b3R5cGUo
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKwordm9pZCBjYWxsRnVuY3Rpb25XaXRo
Q3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTQzo6SlNGdW5jdGlvbiYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0M6
OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNG
dW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYpOworCitKU0M6
OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJy
YXlCdWZmZXIqKTsKK3ZvaWQqIHdyYXBwZXJLZXkoSlNDOjpBcnJheUJ1ZmZlciopOworCitKU0RP
TU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKik7
CitKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBT
Y3JpcHRXcmFwcGFibGUqKTsKK0pTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVkV3Jh
cHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKik7CisKK2Jvb2wgc2V0SW5s
aW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqLCBK
U0M6OldlYWtIYW5kbGVPd25lciopOworYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdy
YXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9NT2JqZWN0KiB3cmFwcGVyLCBKU0M6
OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKTsKK2Jvb2wgc2V0SW5saW5lQ2FjaGVkV3Jh
cHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKiwgSlNDOjpKU0FycmF5QnVm
ZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKTsKKworYm9v
bCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9N
T2JqZWN0Kik7Citib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQm
LCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3JhcHBlcik7Citib29sIGNsZWFySW5s
aW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKiwgSlND
OjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+
IEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgRE9NQ2xh
c3MmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCog
Z2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBSZWY8RE9NQ2xhc3M+JiBv
YmplY3QpIHsgcmV0dXJuIGdldENhY2hlZFdyYXBwZXIod29ybGQsIG9iamVjdC5nZXQoKSk7IH0K
K3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IHZvaWQg
Y2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNzKiwgV3JhcHBlckNsYXNzKik7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiB2b2lk
IHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNzKiwgV3JhcHBlckNsYXNz
Kik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gYXV0byBjcmVhdGVX
cmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPHN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBhdXRvIGNyZWF0ZVdyYXBwZXIo
SlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
IXN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNWYWx1ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBET01DbGFzcyYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0Ns
YXNzPiBKU0NsYXNzJiBjYXN0VGhpc1ZhbHVlKEpTQzo6RXhlY1N0YXRlJik7CisKK3ZvaWQgYWRk
SW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJik7CisKK2NvbnN0IEpTQzo6SGFzaFRh
YmxlJiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKEpTQzo6Vk0mLCBjb25zdCBKU0M6Okhhc2hU
YWJsZSYgc3RhdGljVGFibGUpOworCitTdHJpbmcgcmV0cmlldmVFcnJvck1lc3NhZ2UoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiwgSlNDOjpDYXRjaFNj
b3BlJik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogPSBudWxscHRyKTsKK1dF
QkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpF
eGNlcHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0ciwgRXhjZXB0aW9uRGV0YWlscyogPSBu
dWxscHRyKTsKK3ZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwor
CitKU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0
aW9uJiYpOworSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSos
IEV4Y2VwdGlvbkNvZGUsIGNvbnN0IFN0cmluZyYpOworCisvLyBDb252ZXJ0IGEgRE9NIGltcGxl
bWVudGF0aW9uIGV4Y2VwdGlvbiBpbnRvIGEgSmF2YVNjcmlwdCBleGNlcHRpb24gaW4gdGhlIGV4
ZWN1dGlvbiBzdGF0ZS4KK3ZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOworV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9w
YWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYs
IEV4Y2VwdGlvbiYmKTsKKworSlNDOjpKU1ZhbHVlIGpzU3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwg
Y29uc3QgVVJMJik7IC8vIGVtcHR5IGlmIHRoZSBVUkwgaXMgbnVsbAorCitKU0M6OkpTVmFsdWUg
anNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyB1
bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCitKU0M6OkpTVmFsdWUganNTdHJpbmdPclVu
ZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFVSTCYpOyAvLyB1bmRlZmluZWQgaWYgdGhl
IFVSTCBpcyBudWxsCisKKy8vIFNlZSBKYXZhU2NyaXB0Q29yZSBmb3IgZXhwbGFuYXRpb246IFNo
b3VsZCBiZSB1c2VkIGZvciBhbnkgc3RyaW5nIHRoYXQgaXMgYWxyZWFkeSBvd25lZCBieSBhbm90
aGVyCisvLyBvYmplY3QsIHRvIGxldCB0aGUgZW5naW5lIGtub3cgdGhhdCBjb2xsZWN0aW5nIHRo
ZSBKU1N0cmluZyB3cmFwcGVyIGlzIHVubGlrZWx5IHRvIHNhdmUgbWVtb3J5LgorSlNDOjpKU1Zh
bHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsK
KworU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKKworQXRv
bWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsK
KworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoSlNDOjpFeGVj
U3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyB2
YWx1ZVRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgY29u
c3QgSlNDOjpJZGVudGlmaWVyJik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdmFsdWVUb1VTVlN0
cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK2ludDMyX3QgZmluaXRlSW50
MzJWYWx1ZShKU0M6OkpTVmFsdWUsIEpTQzo6RXhlY1N0YXRlKiwgYm9vbCYgb2theSk7CisKKy8v
IFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbnZlcnQgdmFsdWVzIHRvIGludGVnZXJzIGFzIHBl
ciB0aGUgV2ViSURMIHNwZWNpZmljYXRpb24uCisvLyBUaGUgY29udmVyc2lvbiBmYWlscyBpZiB0
aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIG51bWJlciBvciwgaWYgRW5mb3JjZVJh
bmdlIGlzIHNwZWNpZmllZCwKKy8vIHRoZSB2YWx1ZSBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiB0
aGUgZGVzdGluYXRpb24gaW50ZWdlciB0eXBlLgorCitXRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9J
bnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVf
RVhQT1JUIHVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZFbmZvcmNlUmFuZ2UoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9V
SW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09S
RV9FWFBPUlQgaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDY0X3Qg
dG9JbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJD
T1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7CisKK1dFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDhDbGFtcChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50OF90IHRvVUlu
dDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBp
bnQxNl90IHRvSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJD
T1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDMyX3QgdG9JbnQzMkNsYW1wKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQzMl90IHRvVUludDMyQ2xh
bXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50NjRf
dCB0b0ludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9F
WFBPUlQgdWludDY0X3QgdG9VSW50NjRDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7CisKK1dFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQx
NihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQ2NF90
IHRvSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQg
dWludDY0X3QgdG9VSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCitKU0M6
OkpTVmFsdWUganNEYXRlKEpTQzo6RXhlY1N0YXRlKiwgZG91YmxlIHZhbHVlKTsKKworLy8gTmFO
IGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gYSBkYXRlLgorZG91YmxlIHZhbHVl
VG9EYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKKworLy8gVmFsaWRhdGVzIHRo
YXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4x
MyBvZiB0aGUgV2ViSURMIHNwZWMuCitKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpOworCitKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1
ZmZlciYpOworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcmKTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyKik7CitKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkFycmF5QnVmZmVyVmlldyopOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUPiYmKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBSZWZQdHI8VD4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgVmVj
dG9yPFQ+Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mKTsK
K0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBj
b25zdCBKU0M6OlByaXZhdGVOYW1lJik7CisKK0pTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlND
OjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiwg
SlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUJik7CitKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9y
RW5kKEpTQzo6RXhlY1N0YXRlJik7CisKK1JlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9Q
b3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1Jl
ZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDhBcnJheShKU0M6OlZNJiwg
SlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJ
bnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50MzJBcnJh
eT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitS
ZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhBcnJheShKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Bvc3Np
Ymx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQ
dHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0m
LCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvUG9zc2libHlTaGFy
ZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkZsb2F0
MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1Zh
bHVlKTsKK1JlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0NjRB
cnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKworUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJW
aWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwor
UmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6
OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9VbnNoYXJlZEludDE2QXJyYXko
SlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Vuc2hh
cmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQ4
QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVm
UHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5zaGFyZWRVaW50OENsYW1wZWRBcnJheShK
U0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0b1Vuc2hh
cmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50
MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwor
UmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0m
LCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b1Vuc2hhcmVkRmxv
YXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBKU1R5cGU+IFZlY3RvcjxSZWY8VD4+IHRvUmVmTmF0aXZlQXJyYXkoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNJdGVyYXRv
ck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK2VudW0gU2VjdXJpdHlS
ZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IsIExvZ1NlY3VyaXR5RXJy
b3IsIFRocm93U2VjdXJpdHlFcnJvciB9OworbmFtZXNwYWNlIEJpbmRpbmdTZWN1cml0eSB7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVj
U3RhdGUmLCBUJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hlY2tTZWN1cml0eUZv
ck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUKik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gRXhj
ZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0
aW9uT3I8VCo+JiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEV4Y2VwdGlvbk9yPFQqPiBj
aGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2VwdGlvbk9yPFQmPiYmKTsK
KyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqLCBE
T01XaW5kb3cmLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9IExvZ1NlY3VyaXR5RXJyb3IpOwor
ICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSYsIERP
TVdpbmRvdyYsIFN0cmluZyYgbWVzc2FnZSk7CisgICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1Rv
RnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSosIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uID0g
TG9nU2VjdXJpdHlFcnJvcik7CisgICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlND
OjpFeGVjU3RhdGUmLCBGcmFtZSYsIFN0cmluZyYgbWVzc2FnZSk7CisgICAgYm9vbCBzaG91bGRB
bGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIE5vZGUqKTsKK307CisKK3ZvaWQgcHJp
bnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisK
K1N0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7CitBdG9taWNT
dHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOworCit0
ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1Zh
bHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworCitlbnVtIGNsYXNzIENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yIHsgVGhyb3csIFJldHVybkVhcmx5LCBSZWplY3RQcm9taXNlLCBB
c3NlcnQgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4KK3N0cnVjdCBCaW5kaW5nQ2Fs
bGVyIHsKKyAgICB1c2luZyBBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiA9IGJvb2woSlNDOjpFeGVj
U3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICB1
c2luZyBBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiA9IEpTQzo6SlNWYWx1ZShKU0M6OkV4ZWNTdGF0
ZSYsIEpTQ2xhc3MmLCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICB1c2luZyBPcGVyYXRpb25DYWxs
ZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNz
KiwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNpbmcgUHJvbWlzZU9wZXJhdGlvbkNhbGxlckZ1
bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBS
ZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93U2NvcGUmKTsKKworICAgIHN0YXRpYyBK
U0NsYXNzKiBjYXN0Rm9yQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSk7CisgICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RGb3JPcGVyYXRpb24oSlNDOjpFeGVjU3Rh
dGUmKTsKKworICAgIHRlbXBsYXRlPFByb21pc2VPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiBvcGVy
YXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2U+CisgICAgc3RhdGljIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgY2FsbFByb21pc2VPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBSZWY8
RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpCisg
ICAgeworICAgICAgICBBU1NFUlQoc3RhdGUpOworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byogdGhpc09iamVj
dCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsKKyAgICAgICAgaWYgKHNob3VsZFRocm93ICE9
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5MSUtFTFkoIXRoaXNPYmplY3Qp
KQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihwcm9t
aXNlLmdldCgpLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9uTmFtZSk7Cisg
ICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKKyAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZvKCkpOworICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2RlIHRvIHVzZSByZWZlcmVu
Y2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkNh
bGxlcihzdGF0ZSwgdGhpc09iamVjdCwgV1RGTW92ZShwcm9taXNlKSwgdGhyb3dTY29wZSk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8T3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gb3BlcmF0aW9uQ2Fs
bGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxsT3Bl
cmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3RhdGUpOworICAgICAgICBpZiAoc2hvdWxkVGhyb3cg
IT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCAmJiBVTkxJS0VMWSghdGhpc09iamVj
dCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6VGhyb3cpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigq
c3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25O
YW1lKTsKKyAgICAgICAgICAgIC8vIEZvciBjdXN0b20gcHJvbWlzZS1yZXR1cm5pbmcgb3BlcmF0
aW9ucworICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcigq
c3RhdGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25OYW1lKTsKKyAgICAg
ICAgfQorICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7CisgICAgICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygpKTsKKyAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2Ug
cmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNPYmplY3QuCisgICAgICAgIHJldHVybiBvcGVy
YXRpb25DYWxsZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAgIH0KKworICAg
IHRlbXBsYXRlPEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9uIHNldHRlciwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+Cisg
ICAgc3RhdGljIGJvb2wgc2V0QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRl
KTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+
dm0oKSk7CisgICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yQXR0cmlidXRlKCpzdGF0
ZSwgdGhpc1ZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkKKyAgICAg
ICAgICAgIHJldHVybiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRo
cm93KSA/IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6
aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpIDogZmFsc2U7CisgICAgICAgIHJldHVy
biBzZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgSlNDOjpKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZFZhbHVlKSwgdGhyb3dTY29wZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8QXR0cmlidXRlR2V0
dGVyRnVuY3Rpb24gZ2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBhdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvckF0
dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghdGhpc09i
amVjdCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6VGhyb3cpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVy
cm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJp
YnV0ZU5hbWUpOworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpSZWplY3RQcm9taXNlKQorICAgICAgICAgICAgICAgIHJldHVybiByZWplY3RQ
cm9taXNlV2l0aEdldHRlclR5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NO
YW1lLCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVu
Y29kZShKU0M6OmpzVW5kZWZpbmVkKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBKU0M6
OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSkp
OworICAgIH0KK307CisKKy8vIEV4Y2VwdGlvbk9yIGhhbmRsaW5nLgordm9pZCBwcm9wYWdhdGVF
eGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25Pcjx2
b2lkPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25P
cjxUPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVh
dGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUm
LCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKTsKKworLy8gSW5saW5lIGZ1bmN0aW9ucyBhbmQgdGVt
cGxhdGUgZGVmaW5pdGlvbnMuCisKK2lubGluZSBKU0M6OlN0cnVjdHVyZSogRE9NQ29uc3RydWN0
b3JPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBK
U0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpU
eXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwor
aW5saW5lIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpET01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAg
IDogSlNET01PYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9CisKK2lubGluZSBT
dHJpbmcgRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCopCit7
CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRnVuY3Rpb24iKTsKK30KKworaW5saW5lIERPTUNv
bnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0OjpET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
KQorICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7
Cit9CisKK2lubGluZSBKU0M6OkpTRnVuY3Rpb24qIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2Jq
ZWN0Ojppbml0aWFsaXplRnVuY3Rpb24oKQoreworICAgIHJldHVybiBtX2luaXRpYWxpemVGdW5j
dGlvbi5nZXQoKTsKK30KKworaW5saW5lIHZvaWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmpl
Y3Q6OnNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiB2bSwgSlNDOjpKU0Z1bmN0aW9uJiBm
dW5jdGlvbikKK3sKKyAgICBtX2luaXRpYWxpemVGdW5jdGlvbi5zZXQodm0sIHRoaXMsICZmdW5j
dGlvbik7Cit9CisKK2lubGluZSBKU0RPTUdsb2JhbE9iamVjdCogZGVwcmVjYXRlZEdsb2JhbE9i
amVjdEZvclByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICAvLyBGSVhNRTog
Q2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2luZyB0aGUgZ2xvYmFsIG9iamVj
dAorICAgIC8vIGZyb20gd2hpY2ggdGhlIG9iamVjdCBpcyBiZWluZyBjcmVhdGVkLCBpbnN0ZWFk
IG9mIGFzc3VtaW5nIHRoZSBsZXhpY2FsIG9uZS4KKyAgICAvLyBlLmcuIHN1YmZyYW1lLmRvY3Vt
ZW50LmJvZHkgc2hvdWxkIHVzZSB0aGUgc3ViZnJhbWUncyBnbG9iYWwgb2JqZWN0LCBub3QgdGhl
IGxleGljYWwgb25lLgorICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFdy
YXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3RydWN0dXJlKiBnZXRET01TdHJ1Y3R1cmUoSlNDOjpW
TSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgaWYgKEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0
LCBXcmFwcGVyQ2xhc3M6OmluZm8oKSkpCisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7CisgICAg
cmV0dXJuIGNhY2hlRE9NU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVh
dGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFzczo6Y3JlYXRlUHJvdG90
eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSksIFdyYXBwZXJDbGFzczo6aW5mbygpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGRlcHJl
Y2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgLy8gRklY
TUU6IFRoaXMgZnVuY3Rpb24gaXMgd3JvbmcuIEl0IHVzZXMgdGhlIHdyb25nIGdsb2JhbCBvYmpl
Y3QgZm9yIGNyZWF0aW5nIHRoZSBwcm90b3R5cGUgc3RydWN0dXJlLgorICAgIHJldHVybiBnZXRE
T01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihleGVjLT52bSgpLCAqZGVwcmVjYXRlZEdsb2JhbE9i
amVjdEZvclByb3RvdHlwZShleGVjKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJD
bGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldERPTVByb3RvdHlwZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBKU0M6Ompz
Q2FzdDxKU0M6OkpTT2JqZWN0Kj4oYXNPYmplY3QoZ2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFz
cz4odm0sICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpLT5z
dG9yZWRQcm90b3R5cGUoKSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0NsYXNz
OjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpTQ2xhc3M+KGdsb2JhbE9iamVjdC52bSgpLCBnbG9i
YWxPYmplY3QpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFy
Z3VtZW50cyhzdGF0ZSwgKm9iamVjdCwgaW5pdGlhbGl6ZUZ1bmN0aW9uKTsKKyAgICByZXR1cm4g
SlNDOjpKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsKK30KKworaW5saW5lIEpTQzo6V2Vha0hhbmRs
ZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1
ZmZlciopCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlcio+KHdvcmxkLnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci5nZXQoKSktPndyYXBwZXJP
d25lcigpOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBlcktleShKU0M6OkFycmF5QnVmZmVyKiBk
b21PYmplY3QpCit7CisgICAgcmV0dXJuIGRvbU9iamVjdDsKK30KKworaW5saW5lIEpTRE9NT2Jq
ZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqKSB7IHJl
dHVybiBudWxscHRyOyB9CitpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdy
YXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCosIEpTQzo6V2Vha0hhbmRsZU93bmVyKikg
eyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqKSB7IHJldHVybiBmYWxzZTsgfQor
CitpbmxpbmUgSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QpCit7CisgICAgaWYgKCF3b3Js
ZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZG9tT2Jq
ZWN0LT53cmFwcGVyKCk7Cit9CisKK2lubGluZSBKU0M6OkpTQXJyYXlCdWZmZXIqIGdldElubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciog
YnVmZmVyKQoreworICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgcmV0dXJuIGJ1ZmZlci0+bV93cmFwcGVyLmdldCgpOworfQorCitpbmxpbmUg
Ym9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlw
dFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTU9iamVjdCogd3JhcHBlciwgSlNDOjpXZWFrSGFu
ZGxlT3duZXIqIHdyYXBwZXJPd25lcikKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb21PYmplY3QtPnNldFdyYXBwZXIod3JhcHBlciwg
d3JhcHBlck93bmVyLCAmd29ybGQpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9v
bCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJy
YXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6Oldl
YWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKQoreworICAgIGlmICghd29ybGQuaXNOb3JtYWwo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvbU9iamVjdC0+bV93cmFwcGVyID0gSlND
OjpXZWFrPEpTQzo6SlNBcnJheUJ1ZmZlcj4od3JhcHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQp
OworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdy
YXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3Qs
IEpTRE9NT2JqZWN0KiB3cmFwcGVyKQoreworICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvbU9iamVjdC0+Y2xlYXJXcmFwcGVyKHdyYXBwZXIp
OworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdy
YXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0
LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIpCit7CisgICAgaWYgKCF3b3JsZC5pc05vcm1h
bCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgd2Vha0NsZWFyKGRvbU9iamVjdC0+bV93
cmFwcGVyLCB3cmFwcGVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdy
YXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzJiBkb21PYmplY3QpCit7CisgICAgaWYgKGF1dG8q
IHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCAmZG9tT2JqZWN0KSkKKyAg
ICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIHdvcmxkLm1fd3JhcHBlcnMuZ2V0KHdy
YXBwZXJLZXkoJmRvbU9iamVjdCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywg
dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVy
KQoreworICAgIEpTQzo6V2Vha0hhbmRsZU93bmVyKiBvd25lciA9IHdyYXBwZXJPd25lcih3b3Js
ZCwgZG9tT2JqZWN0KTsKKyAgICBpZiAoc2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9t
T2JqZWN0LCB3cmFwcGVyLCBvd25lcikpCisgICAgICAgIHJldHVybjsKKyAgICB3ZWFrQWRkKHdv
cmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwgSlNDOjpXZWFrPEpTQzo6SlNP
YmplY3Q+KHdyYXBwZXIsIG93bmVyLCAmd29ybGQpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
RE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQgdW5jYWNoZVdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgV3JhcHBlckNs
YXNzKiB3cmFwcGVyKQoreworICAgIGlmIChjbGVhcklubGluZUNhY2hlZFdyYXBwZXIod29ybGQs
IGRvbU9iamVjdCwgd3JhcHBlcikpCisgICAgICAgIHJldHVybjsKKyAgICB3ZWFrUmVtb3ZlKHdv
cmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwgd3JhcHBlcik7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBpbmxpbmUgYXV0byBjcmVhdGVX
cmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIGRvbU9iamVj
dCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6
dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46Oldy
YXBwZXJDbGFzcyo+Ojp0eXBlCit7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gdHlwZW5hbWUg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzOworCisg
ICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2Jq
ZWN0KSk7CisgICAgYXV0byogZG9tT2JqZWN0UHRyID0gZG9tT2JqZWN0LnB0cigpOworICAgIGF1
dG8qIHdyYXBwZXIgPSBXcmFwcGVyQ2xhc3M6OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8V3JhcHBl
ckNsYXNzPihnbG9iYWxPYmplY3QtPnZtKCksICpnbG9iYWxPYmplY3QpLCBnbG9iYWxPYmplY3Qs
IFdURk1vdmUoZG9tT2JqZWN0KSk7CisgICAgY2FjaGVXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29y
bGQoKSwgZG9tT2JqZWN0UHRyLCB3cmFwcGVyKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlubGluZSBhdXRvIGNyZWF0
ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgZG9tT2Jq
ZWN0KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPERPTUNsYXNzLCBU
Pjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46
OldyYXBwZXJDbGFzcyo+Ojp0eXBlCit7CisgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8RE9NQ2xh
c3M+KGdsb2JhbE9iamVjdCwgc3RhdGljX3JlZmVyZW5jZV9jYXN0PERPTUNsYXNzPihXVEZNb3Zl
KGRvbU9iamVjdCkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBK
U0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIERPTUNsYXNzJiBkb21PYmplY3QpCit7CisgICAgaWYgKGF1dG8qIHdy
YXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0
KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQo
c3RhdGUsIGdsb2JhbE9iamVjdCwgUmVmPERPTUNsYXNzPihkb21PYmplY3QpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQ2xhc3MmIGNhc3RUaGlzVmFsdWUoSlND
OjpFeGVjU3RhdGUmIHN0YXRlKQoreworICAgIGF1dG8gdGhpc1ZhbHVlID0gc3RhdGUudGhpc1Zh
bHVlKCk7CisgICAgYXV0byBjYXN0ZWRUaGlzID0ganNEeW5hbWljRG93bmNhc3Q8SlNDbGFzcyo+
KHN0YXRlLnZtKCksIHRoaXNWYWx1ZSk7CisgICAgQVNTRVJUKGNhc3RlZFRoaXMpOworICAgIHJl
dHVybiAqY2FzdGVkVGhpczsKK30KKworaW5saW5lIGludDMyX3QgZmluaXRlSW50MzJWYWx1ZShK
U0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBib29sJiBva2F5KQorewor
ICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICBva2F5ID0gc3Rk
Ojppc2Zpbml0ZShudW1iZXIpOworICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKK30K
KworLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBl
IHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCitpbmxpbmUgSlNDOjpKU09i
amVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUgdmFs
dWUsIHVuc2lnbmVkJiBsZW5ndGgpCit7CisgICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNDOjpKU09i
amVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0KCk7CisgICAgaWYgKCFvYmplY3QpIHsKKyAg
ICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIEpTQzo6SlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iamVj
dC0+Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAgaWYgKGxlbmd0aFZhbHVlLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBz
Y29wZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGxlbmd0aCA9IGxl
bmd0aFZhbHVlLnRvVUludDMyKCZleGVjKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK2lubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6QXJyYXlCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICBpZiAoYXV0byByZXN1bHQg
PSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgYnVmZmVyKSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKworICAgIC8vIFRoZSBKU0FycmF5QnVmZmVyOjpjcmVhdGUgZnVu
Y3Rpb24gd2lsbCByZWdpc3RlciB0aGUgd3JhcHBlciBpbiBmaW5pc2hDcmVhdGlvbi4KKyAgICBy
ZXR1cm4gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUtPnZtKCksIGdsb2JhbE9iamVj
dC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYnVmZmVyLnNoYXJpbmdNb2RlKCkpLCAmYnVmZmVyKTsK
K30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyVmlldyYgdmll
dykKK3sKKyAgICByZXR1cm4gdmlldy53cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QpOworfQorCitp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgIHJldHVybiB0
b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICpidWZmZXIpOworfQorCitpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3KiB2aWV3KQoreworICAgIGlmICghdmlldykK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGds
b2JhbE9iamVjdCwgKnZpZXcpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIFJlZjxUPiYmIHB0cikKK3sKKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIHB0ci5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+JiYgcHRyKQoreworICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VD4mIHZlY3RvcikKK3sKKyAgICBKU0M6
OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4
ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0pKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIH0KKyAgICByZXR1
cm4gYXJyYXk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mIHZlY3RvcikKK3sKKyAgICBKU0M6OlZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShl
eGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0uZ2V0KCkpKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4g
YXJyYXk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJiBwcml2YXRlTmFt
ZSkKK3sKKyAgICByZXR1cm4gSlNDOjpTeW1ib2w6OmNyZWF0ZShleGVjLT52bSgpLCBwcml2YXRl
TmFtZS51aWQoKSk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Cit7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwgdmFsdWUs
IGZhbHNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBUJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JS
ZXN1bHRPYmplY3QoJnN0YXRlLCB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUpLCBm
YWxzZSk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3Qo
JnN0YXRlLCBKU0M6OmpzVW5kZWZpbmVkKCksIHRydWUpOworfQorCitpbmxpbmUgUmVmUHRyPEpT
Qzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byogd3JhcHBlciA9IGpzRHlu
YW1pY0Rvd25jYXN0PEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqPih2bSwgdmFsdWUpOworICAgIGlm
ICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHdyYXBwZXIt
PnBvc3NpYmx5U2hhcmVkSW1wbCgpOworfQorCitpbmxpbmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZm
ZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCit7CisgICAgYXV0byByZXN1bHQgPSB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZm
ZXJWaWV3KHZtLCB2YWx1ZSk7CisgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT5pc1NoYXJlZCgp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxp
bmUgUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50OEFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJl
ZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUg
UmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDE2QXJyYXkoSlNDOjpW
TSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVk
TmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUg
UmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXkoSlNDOjpW
TSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVk
TmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUg
UmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpW
TSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVk
TmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUg
UmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OENsYW1w
ZWRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRv
UG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENsYW1wZWRBZGFwdG9yPih2
bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvUG9zc2libHlT
aGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MTZBZGFwdG9y
Pih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvUG9zc2li
bHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MzJBZGFw
dG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Bv
c3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUp
IHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0
MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5
PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OkZsb2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9CisKK2lubGluZSBSZWZQdHI8SlNDOjpJbnQ4
QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0
b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Vuc2hh
cmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2YWx1
ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJh
eShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFy
ZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGlu
ZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Vuc2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBl
ZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlND
OjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5
cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBS
ZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mIHZt
LCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVk
VmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlND
OjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMy
QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQz
MkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+
IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkg
eyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0
b3I+KHZtLCB2YWx1ZSk7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSlNUPiBp
bmxpbmUgVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCF2
YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8UmVmPFQ+
PiByZXN1bHQ7CisgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCB2YWx1ZSwgWyZyZXN1bHRd
KEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVl
KSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
ICAgICBpZiAoanNWYWx1ZS5pbmhlcml0cyh2bSwgSlNUOjppbmZvKCkpKSB7CisgICAgICAgICAg
ICBhdXRvKiBvYmplY3QgPSBKU1Q6OnRvV3JhcHBlZCh2bSwganNWYWx1ZSk7CisgICAgICAgICAg
ICBBU1NFUlQob2JqZWN0KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKm9iamVjdCk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoKnN0
YXRlLCBzY29wZSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIFN0
cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUp
Cit7CisgICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSk7CisgICAgcmV0dXJuIHBy
b3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFtZS51aWQoKSA6IHByb3BlcnR5TmFtZS5wdWJs
aWNOYW1lKCk7Cit9CisKK2lubGluZSBBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNT
dHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBBdG9t
aWNTdHJpbmcocHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVpZCgpIDogcHJvcGVy
dHlOYW1lLnB1YmxpY05hbWUoKSk7Cit9CisKK3RlbXBsYXRlPEpTQzo6TmF0aXZlRnVuY3Rpb24g
bmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9uQ2FjaGlu
Z1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkVuY29kZWRK
U1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIEpT
Qzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9wZXJ0eU5hbWUucHVibGljTmFt
ZSgpLCBuYXRpdmVGdW5jdGlvbikpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgcHJvcGFnYXRl
RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Nj
b3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCit7CisgICAgaWYgKHRocm93U2NvcGUuZXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChz
dGF0ZSwgdGhyb3dTY29wZSwgV1RGTW92ZShleGNlcHRpb24pKTsKK30KKworaW5saW5lIHZvaWQg
cHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlLCBFeGNlcHRpb25Pcjx2b2lkPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJ
S0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpCisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihz
dGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2
YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRl
LCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKyAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVl
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
LCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNF
eGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Nj
b3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHZh
bHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBUJiBub2RlKQoreworICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9k
ZShzdGF0ZSwgJm5vZGUpID8gJm5vZGUgOiBudWxscHRyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgVCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIFQqIG5vZGUpCit7CisgICAgcmV0dXJuIHNob3VsZEFsbG93QWNj
ZXNzVG9Ob2RlKHN0YXRlLCBub2RlKSA/IG5vZGUgOiBudWxscHRyOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tT
ZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb25PcjxUKj4mJiB2
YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiB2
YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIGNoZWNrU2VjdXJpdHlGb3JOb2Rl
KHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3Vy
aXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQmPiYmIHZhbHVl
KQoreworICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIHZhbHVl
LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3Rh
dGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMj
CituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nU2VjdXJpdHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5oCShyZXZpc2lv
biAyMTEzNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1
cml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyODAgKzIzLDIzIEBACiAKICNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCi0jaW5jbHVkZSAiSlNET01HbG9iYWxPYmpl
Y3QuaCIKLSNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJKU0R5bmFtaWNEb3du
Y2FzdC5oIgotI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgotI2luY2x1ZGUgIlNjcmlwdFdy
YXBwYWJsZUlubGluZXMuaCIKLSNpbmNsdWRlICJXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4KLSNp
bmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgotI2luY2x1ZGUgPGhlYXAvV2Vhay5o
PgotI2luY2x1ZGUgPGhlYXAvV2Vha0lubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0F1eGls
aWFyeUJhcnJpZXJJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1
ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0Fy
cmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDZWxsSW5saW5l
cy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9KU1R5cGVkQXJyYXlzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9Mb29rdXAuaD4KLSNpbmNs
dWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1dyaXRl
QmFycmllci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0dldFB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLQotLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBmaWxlIGEgbG90IGVhc2llciB0byBy
ZWFkIGJ5IHB1dHRpbmcgYWxsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBhdCB0aGUgdG9wLAotLy8g
YW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zIGJlbG93LCBldmVuIGZvciB0ZW1wbGF0ZSBhbmQgaW5s
aW5lIGZ1bmN0aW9ucy4KIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBKU0Z1bmN0aW9uOworY2xh
c3MgRXhlY1N0YXRlOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENhY2hlZFNj
cmlwdDsKLWNsYXNzIERlZmVycmVkUHJvbWlzZTsKIGNsYXNzIERPTVdpbmRvdzsKIGNsYXNzIEZy
YW1lOwotY2xhc3MgVVJMOwogY2xhc3MgTm9kZTsKIAotc3RydWN0IEV4Y2VwdGlvbkRldGFpbHMg
ewotICAgIFN0cmluZyBtZXNzYWdlOwotICAgIGludCBsaW5lTnVtYmVyIHsgMCB9OwotICAgIGlu
dCBjb2x1bW5OdW1iZXIgeyAwIH07Ci0gICAgU3RyaW5nIHNvdXJjZVVSTDsKLX07Ci0KLS8vIEJh
c2UgY2xhc3MgZm9yIGFsbCBjb25zdHJ1Y3RvciBvYmplY3RzIGluIHRoZSBKU0MgYmluZGluZ3Mu
Ci1jbGFzcyBET01Db25zdHJ1Y3Rvck9iamVjdCA6IHB1YmxpYyBKU0RPTU9iamVjdCB7Ci1wdWJs
aWM6Ci0gICAgdHlwZWRlZiBKU0RPTU9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbXBsZW1l
bnRzSGFzSW5zdGFuY2UgfCBKU0M6OkltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UgfCBKU0M6
OlR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNW
YWx1ZSk7Ci0KLXByb3RlY3RlZDoKLSAgICBET01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVj
dHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0KLSAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFt
ZShjb25zdCBKU09iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRh
KEpTQ2VsbCosIEpTQzo6Q2FsbERhdGEmKTsKLX07Ci0KLWNsYXNzIERPTUNvbnN0cnVjdG9ySlNC
dWlsdGluT2JqZWN0IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0KLXByb3RlY3RlZDoKLSAgICBE
T01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFs
T2JqZWN0Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKLQotICAgIEpTQzo6SlNGdW5jdGlvbiogaW5pdGlhbGl6ZUZ1bmN0
aW9uKCk7Ci0gICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYsIEpTQzo6SlNG
dW5jdGlvbiYpOwotCi1wcml2YXRlOgotICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNGdW5j
dGlvbj4gbV9pbml0aWFsaXplRnVuY3Rpb247Ci19OwotCi1ET01XaW5kb3cmIGNhbGxlckRPTVdp
bmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwotRE9NV2luZG93JiBhY3RpdmVET01XaW5kb3coSlNDOjpF
eGVjU3RhdGUqKTsKLURPTVdpbmRvdyYgZmlyc3RET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsK
LQotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZXBvcnREZXByZWNhdGVkR2V0
dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RGVwcmVj
YXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci0KLXZvaWQgdGhyb3dBdHRyaWJ1dGVUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3Rl
ZFR5cGUpOwotV0VCQ09SRV9FWFBPUlQgYm9vbCB0aHJvd1NldHRlclR5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotCi12b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93RGF0YUNs
b25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLXZvaWQgdGhyb3dE
T01TeW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOyAvLyBOb3Qg
dGhlIHNhbWUgYXMgYSBKYXZhU2NyaXB0IHN5bnRheCBlcnJvci4KLXZvaWQgdGhyb3dJbmRleFNp
emVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd0lu
dmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3Qg
Y2hhciogbWVzc2FnZSk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHRocm93Tm9uRmluaXRlVHlwZUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93Tm90U3Vw
cG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLXZvaWQgdGhy
b3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNv
bnN0IGNoYXIqIG1lc3NhZ2UpOwotdm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotV0VCQ09SRV9F
WFBPUlQgdm9pZCB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJik7Ci12b2lkIHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmKTsKLQotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1
ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1l
LCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRWYWx1ZXMpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0
aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFt
ZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50
VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJn
dW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlv
bkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhw
ZWN0ZWRUeXBlKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dSZXF1
aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNv
bnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25zdCBj
aGFyKiBleHBlY3RlZFR5cGUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9y
U2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKTsKLQotU3RyaW5nIG1h
a2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotU3RyaW5nIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLQot
V0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUpOwotCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VX
aXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OkVu
Y29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21p
c2UmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1l
KTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhU
aGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0
dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBKU0M6
OkNsYXNzSW5mbyopOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpTdHJ1Y3R1cmUqIGNhY2hlRE9NU3Ry
dWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpTdHJ1Y3R1cmUqLCBjb25zdCBKU0M6OkNs
YXNzSW5mbyopOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6U3RydWN0
dXJlKiBnZXRET01TdHJ1Y3R1cmUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6U3RydWN0dXJlKiBkZXByZWNhdGVkR2V0
RE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRlKik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVy
Q2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldERPTVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0ds
b2JhbE9iamVjdCopOwotCi12b2lkIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgSlNDOjpKU0Z1bmN0aW9u
Jik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IEpTQzo6RW5jb2RlZEpTVmFsdWUgY3Jl
YXRlSlNCdWlsdGluKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU0Z1bmN0aW9uJiBpbml0aWFsaXpl
RnVuY3Rpb24sIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0KLUpTQzo6V2Vha0hhbmRsZU93bmVyKiB3
cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciopOwotdm9pZCog
d3JhcHBlcktleShKU0M6OkFycmF5QnVmZmVyKik7Ci0KLUpTRE9NT2JqZWN0KiBnZXRJbmxpbmVD
YWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqKTsKLUpTRE9NT2JqZWN0KiBnZXRJ
bmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSopOwot
SlNDOjpKU0FycmF5QnVmZmVyKiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKLQotYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCosIEpTQzo6V2Vha0hhbmRsZU93bmVy
Kik7Ci1ib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgU2NyaXB0
V3JhcHBhYmxlKiwgSlNET01PYmplY3QqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3
cmFwcGVyT3duZXIpOwotYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYsIEpTQzo6QXJyYXlCdWZmZXIqLCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpTQzo6
V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpOwotCi1ib29sIGNsZWFySW5saW5lQ2FjaGVk
V3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqKTsKLWJvb2wgY2xl
YXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSos
IEpTRE9NT2JqZWN0KiB3cmFwcGVyKTsKLWJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqLCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdy
YXBwZXIpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gSlNDOjpKU09iamVjdCogZ2V0
Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYgd29ybGQsIFJlZjxET01DbGFzcz4mIG9iamVjdCkgeyByZXR1cm4gZ2V0
Q2FjaGVkV3JhcHBlcih3b3JsZCwgb2JqZWN0LmdldCgpKTsgfQotdGVtcGxhdGU8dHlwZW5hbWUg
RE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkJiwgRE9NQ2xhc3MqLCBXcmFwcGVyQ2xhc3MqKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9N
V3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MqLCBXcmFwcGVyQ2xhc3MqKTsKLXRlbXBsYXRlPHR5cGVu
YW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxP
YmplY3QqLCBSZWY8VD4mJikgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1l
PERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlOwotdGVtcGxhdGU8dHlwZW5hbWUgRE9N
Q2xhc3MsIHR5cGVuYW1lIFQ+IGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCos
IFJlZjxUPiYmKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPERPTUNs
YXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01D
bGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFz
cz4gSlNDOjpKU1ZhbHVlIHdyYXAoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IERPTUNsYXNzJik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IEpTQ2xhc3MmIGNhc3RU
aGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUmKTsKLQotdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25z
dCBBdG9taWNTdHJpbmcmKTsKLQotY29uc3QgSlNDOjpIYXNoVGFibGUmIGdldEhhc2hUYWJsZUZv
ckdsb2JhbERhdGEoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SGFzaFRhYmxlJiBzdGF0aWNUYWJsZSk7
Ci0KLVN0cmluZyByZXRyaWV2ZUVycm9yTWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6Vk0m
LCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBKU0M6OkNhdGNoU2NvcGUmKTsKLVdFQkNPUkVfRVhQ
T1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4
Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCBy
ZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiosIENhY2hlZFNj
cmlwdCogPSBudWxscHRyLCBFeGNlcHRpb25EZXRhaWxzKiA9IG51bGxwdHIpOwotdm9pZCByZXBv
cnRDdXJyZW50RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7Ci0KLUpTQzo6SlNWYWx1ZSBjcmVh
dGVET01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb24mJik7Ci1KU0M6OkpTVmFs
dWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgRXhjZXB0aW9uQ29kZSwgY29u
c3QgU3RyaW5nJik7Ci0KLS8vIENvbnZlcnQgYSBET00gaW1wbGVtZW50YXRpb24gZXhjZXB0aW9u
IGludG8gYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBpbiB0aGUgZXhlY3V0aW9uIHN0YXRlLgotdm9p
ZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBF
eGNlcHRpb24mJik7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQ
YXRoKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOwotCi1K
U0M6OkpTVmFsdWUganNTdHJpbmcoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBVUkwmKTsgLy8gZW1w
dHkgaWYgdGhlIFVSTCBpcyBudWxsCi0KLUpTQzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVk
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgc3Ry
aW5nIGlzIG51bGwKLUpTQzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgVVJMJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgVVJMIGlzIG51bGwKLQotLy8g
U2VlIEphdmFTY3JpcHRDb3JlIGZvciBleHBsYW5hdGlvbjogU2hvdWxkIGJlIHVzZWQgZm9yIGFu
eSBzdHJpbmcgdGhhdCBpcyBhbHJlYWR5IG93bmVkIGJ5IGFub3RoZXIKLS8vIG9iamVjdCwgdG8g
bGV0IHRoZSBlbmdpbmUga25vdyB0aGF0IGNvbGxlY3RpbmcgdGhlIEpTU3RyaW5nIHdyYXBwZXIg
aXMgdW5saWtlbHkgdG8gc2F2ZSBtZW1vcnkuCi1KU0M6OkpTVmFsdWUganNPd25lZFN0cmluZ09y
TnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwotCi1TdHJpbmcgcHJvcGVydHlO
YW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwotCi1BdG9taWNTdHJpbmcgcHJvcGVydHlO
YW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwotCi1XRUJDT1JFX0VYUE9SVCBT
dHJpbmcgaWRlbnRpZmllclRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYpOwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9CeXRlU3RyaW5nKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBpZGVu
dGlmaWVyVG9VU1ZTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
KTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKLQotaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWYWx1
ZSwgSlNDOjpFeGVjU3RhdGUqLCBib29sJiBva2F5KTsKLQotLy8gVGhlIGZvbGxvd2luZyBmdW5j
dGlvbnMgY29udmVydCB2YWx1ZXMgdG8gaW50ZWdlcnMgYXMgcGVyIHRoZSBXZWJJREwgc3BlY2lm
aWNhdGlvbi4KLS8vIFRoZSBjb252ZXJzaW9uIGZhaWxzIGlmIHRoZSB2YWx1ZSBjYW5ub3QgYmUg
Y29udmVydGVkIHRvIGEgbnVtYmVyIG9yLCBpZiBFbmZvcmNlUmFuZ2UgaXMgc3BlY2lmaWVkLAot
Ly8gdGhlIHZhbHVlIGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSBkZXN0aW5hdGlvbiBpbnRl
Z2VyIHR5cGUuCi0KLVdFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJ
bnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVf
RVhQT1JUIGludDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRv
SW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09S
RV9FWFBPUlQgdWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ2NF90
IHRvVUludDY0RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQot
V0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNkNsYW1w
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQxNl90
IHRvVUludDE2Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9F
WFBPUlQgaW50MzJfdCB0b0ludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OwotV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgdG9VSW50MzJDbGFtcChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjRDbGFtcChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJ
bnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotV0VCQ09SRV9FWFBP
UlQgaW50OF90IHRvSW50OChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JF
X0VYUE9SVCB1aW50OF90IHRvVUludDgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
V0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLUpTQzo6SlNWYWx1ZSBqc0RhdGUoSlND
OjpFeGVjU3RhdGUqLCBkb3VibGUgdmFsdWUpOwotCi0vLyBOYU4gaWYgdGhlIHZhbHVlIGNhbid0
IGJlIGNvbnZlcnRlZCB0byBhIGRhdGUuCi1kb3VibGUgdmFsdWVUb0RhdGUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUpOwotCi0vLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVj
dCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwgc3Bl
Yy4KLUpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSwgdW5zaWduZWQmIGxlbmd0aCk7Ci0KLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyJik7Ci1KU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5
QnVmZmVyVmlldyYpOwotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXIqKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Kik7
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZlB0
cjxUPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBWZWN0b3I8VD4mKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqLCBjb25zdCBWZWN0b3I8UmVmUHRyPFQ+PiYpOwotSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5h
bWUmKTsKLQotSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6
SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYs
IGNvbnN0IFQmKTsKLUpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUm
KTsKLQotUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlC
dWZmZXJWaWV3KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50OEFycmF5
PiB0b1Bvc3NpYmx5U2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVm
UHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVk
SW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQ4QXJy
YXk+IHRvUG9zc2libHlTaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwot
UmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OENsYW1w
ZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQxNkFycmF5
PiB0b1Bvc3NpYmx5U2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1S
ZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQzMkFycmF5KEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Bvc3NpYmx5
U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6
RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6
OkpTVmFsdWUpOwotCi1SZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5zaGFyZWRBcnJh
eUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQ4QXJy
YXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8
SlNDOjpJbnQxNkFycmF5PiB0b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1Zh
bHVlKTsKLVJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9VbnNoYXJlZFVp
bnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OENsYW1w
ZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOwotUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvVW5zaGFyZWRVaW50MTZBcnJheShKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hhcmVk
VWludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpGbG9hdDMy
QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1S
ZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEpTVHlwZT4g
VmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK3ZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFt
ZSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKIGVudW0gU2VjdXJpdHlSZXBvcnRpbmdPcHRp
b24geyBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IsIExvZ1NlY3VyaXR5RXJyb3IsIFRocm93U2Vj
dXJpdHlFcnJvciB9OworCiBuYW1lc3BhY2UgQmluZGluZ1NlY3VyaXR5IHsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIFQm
KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6
OkV4ZWNTdGF0ZSYsIFQqKTsKQEAgLTMwOSw0OTUgKzUyLDYgQEAgbmFtZXNwYWNlIEJpbmRpbmdT
ZWN1cml0eSB7CiAgICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0
ZSYsIE5vZGUqKTsKIH07CiAKLXZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSos
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0KLVN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhK
U0M6OlByb3BlcnR5TmFtZSk7Ci1BdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJp
bmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwotCi10ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uLCBp
bnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdl
dHRlcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKLQotCi1lbnVtIGNsYXNzIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHsgVGhyb3csIFJl
dHVybkVhcmx5LCBSZWplY3RQcm9taXNlLCBBc3NlcnQgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
SlNDbGFzcz4KLXN0cnVjdCBCaW5kaW5nQ2FsbGVyIHsKLSAgICB1c2luZyBBdHRyaWJ1dGVTZXR0
ZXJGdW5jdGlvbiA9IGJvb2woSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlRocm93U2NvcGUmKTsKLSAgICB1c2luZyBBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiA9
IEpTQzo6SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OlRocm93U2NvcGUm
KTsKLSAgICB1c2luZyBPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFs
dWUoSlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAgdXNp
bmcgUHJvbWlzZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRo
cm93U2NvcGUmKTsKLQotICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yQXR0cmlidXRlKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgc3RhdGljIEpTQ2xhc3MqIGNh
c3RGb3JPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUmKTsKLQotICAgIHRlbXBsYXRlPFByb21pc2VP
cGVyYXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21p
c2U+Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbFByb21pc2VPcGVyYXRpb24o
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNv
bnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpCi0gICAgewotICAgICAgICBBU1NFUlQoc3RhdGUpOwot
ICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgp
KTsKLSAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsK
LSAgICAgICAgaWYgKHNob3VsZFRocm93ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3Nl
cnQgJiYgVU5MSUtFTFkoIXRoaXNPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdFBy
b21pc2VXaXRoVGhpc1R5cGVFcnJvcihwcm9taXNlLmdldCgpLCBKU0NsYXNzOjppbmZvKCktPmNs
YXNzTmFtZSwgb3BlcmF0aW9uTmFtZSk7Ci0gICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKLSAg
ICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZv
KCkpOwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdl
bmVyYXRlZCBjb2RlIHRvIHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4K
LSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhpc09iamVjdCwgV1RGTW92
ZShwcm9taXNlKSwgdGhyb3dTY29wZSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8T3BlcmF0aW9u
Q2FsbGVyRnVuY3Rpb24gb3BlcmF0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBz
aG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KLSAgICBzdGF0aWMg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxsT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
Y29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSk7
Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZt
KCkpOwotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3RhdGUp
OwotICAgICAgICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFz
c2VydCAmJiBVTkxJS0VMWSghdGhpc09iamVjdCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRU
aHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6Omlu
Zm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25OYW1lKTsKLSAgICAgICAgICAgIC8vIEZvciBjdXN0
b20gcHJvbWlzZS1yZXR1cm5pbmcgb3BlcmF0aW9ucwotICAgICAgICAgICAgcmV0dXJuIHJlamVj
dFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NO
YW1lLCBvcGVyYXRpb25OYW1lKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQodGhpc09iamVj
dCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFz
czo6aW5mbygpKTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmlu
ZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNP
YmplY3QuCi0gICAgICAgIHJldHVybiBvcGVyYXRpb25DYWxsZXIoc3RhdGUsIHRoaXNPYmplY3Qs
IHRocm93U2NvcGUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPEF0dHJpYnV0ZVNldHRlckZ1bmN0
aW9uIHNldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+Ci0gICAgc3RhdGljIGJvb2wgc2V0QXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBjYXN0Rm9yQXR0cmlidXRlKCpzdGF0ZSwgdGhpc1ZhbHVlKTsKLSAgICAgICAgaWYgKFVO
TElLRUxZKCF0aGlzT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiAoc2hvdWxkVGhyb3cgPT0g
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93KSA/IHRocm93U2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5h
bWUpIDogZmFsc2U7Ci0gICAgICAgIHJldHVybiBzZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwg
SlNDOjpKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdGhyb3dTY29wZSk7Ci0gICAgfQot
Ci0gICAgdGVtcGxhdGU8QXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJv
dz4KLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBhdHRyaWJ1dGUoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgY2hhciogYXR0
cmlidXRlTmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7Ci0g
ICAgICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91
bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFz
czo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOwotICAgICAgICAgICAgaWYgKHNo
b3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlKQotICAg
ICAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcigqc3Rh
dGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKLSAgICAgICAg
ICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzVW5kZWZpbmVkKCkpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIoKnN0YXRl
LCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSkpOwotICAgIH0KLX07Ci0KLS8vIEV4Y2VwdGlvbk9y
IGhhbmRsaW5nLgotdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBFeGNlcHRpb25Pcjx2b2lkPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBK
U0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9i
YWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKTsKLQot
Ly8gSW5saW5lIGZ1bmN0aW9ucyBhbmQgdGVtcGxhdGUgZGVmaW5pdGlvbnMuCi0KLWlubGluZSBK
U0M6OlN0cnVjdHVyZSogRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQotewotICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKLX0KLQotaW5saW5lIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpE
T01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogSlNET01PYmplY3Qoc3RydWN0dXJlLCBnbG9i
YWxPYmplY3QpCi17Ci19Ci0KLWlubGluZSBTdHJpbmcgRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNs
YXNzTmFtZShjb25zdCBKU09iamVjdCopCi17Ci0gICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRnVu
Y3Rpb24iKTsKLX0KLQotaW5saW5lIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0OjpET01D
b25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3Qo
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLWlubGluZSBKU0M6OkpTRnVuY3Rpb24q
IERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojppbml0aWFsaXplRnVuY3Rpb24oKQotewot
ICAgIHJldHVybiBtX2luaXRpYWxpemVGdW5jdGlvbi5nZXQoKTsKLX0KLQotaW5saW5lIHZvaWQg
RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6
OlZNJiB2bSwgSlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAgICBtX2luaXRpYWxpemVG
dW5jdGlvbi5zZXQodm0sIHRoaXMsICZmdW5jdGlvbik7Ci19Ci0KLWlubGluZSBKU0RPTUdsb2Jh
bE9iamVjdCogZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICAvLyBGSVhNRTogQ2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIHNob3Vs
ZCBiZSB1c2luZyB0aGUgZ2xvYmFsIG9iamVjdAotICAgIC8vIGZyb20gd2hpY2ggdGhlIG9iamVj
dCBpcyBiZWluZyBjcmVhdGVkLCBpbnN0ZWFkIG9mIGFzc3VtaW5nIHRoZSBsZXhpY2FsIG9uZS4K
LSAgICAvLyBlLmcuIHN1YmZyYW1lLmRvY3VtZW50LmJvZHkgc2hvdWxkIHVzZSB0aGUgc3ViZnJh
bWUncyBnbG9iYWwgb2JqZWN0LCBub3QgdGhlIGxleGljYWwgb25lLgotICAgIHJldHVybiBKU0M6
OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7
Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3RydWN0
dXJlKiBnZXRET01TdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgaWYgKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYWNo
ZWRET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmluZm8oKSkpCi0gICAg
ICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgcmV0dXJuIGNhY2hlRE9NU3RydWN0dXJlKGdsb2Jh
bE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3Qs
IFdyYXBwZXJDbGFzczo6Y3JlYXRlUHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSksIFdyYXBw
ZXJDbGFzczo6aW5mbygpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBp
bmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgd3JvbmcuIEl0
IHVzZXMgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QgZm9yIGNyZWF0aW5nIHRoZSBwcm90b3R5cGUg
c3RydWN0dXJlLgotICAgIHJldHVybiBnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihleGVj
LT52bSgpLCAqZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdl
dERPTVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQotewotICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oYXNPYmplY3Qo
Z2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFzcz4odm0sICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGdsb2JhbE9iamVjdCkpLT5zdG9yZWRQcm90b3R5cGUoKSkpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVK
U0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxp
emVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBKU0M6
OkpTT2JqZWN0KiBvYmplY3QgPSBKU0NsYXNzOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpTQ2xh
c3M+KGdsb2JhbE9iamVjdC52bSgpLCBnbG9iYWxPYmplY3QpLCAmZ2xvYmFsT2JqZWN0KTsKLSAg
ICBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhzdGF0ZSwgKm9iamVjdCwgaW5pdGlh
bGl6ZUZ1bmN0aW9uKTsKLSAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsK
LX0KLQotaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBl
cldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciopCi17Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcio+KHdvcmxkLnZtKCkubV90eXBlZEFycmF5
Q29udHJvbGxlci5nZXQoKSktPndyYXBwZXJPd25lcigpOwotfQotCi1pbmxpbmUgdm9pZCogd3Jh
cHBlcktleShKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QpCi17Ci0gICAgcmV0dXJuIGRvbU9i
amVjdDsKLX0KLQotaW5saW5lIEpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYsIHZvaWQqKSB7IHJldHVybiBudWxscHRyOyB9Ci1pbmxpbmUgYm9vbCBz
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVj
dCosIEpTQzo6V2Vha0hhbmRsZU93bmVyKikgeyByZXR1cm4gZmFsc2U7IH0KLWlubGluZSBib29s
IGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01P
YmplY3QqKSB7IHJldHVybiBmYWxzZTsgfQotCi1pbmxpbmUgSlNET01PYmplY3QqIGdldElubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBk
b21PYmplY3QpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICByZXR1cm4gZG9tT2JqZWN0LT53cmFwcGVyKCk7Ci19Ci0KLWlubGluZSBK
U0M6OkpTQXJyYXlCdWZmZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogYnVmZmVyKQotewotICAgIGlmICghd29ybGQuaXNO
b3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZlci0+bV93
cmFwcGVyLmdldCgpOwotfQotCi1pbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTU9i
amVjdCogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcikKLXsKLSAg
ICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkb21P
YmplY3QtPnNldFdyYXBwZXIod3JhcHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdy
YXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpKU0Fy
cmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKQot
ewotICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGRvbU9iamVjdC0+bV93cmFwcGVyID0gSlNDOjpXZWFrPEpTQzo6SlNBcnJheUJ1ZmZlcj4od3Jh
cHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxp
bmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwg
U2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyKQotewotICAg
IGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRvbU9i
amVjdC0+Y2xlYXJXcmFwcGVyKHdyYXBwZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxp
bmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwg
SlNDOjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIp
Ci17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgd2Vha0NsZWFyKGRvbU9iamVjdC0+bV93cmFwcGVyLCB3cmFwcGVyKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2Jq
ZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzJiBk
b21PYmplY3QpCi17Ci0gICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNoZWRXcmFw
cGVyKHdvcmxkLCAmZG9tT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0
dXJuIHdvcmxkLm1fd3JhcHBlcnMuZ2V0KHdyYXBwZXJLZXkoJmRvbU9iamVjdCkpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUg
dm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9i
amVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQotewotICAgIEpTQzo6V2Vha0hhbmRsZU93bmVy
KiBvd25lciA9IHdyYXBwZXJPd25lcih3b3JsZCwgZG9tT2JqZWN0KTsKLSAgICBpZiAoc2V0SW5s
aW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyLCBvd25lcikpCi0gICAg
ICAgIHJldHVybjsKLSAgICB3ZWFrQWRkKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9t
T2JqZWN0KSwgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+KHdyYXBwZXIsIG93bmVyLCAmd29ybGQp
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFz
cz4gaW5saW5lIHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9N
Q2xhc3MqIGRvbU9iamVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQotewotICAgIGlmIChjbGVh
cklubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCi0gICAgICAg
IHJldHVybjsKLSAgICB3ZWFrUmVtb3ZlKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9t
T2JqZWN0KSwgd3JhcHBlcik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBl
bmFtZSBUPiBpbmxpbmUgYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFJlZjxUPiYmIGRvbU9iamVjdCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCi17Ci0gICAgdXNp
bmcgV3JhcHBlckNsYXNzID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERP
TUNsYXNzPjo6V3JhcHBlckNsYXNzOwotCi0gICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVyKGds
b2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0KSk7Ci0gICAgYXV0byogZG9tT2JqZWN0UHRy
ID0gZG9tT2JqZWN0LnB0cigpOwotICAgIGF1dG8qIHdyYXBwZXIgPSBXcmFwcGVyQ2xhc3M6OmNy
ZWF0ZShnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihnbG9iYWxPYmplY3QtPnZtKCksICpn
bG9iYWxPYmplY3QpLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoZG9tT2JqZWN0KSk7Ci0gICAgY2Fj
aGVXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0UHRyLCB3cmFwcGVyKTsK
LSAgICByZXR1cm4gd3JhcHBlcjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5
cGVuYW1lIFQ+IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
Zjwhc3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCi17Ci0gICAg
cmV0dXJuIGNyZWF0ZVdyYXBwZXI8RE9NQ2xhc3M+KGdsb2JhbE9iamVjdCwgc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PERPTUNsYXNzPihXVEZNb3ZlKGRvbU9iamVjdCkpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERPTUNsYXNzJiBkb21P
YmplY3QpCi17Ci0gICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2Jh
bE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0g
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgUmVmPERPTUNs
YXNzPihkb21PYmplY3QpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5l
IEpTQ2xhc3MmIGNhc3RUaGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQotewotICAgIGF1
dG8gdGhpc1ZhbHVlID0gc3RhdGUudGhpc1ZhbHVlKCk7Ci0gICAgYXV0byBjYXN0ZWRUaGlzID0g
anNEeW5hbWljRG93bmNhc3Q8SlNDbGFzcyo+KHN0YXRlLnZtKCksIHRoaXNWYWx1ZSk7Ci0gICAg
QVNTRVJUKGNhc3RlZFRoaXMpOwotICAgIHJldHVybiAqY2FzdGVkVGhpczsKLX0KLQotaW5saW5l
IGludDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBib29sJiBva2F5KQotewotICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051
bWJlcihleGVjKTsKLSAgICBva2F5ID0gc3RkOjppc2Zpbml0ZShudW1iZXIpOwotICAgIHJldHVy
biBKU0M6OnRvSW50MzIobnVtYmVyKTsKLX0KLQotLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3Nl
ZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2Vi
SURMIHNwZWMuCi1pbmxpbmUgSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0
YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpCi17Ci0gICAg
SlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0
KCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihl
eGVjLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIEpTQzo6
SlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwot
Ci0gICAgaWYgKGxlbmd0aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgdGhy
b3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLQotICAgIGxlbmd0aCA9IGxlbmd0aFZhbHVlLnRvVUludDMyKCZleGVjKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLQotICAgIHJldHVybiBvYmpl
Y3Q7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXImIGJ1ZmZl
cikKLXsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVj
dC0+d29ybGQoKSwgYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIC8vIFRo
ZSBKU0FycmF5QnVmZmVyOjpjcmVhdGUgZnVuY3Rpb24gd2lsbCByZWdpc3RlciB0aGUgd3JhcHBl
ciBpbiBmaW5pc2hDcmVhdGlvbi4KLSAgICByZXR1cm4gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVh
dGUoc3RhdGUtPnZtKCksIGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYnVmZmVy
LnNoYXJpbmdNb2RlKCkpLCAmYnVmZmVyKTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkFycmF5QnVmZmVyVmlldyYgdmlldykKLXsKLSAgICByZXR1cm4gdmlldy53cmFwKHN0
YXRlLCBnbG9iYWxPYmplY3QpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFy
cmF5QnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBK
U0M6OmpzTnVsbCgpOwotICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICpidWZm
ZXIpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3
KiB2aWV3KQotewotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7
Ci0gICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKnZpZXcpOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIHB0cikKLXsK
LSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+JiYgcHRy
KQotewotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0
b3I8VD4mIHZlY3RvcikKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpT
QXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iu
c2l6ZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCB2ZWN0b3JbaV0pKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpK
U1ZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mIHZl
Y3RvcikKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpTQXJyYXkqIGFy
cmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3Jb
aV0uZ2V0KCkpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1Zh
bHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBK
U0M6OlByaXZhdGVOYW1lJiBwcml2YXRlTmFtZSkKLXsKLSAgICByZXR1cm4gSlNDOjpTeW1ib2w6
OmNyZWF0ZShleGVjLT52bSgpLCBwcml2YXRlTmFtZS51aWQoKSk7Ci19Ci0KLWlubGluZSBKU0M6
OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9y
UmVzdWx0T2JqZWN0KCZzdGF0ZSwgdmFsdWUsIGZhbHNlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB0b0pTKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUpLCBmYWxzZSk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFs
dWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKLXsKLSAgICByZXR1cm4g
Y3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCBKU0M6OmpzVW5kZWZpbmVkKCksIHRy
dWUpOwotfQotCi1pbmxpbmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5
U2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17
Ci0gICAgYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0PEpTQzo6SlNBcnJheUJ1ZmZl
clZpZXcqPih2bSwgdmFsdWUpOwotICAgIGlmICghd3JhcHBlcikKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgcmV0dXJuIHdyYXBwZXItPnBvc3NpYmx5U2hhcmVkSW1wbCgpOwotfQotCi1p
bmxpbmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJW
aWV3KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byByZXN1bHQg
PSB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KHZtLCB2YWx1ZSk7Ci0gICAgaWYgKCFy
ZXN1bHQgfHwgcmVzdWx0LT5pc1NoYXJlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bv
c3NpYmx5U2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsg
cmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDhBZGFw
dG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3Nz
aWJseVNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFw
dG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3Nz
aWJseVNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFw
dG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3Nz
aWJseVNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFw
dG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+
IHRvUG9zc2libHlTaGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpVaW50OENsYW1wZWRBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpT
Qzo6VWludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiB2bSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVU
eXBlZFZpZXc8SlNDOjpVaW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRy
PEpTQzo6VWludDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRp
dmVUeXBlZFZpZXc8SlNDOjpVaW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVm
UHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJl
ZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxp
bmUgUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJs
eVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9
Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlND
OjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0
aXZlVHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQ
dHI8SlNDOjpJbnQxNkFycmF5PiB0b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQz
MkFycmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFk
YXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Vu
c2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNoYXJl
ZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0
b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNo
YXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJu
IEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQz
MkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9V
bnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0K
LWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXko
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVk
TmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGlu
ZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpW
TSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZl
VHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgSlNUPiBpbmxpbmUgVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRp
dmVBcnJheShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRo
cm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICB9Ci0KLSAgICBWZWN0b3I8UmVmPFQ+PiByZXN1bHQ7Ci0gICAgZm9yRWFjaEluSXRlcmFi
bGUoJnN0YXRlLCB2YWx1ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoanNWYWx1ZS5pbmhlcml0cyh2bSwg
SlNUOjppbmZvKCkpKSB7Ci0gICAgICAgICAgICBhdXRvKiBvYmplY3QgPSBKU1Q6OnRvV3JhcHBl
ZCh2bSwganNWYWx1ZSk7Ci0gICAgICAgICAgICBBU1NFUlQob2JqZWN0KTsKLSAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoKm9iamVjdCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhy
b3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoKnN0YXRlLCBzY29wZSk7Ci0gICAgfSk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIFN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6
OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUu
aXNTeW1ib2woKSk7Ci0gICAgcmV0dXJuIHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFt
ZS51aWQoKSA6IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7Ci19Ci0KLWlubGluZSBBdG9taWNT
dHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQotewotICAgIHJldHVybiBBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lLnVpZCgpID8g
cHJvcGVydHlOYW1lLnVpZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci19Ci0KLXRl
bXBsYXRlPEpTQzo6TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpT
Qzo6RW5jb2RlZEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5j
dGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVu
Z3RoLCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpLCBuYXRpdmVGdW5jdGlvbikpOwotfQotCi1B
TFdBWVNfSU5MSU5FIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCi17
Ci0gICAgaWYgKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBw
cm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChzdGF0ZSwgdGhyb3dTY29wZSwgV1RGTW92ZShleGNl
cHRpb24pKTsKLX0KLQotaW5saW5lIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25Pcjx2b2lk
PiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpCi0g
ICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFz
ZUV4Y2VwdGlvbigpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZh
bHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAg
ICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhj
ZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICByZXR1cm4gdG9KUygm
c3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQotewot
ICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFn
YXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkp
OwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRl
ZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0K
LQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tT
ZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBUJiBub2RlKQogewogICAgIHJl
dHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgJm5vZGUpID8gJm5vZGUgOiBudWxs
cHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDIxMTM1MykJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmNwcDoyMTEzNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMzQgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMSwgMjAxMywgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWlu
aWcgPHNhbUB3ZWJraXQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0
dCA8bWljaGFlbEA2OGsub3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorCisjaW5jbHVkZSAi
Q2FjaGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKKyNpbmNsdWRlICJET01Db25z
dHJ1Y3RvcldpdGhEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNs
dWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWFk
ZXJzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uSW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNl
RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01Q
cm9taXNlLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKKyNpbmNsdWRlICJKU0V4
Y2VwdGlvbkJhc2UuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgPGJ5
dGVjb2RlL0NvZGVCbG9jay5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2su
aD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+CisjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JIYW5kbGluZ1Njb3BlLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9FcnJvckluc3RhbmNlLmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KKyNpbmNs
dWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTRnVu
Y3Rpb24uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVEFUSUNfQVNTRVJU
X0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9NQ29uc3RydWN0b3JPYmplY3QpOworU1RBVElD
X0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yV2l0aERvY3Vt
ZW50KTsKKwordm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIHByb3Bl
cnR5TmFtZSkKK3sKKyAgICBjb21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFt
ZSk7Cit9CisKK0pTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgcykKK3sKKyAgICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOworICAgIHJldHVybiBqc093bmVkU3RyaW5nKGV4ZWMsIHMpOworfQorCitKU1ZhbHVl
IGpzU3RyaW5nT3JVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCit7
CisgICAgaWYgKHMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBzKTsKK30KKworSlNWYWx1ZSBqc1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVSTCYgdXJsKQoreworICAgIHJldHVybiBqc1N0cmlu
Z1dpdGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkpOworfQorCitKU1ZhbHVlIGpzU3RyaW5nT3JV
bmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICBpZiAodXJs
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4ganNT
dHJpbmdXaXRoQ2FjaGUoZXhlYywgdXJsLnN0cmluZygpKTsKK30KKworc3RhdGljIGlubGluZSBT
dHJpbmcgc3RyaW5nVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIFN0cmluZyYmIHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmluZy5jb250YWluc09u
bHlMYXRpbjEoKSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nOworfQorCitTdHJp
bmcgaWRlbnRpZmllclRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudGlmaWVyKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIHN0cmluZyA9IGlk
ZW50aWZpZXIuc3RyaW5nKCk7CisgICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwg
c2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK1N0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3Ry
aW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3Rh
dGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaGFz
VW5wYWlyZWRTdXJyb2dhdGUoU3RyaW5nVmlldyBzdHJpbmcpCit7CisgICAgLy8gRmFzdCBwYXRo
IGZvciA4LWJpdCBzdHJpbmdzOyB0aGV5IGNhbid0IGhhdmUgYW55IHN1cnJvZ2F0ZXMuCisgICAg
aWYgKHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoYXV0
byBjb2RlUG9pbnQgOiBzdHJpbmcuY29kZVBvaW50cygpKSB7CisgICAgICAgIGlmIChVX0lTX1NV
UlJPR0FURShjb2RlUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9VU1ZTdHJp
bmcoU3RyaW5nJiYgc3RyaW5nKQoreworICAgIC8vIEZhc3QgcGF0aCBmb3IgdGhlIGNhc2Ugd2hl
cmUgdGhlcmUgYXJlIG5vIHVucGFpcmVkIHN1cnJvZ2F0ZXMuCisgICAgaWYgKCFoYXNVbnBhaXJl
ZFN1cnJvZ2F0ZShzdHJpbmcpKQorICAgICAgICByZXR1cm4gc3RyaW5nOworCisgICAgLy8gU2xv
dyBwYXRoOiBodHRwOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1vYnRhaW4tdW5pY29k
ZQorICAgIC8vIFJlcGxhY2VzIHVucGFpcmVkIHN1cnJvZ2F0ZXMgd2l0aCB0aGUgcmVwbGFjZW1l
bnQgY2hhcmFjdGVyLgorICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNl
cnZlQ2FwYWNpdHkoc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBTdHJpbmdWaWV3IHZpZXcgeyBzdHJp
bmcgfTsKKyAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogdmlldy5jb2RlUG9pbnRzKCkpIHsKKyAg
ICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChjb2RlUG9pbnQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnRvU3Ry
aW5nKCk7Cit9CisKK1N0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRp
Zmllci5zdHJpbmcoKTsKKyAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJp
bmcpKTsKK30KKworU3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50
b1dURlN0cmluZygmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisKKyAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKK30KKwor
SlNWYWx1ZSBqc0RhdGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUpCit7CisgICAgcmV0
dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7Cit9CisKK2RvdWJsZSB2YWx1ZVRvRGF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzTnVt
YmVyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc051bWJlcigpOworICAgIGlmICghdmFsdWUu
aW5oZXJpdHMoZXhlYy0+dm0oKSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpKQorICAgICAgICByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odmFsdWUudG9PYmplY3QoZXhlYykpLT5pbnRlcm5h
bE51bWJlcigpOworfQorCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgZXhjZXB0aW9uVmFsdWUsIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQoreworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVh
ZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byogZXhjZXB0aW9uID0ganNEeW5hbWljRG93
bmNhc3Q8SlNDOjpFeGNlcHRpb24qPih2bSwgZXhjZXB0aW9uVmFsdWUpOworICAgIGlmICghZXhj
ZXB0aW9uKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IHZtLmxhc3RFeGNlcHRpb24oKTsKKyAgICAg
ICAgaWYgKCFleGNlcHRpb24pCisgICAgICAgICAgICBleGNlcHRpb24gPSBKU0M6OkV4Y2VwdGlv
bjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4Y2VwdGlvblZhbHVlLCBKU0M6OkV4Y2VwdGlvbjo6RG9O
b3RDYXB0dXJlU3RhY2spOworICAgIH0KKworICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNl
cHRpb24sIGNhY2hlZFNjcmlwdCk7Cit9CisKK1N0cmluZyByZXRyaWV2ZUVycm9yTWVzc2FnZShF
eGVjU3RhdGUmIHN0YXRlLCBWTSYgdm0sIEpTVmFsdWUgZXhjZXB0aW9uLCBDYXRjaFNjb3BlJiBj
YXRjaFNjb3BlKQoreworICAgIGlmIChhdXRvKiBleGNlcHRpb25CYXNlID0gdG9FeGNlcHRpb25C
YXNlKHZtLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gZXhjZXB0aW9uQmFzZS0+dG9TdHJp
bmcoKTsKKworICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJ
bnNwZWN0b3I6IFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbiBzaG91bGQgbm90IGV2YWx1YXRlIEph
dmFTY3JpcHQgaGFuZGxpbmcgZXhjZXB0aW9ucworICAgIC8vIElmIHRoaXMgaXMgYSBjdXN0b20g
ZXhjZXB0aW9uIG9iamVjdCwgY2FsbCB0b1N0cmluZyBvbiBpdCB0byB0cnkgYW5kIGdldCBhIG5p
Y2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZXhjZXB0aW9uLgorICAgIFN0cmluZyBl
cnJvck1lc3NhZ2U7CisgICAgaWYgKGF1dG8qIGVycm9yID0ganNEeW5hbWljRG93bmNhc3Q8RXJy
b3JJbnN0YW5jZSo+KHZtLCBleGNlcHRpb24pKQorICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJv
ci0+c2FuaXRpemVkVG9TdHJpbmcoJnN0YXRlKTsKKyAgICBlbHNlCisgICAgICAgIGVycm9yTWVz
c2FnZSA9IGV4Y2VwdGlvbi50b1dURlN0cmluZygmc3RhdGUpOworCisgICAgLy8gV2UgbmVlZCB0
byBjbGVhciBhbnkgbmV3IGV4Y2VwdGlvbiB0aGF0IG1heSBiZSB0aHJvd24gaW4gdGhlIHRvU3Ry
aW5nKCkgY2FsbCBhYm92ZS4KKyAgICAvLyByZXBvcnRFeGNlcHRpb24oKSBpcyBub3Qgc3VwcG9z
ZWQgdG8gYmUgbWFraW5nIG5ldyBleGNlcHRpb25zLgorICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKKyAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gZXJyb3JN
ZXNzYWdlOworfQorCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6
RXhjZXB0aW9uKiBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0LCBFeGNlcHRp
b25EZXRhaWxzKiBleGNlcHRpb25EZXRhaWxzKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgUkVMRUFT
RV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgaWYgKGlz
VGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbih2bSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoZXhlYy0+dm0oKSk7CisK
KyAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0
YWNrRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4Q2Fs
bFN0YWNrU2l6ZVRvQ2FwdHVyZSkpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
dm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7CisKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKTsKKyAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IGpzRHluYW1pY0Rvd25jYXN0
PEpTRE9NV2luZG93Kj4odm0sIGdsb2JhbE9iamVjdCkpIHsKKyAgICAgICAgaWYgKCF3aW5kb3ct
PndyYXBwZWQoKS5pc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpbnQgbGluZU51bWJlciA9IDA7CisgICAgaW50IGNvbHVtbk51
bWJlciA9IDA7CisgICAgU3RyaW5nIGV4Y2VwdGlvblNvdXJjZVVSTDsKKyAgICBpZiAoY29uc3Qg
U2NyaXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsU3RhY2stPmZpcnN0Tm9uTmF0aXZlQ2Fs
bEZyYW1lKCkpIHsKKyAgICAgICAgbGluZU51bWJlciA9IGNhbGxGcmFtZS0+bGluZU51bWJlcigp
OworICAgICAgICBjb2x1bW5OdW1iZXIgPSBjYWxsRnJhbWUtPmNvbHVtbk51bWJlcigpOworICAg
ICAgICBleGNlcHRpb25Tb3VyY2VVUkwgPSBjYWxsRnJhbWUtPnNvdXJjZVVSTCgpOworICAgIH0K
KworICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSByZXRyaWV2ZUVycm9yTWVzc2FnZSgqZXhlYywg
dm0sIGV4Y2VwdGlvbi0+dmFsdWUoKSwgc2NvcGUpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5yZXBvcnRFeGNlcHRpb24o
ZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGV4Y2VwdGlvblNvdXJjZVVS
TCwgZXhjZXB0aW9uLCBjYWxsU3RhY2stPnNpemUoKSA/IGNhbGxTdGFjayA6IG51bGxwdHIsIGNh
Y2hlZFNjcmlwdCk7CisKKyAgICBpZiAoZXhjZXB0aW9uRGV0YWlscykgeworICAgICAgICBleGNl
cHRpb25EZXRhaWxzLT5tZXNzYWdlID0gZXJyb3JNZXNzYWdlOworICAgICAgICBleGNlcHRpb25E
ZXRhaWxzLT5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAgICAgZXhjZXB0aW9uRGV0YWls
cy0+Y29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOworICAgICAgICBleGNlcHRpb25EZXRhaWxz
LT5zb3VyY2VVUkwgPSBleGNlcHRpb25Tb3VyY2VVUkw7CisgICAgfQorfQorCit2b2lkIHJlcG9y
dEN1cnJlbnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1
dG8qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7Cit9CisKK3N0YXRp
YyBKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNv
ZGUgZWMsIGNvbnN0IFN0cmluZyogbWVzc2FnZSA9IG51bGxwdHIpCit7CisgICAgaWYgKCFlYyB8
fCBlYyA9PSBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yKQorICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKworICAgIC8vIEZJWE1FOiBIYW5kbGUgb3RoZXIgV2ViSURMIGV4Y2VwdGlvbiB0eXBl
cy4KKyAgICBpZiAoZWMgPT0gVHlwZUVycm9yKSB7CisgICAgICAgIGlmICghbWVzc2FnZSB8fCBt
ZXNzYWdlLT5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4
ZWMpOworICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMsICptZXNzYWdlKTsKKyAg
ICB9CisKKyAgICBpZiAoZWMgPT0gUmFuZ2VFcnJvcikgeworICAgICAgICBpZiAoIW1lc3NhZ2Ug
fHwgbWVzc2FnZS0+aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJCYWQgdmFsdWUiKSk7CisgICAgICAgIHJldHVybiBjcmVh
dGVSYW5nZUVycm9yKGV4ZWMsICptZXNzYWdlKTsKKyAgICB9CisKKyAgICBpZiAoZWMgPT0gU3Rh
Y2tPdmVyZmxvd0Vycm9yKQorICAgICAgICByZXR1cm4gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9y
KGV4ZWMpOworCisgICAgLy8gRklYTUU6IEFsbCBjYWxsZXJzIHRvIGNyZWF0ZURPTUV4Y2VwdGlv
biBuZWVkIHRvIHBhc3MgaW4gdGhlIGNvcnJlY3QgZ2xvYmFsIG9iamVjdC4KKyAgICAvLyBGb3Ig
bm93LCB3ZSdyZSBnb2luZyB0byBhc3N1bWUgdGhlIGxleGljYWxHbG9iYWxPYmplY3QuIFdoaWNo
IGlzIHdyb25nIGluIGNhc2VzIGxpa2UgdGhpczoKKyAgICAvLyBmcmFtZXNbMF0uZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudChudWxsLCBudWxsKTsgLy8gdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGljaCBz
aG91bGQgaGF2ZSB0aGUgc3ViZnJhbWUncyBwcm90b3R5cGVzLgorICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4
ZWMpOworCisgICAgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKwor
ICAgIENTdHJpbmcgbWVzc2FnZUNTdHJpbmc7CisgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgIG1l
c3NhZ2VDU3RyaW5nID0gbWVzc2FnZS0+dXRmOCgpOworICAgIGlmIChtZXNzYWdlICYmICFtZXNz
YWdlLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gSXQgaXMgc2FmZSB0byBkbyB0aGlzIGJlY2F1
c2UgdGhlIGNoYXIqIGNvbnRlbnRzIG9mIHRoZSBDU3RyaW5nIGFyZSBjb3BpZWQgaW50byBhIG5l
dyBXVEY6OlN0cmluZyBiZWZvcmUgdGhlIENTdHJpbmcgaXMgZGVzdHJveWVkLgorICAgICAgICBk
ZXNjcmlwdGlvbi5kZXNjcmlwdGlvbiA9IG1lc3NhZ2VDU3RyaW5nLmRhdGEoKTsKKyAgICB9CisK
KyAgICBKU1ZhbHVlIGVycm9yT2JqZWN0OworICAgIHN3aXRjaCAoZGVzY3JpcHRpb24udHlwZSkg
eworICAgIGNhc2UgRE9NQ29yZUV4Y2VwdGlvblR5cGU6CisjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisgICAgY2FzZSBJREJEYXRhYmFzZUV4Y2VwdGlvblR5cGU6CisjZW5kaWYKKyAgICAg
ICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgRE9NQ29yZUV4Y2VwdGlv
bjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZUV4
Y2VwdGlvblR5cGU6CisgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIEZpbGVFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFNRTEV4Y2VwdGlvblR5cGU6CisgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIFNRTEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU1ZHRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJyb3JP
YmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHRXhjZXB0aW9uOjpjcmVhdGUoZGVz
Y3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYUGF0aEV4Y2VwdGlvblR5cGU6
CisgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFhQYXRoRXhj
ZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IAorICAgIEFTU0VSVChlcnJvck9iamVjdCk7CisgICAgYWRkRXJyb3JJbmZvKGV4ZWMsIGFzT2Jq
ZWN0KGVycm9yT2JqZWN0KSwgdHJ1ZSk7CisgICAgcmV0dXJuIGVycm9yT2JqZWN0OworfQorCitK
U1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUg
ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlRE9NRXhjZXB0
aW9uKGV4ZWMsIGVjLCAmbWVzc2FnZSk7Cit9CisKK0pTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4g
Y3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgZXhjZXB0aW9uLmNvZGUoKSwgZXhjZXB0aW9uLnJl
bGVhc2VNZXNzYWdlKCkpOworfQorCit2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRp
b24mJiBleGNlcHRpb24pCit7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsK
KyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlv
bihzdGF0ZSwgV1RGTW92ZShleGNlcHRpb24pKSk7Cit9CisKK2Jvb2wgaGFzSXRlcmF0b3JNZXRo
b2QoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgIENh
bGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlOworICAgIEpTVmFsdWUgYXBw
bHlNZXRob2QgPSBvYmplY3QtPmdldE1ldGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwg
dm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0
ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBmYWxzZSk7CisKKyAgICByZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5kZWZp
bmVkKCk7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJh
bWUoRXhlY1N0YXRlJiBzdGF0ZSwgRnJhbWUmIGZyYW1lLCBTdHJpbmcmIG1lc3NhZ2UpCit7Cisg
ICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKCZzdGF0ZSwg
JmZyYW1lLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBtZXNzYWdlID0gZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWlu
QWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9N
V2luZG93KEV4ZWNTdGF0ZSYgc3RhdGUsIERPTVdpbmRvdyYgZ2xvYmFsT2JqZWN0LCBTdHJpbmcm
IG1lc3NhZ2UpCit7CisgICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NU
b0RPTVdpbmRvdygmc3RhdGUsIGdsb2JhbE9iamVjdCwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9y
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgbWVzc2FnZSA9IGdsb2JhbE9iamVjdC5jcm9z
c0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUq
IGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFmcmFtZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+cHJpbnRFcnJv
ck1lc3NhZ2UobWVzc2FnZSk7Cit9CisKK1N0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJl
KEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvKQoreworICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0
LnN0cnVjdHVyZXMoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5n
ZXQoY2xhc3NJbmZvKS5nZXQoKTsKK30KKworU3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCit7CisgICAgYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5n
TWFya2luZyhnbG9iYWxPYmplY3Qudm0oKS5oZWFwLCBnbG9iYWxPYmplY3QuZ2NMb2NrKCkpOwor
ICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LnN0cnVjdHVy
ZXMobG9ja2VyKTsKKyAgICBBU1NFUlQoIXN0cnVjdHVyZXMuY29udGFpbnMoY2xhc3NJbmZvKSk7
CisgICAgcmV0dXJuIHN0cnVjdHVyZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4oZ2xvYmFsT2JqZWN0LnZtKCksICZnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJh
dG9yLT52YWx1ZS5nZXQoKTsKK30KKworc3RhdGljIGNvbnN0IGludDMyX3Qga01heEludDMyID0g
MHg3ZmZmZmZmZjsKK3N0YXRpYyBjb25zdCBpbnQzMl90IGtNaW5JbnQzMiA9IC1rTWF4SW50MzIg
LSAxOworc3RhdGljIGNvbnN0IHVpbnQzMl90IGtNYXhVSW50MzIgPSAweGZmZmZmZmZmVTsKK3N0
YXRpYyBjb25zdCBpbnQ2NF90IGtKU01heEludGVnZXIgPSAweDIwMDAwMDAwMDAwMDAwTEwgLSAx
OyAvLyAyXjUzIC0gMSwgbGFyZ2VzdCBpbnRlZ2VyIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBpbiBF
Q01BU2NyaXB0LgorCitzdGF0aWMgU3RyaW5nIHJhbmdlRXJyb3JTdHJpbmcoZG91YmxlIHZhbHVl
LCBkb3VibGUgbWluLCBkb3VibGUgbWF4KQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJWYWx1
ZSAiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdCh2YWx1ZSksICIgaXMgb3V0c2lk
ZSB0aGUgcmFuZ2UgWyIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1pbiksICIs
ICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1heCksICJdIik7Cit9CisKK3N0
YXRpYyBkb3VibGUgZW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB4LCBkb3Vi
bGUgbWluaW11bSwgZG91YmxlIG1heGltdW0pCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoc3Rk
Ojppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgeCA9IHRydW5jKHgpOworICAgIGlmICh4IDwgbWlu
aW11bSB8fCB4ID4gbWF4aW11bSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlLCByYW5nZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIHJldHVybiB4OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K3N0cnVjdCBJbnRUeXBlTGltaXRzIHsKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlw
ZUxpbWl0czxpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgaW50OF90IG1pblZhbHVlID0gLTEy
ODsKKyAgICBzdGF0aWMgY29uc3QgaW50OF90IG1heFZhbHVlID0gMTI3OworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDI1NjsgLy8gMl44Cit9OworCit0ZW1wbGF0
ZSA8Pgorc3RydWN0IEludFR5cGVMaW1pdHM8dWludDhfdD4geworICAgIHN0YXRpYyBjb25zdCB1
aW50OF90IG1heFZhbHVlID0gMjU1OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJP
ZlZhbHVlcyA9IDI1NjsgLy8gMl44Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVM
aW1pdHM8aW50MTZfdD4geworICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtaW5WYWx1ZSA9IC0zMjc2
ODsKKyAgICBzdGF0aWMgY29uc3Qgc2hvcnQgbWF4VmFsdWUgPSAzMjc2NzsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgorfTsKKwordGVt
cGxhdGUgPD4KK3N0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQxNl90PiB7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHNob3J0IG1heFZhbHVlID0gNjU1MzU7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG51bWJlck9mVmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKK307CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorc3RhdGljIGlubGluZSBUIHRvU21hbGxlckludChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zaWduZWQ8
VD46OnZhbHVlICYmIHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUg
dXNlZCBmb3Igc2lnbmVkIGludGVncmFsIHR5cGVzIik7CisKKyAgICB0eXBlZGVmIEludFR5cGVM
aW1pdHM8VD4gTGltaXRzVHJhaXQ7CisgICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBh
bHJlYWR5IGEgMzItYml0IHNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KKyAgICBp
ZiAodmFsdWUuaXNJbnQzMigpKSB7CisgICAgICAgIGludDMyX3QgZCA9IHZhbHVlLmFzSW50MzIo
KTsKKyAgICAgICAgaWYgKGQgPj0gTGltaXRzVHJhaXQ6Om1pblZhbHVlICYmIGQgPD0gTGltaXRz
VHJhaXQ6Om1heFZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwor
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1w
OgorICAgICAgICAgICAgcmV0dXJuIGQgPCBMaW1pdHNUcmFpdDo6bWluVmFsdWUgPyBMaW1pdHNU
cmFpdDo6bWluVmFsdWUgOiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7CisgICAgICAgIH0KKyAgICAg
ICAgZCAlPSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXM7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUPihkID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8gZCAtIExpbWl0c1RyYWl0Ojpu
dW1iZXJPZlZhbHVlcyA6IGQpOworICAgIH0KKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1i
ZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKworICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgIHJldHVybiBlbmZvcmNlUmFu
Z2Uoc3RhdGUsIHgsIExpbWl0c1RyYWl0OjptaW5WYWx1ZSwgTGltaXRzVHJhaXQ6Om1heFZhbHVl
KTsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAg
ICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7CisgICAgfQorCisg
ICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICB4ID0geCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgp
KTsKKyAgICB4ID0gZm1vZCh4LCBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMpOworCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KHggPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyB4IC0gTGlt
aXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzIDogeCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
Pgorc3RhdGljIGlubGluZSBUIHRvU21hbGxlclVJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZh
bHVlICYmIHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBm
b3IgdW5zaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKKworICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0
czxUPiBMaW1pdHNUcmFpdDsKKyAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVh
ZHkgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCisgICAgaWYg
KHZhbHVlLmlzVUludDMyKCkpIHsKKyAgICAgICAgdWludDMyX3QgZCA9IHZhbHVlLmFzVUludDMy
KCk7CisgICAgICAgIGlmIChkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAg
ICAgICByZXR1cm4gTGltaXRzVHJhaXQ6Om1heFZhbHVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIDApOworCisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
KyAgICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwgTGltaXRzVHJhaXQ6Om1h
eFZhbHVlKTsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6
CisgICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7CisgICAg
fQorCisgICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICB4ID0geCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihm
YWJzKHgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZm1vZCh4LCBMaW1pdHNUcmFpdDo6
bnVtYmVyT2ZWYWx1ZXMpKTsKK30KKworaW50OF90IHRvSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlcklu
dDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2UpOworfQorCit1aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50
PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2UpOworfQorCitpbnQ4X3QgdG9JbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90Pihz
dGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQor
Cit1aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKworLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvV2ViSURMLyNlcy1ieXRlCitpbnQ4X3QgdG9JbnQ4KEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0
YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQor
CisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLW9jdGV0Cit1aW50OF90IHRvVUlu
dDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFs
bGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKTsKK30KKworaW50MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQx
Nl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlKTsKK30KKwordWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZf
dD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZSk7Cit9CisKK2ludDE2X3QgdG9JbnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQorCit1aW50MTZf
dCB0b1VJbnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
cmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1dlYklETC8jZXMtc2hvcnQKK2ludDE2X3QgdG9JbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0
dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtc2hvcnQKK3VpbnQxNl90IHRv
VUludDE2KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRv
U21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwv
I2VzLWxvbmcKK2ludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkK
KyAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAg
ICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBrTWluSW50MzIsIGtNYXhJbnQzMik7Cit9
CisKK2ludDMyX3QgdG9JbnQzMkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50
MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1
cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPGludDMyX3Q+KHgpOworfQorCit1aW50MzJf
dCB0b1VJbnQzMkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwor
CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6
OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88dWludDMyX3Q+KHgpOworfQorCisvLyBodHRwOi8vd3d3
LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmcKK3VpbnQzMl90IHRvVUludDMyRW5m
b3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUlu
dDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0
ZSwgeCwgMCwga01heFVJbnQzMik7Cit9CisKK2ludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgLWtKU01h
eEludGVnZXIsIGtKU01heEludGVnZXIpOworfQorCit1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VS
YW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwg
MCwga0pTTWF4SW50ZWdlcik7Cit9CisKK2ludDY0X3QgdG9JbnQ2NENsYW1wKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8
aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+KHgsIC1rSlNNYXhJbnRl
Z2VyKSwga0pTTWF4SW50ZWdlcikpOworfQorCit1aW50NjRfdCB0b1VJbnQ2NENsYW1wKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVl
LnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAwKSwg
a0pTTWF4SW50ZWdlcikpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2Vz
LWxvbmctbG9uZworaW50NjRfdCB0b0ludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworCisgICAgLy8g
TWFwIE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1
bG8gMl42NC4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbjsKKyAgICBkb3VibGVUb0ludGVnZXIo
eCwgbik7CisgICAgcmV0dXJuIG47Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklE
TC8jZXMtdW5zaWduZWQtbG9uZy1sb25nCit1aW50NjRfdCB0b1VJbnQ2NChFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0
YXRlKTsKKworICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZp
bml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG47CisgICAg
ZG91YmxlVG9JbnRlZ2VyKHgsIG4pOworICAgIHJldHVybiBuOworfQorCitjbGFzcyBHZXRDYWxs
ZXJHbG9iYWxPYmplY3RGdW5jdG9yIHsKK3B1YmxpYzoKKyAgICBHZXRDYWxsZXJHbG9iYWxPYmpl
Y3RGdW5jdG9yKCkgPSBkZWZhdWx0OworCisgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0
b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1f
aGFzU2tpcHBlZEZpcnN0RnJhbWUpIHsKKyAgICAgICAgICAgIG1faGFzU2tpcHBlZEZpcnN0RnJh
bWUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoYXV0byogY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJs
b2NrKCkpCisgICAgICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHZpc2l0b3ItPmNhbGxl
ZSgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYWxsZWUgaXMgbm90IGFuIG9iamVjdCBpZiB0
aGUgY2FsbGVyIGlzIFdlYiBBc3NlbWJseS4KKyAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hh
dCB0byBkbyBoZXJlLiBXZSBjYW4gcHJvYmFibHkgZ2V0IHRoZSBnbG9iYWwgb2JqZWN0CisgICAg
ICAgICAgICAvLyBmcm9tIHRoZSB0b3AtbW9zdCBXYXNtIEluc3RhbmNlLiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzIxCisgICAgICAgICAgICBpZiAodmlzaXRv
ci0+Y2FsbGVlKCktPmlzT2JqZWN0KCkpCisgICAgICAgICAgICAgICAgbV9nbG9iYWxPYmplY3Qg
PSBqc0Nhc3Q8SlNPYmplY3QqPih2aXNpdG9yLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CisgICAgfQorCisg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFs
T2JqZWN0OyB9CisKK3ByaXZhdGU6CisgICAgbXV0YWJsZSBib29sIG1faGFzU2tpcHBlZEZpcnN0
RnJhbWUgeyBmYWxzZSB9OworICAgIG11dGFibGUgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2Jq
ZWN0IHsgbnVsbHB0ciB9OworfTsKKworRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coRXhlY1N0
YXRlKiBleGVjKQoreworICAgIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgaXRlcjsKKyAg
ICBleGVjLT5pdGVyYXRlKGl0ZXIpOworICAgIHJldHVybiBpdGVyLmdsb2JhbE9iamVjdCgpID8g
YXNKU0RPTVdpbmRvdyhpdGVyLmdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpIDogZmlyc3RET01X
aW5kb3coZXhlYyk7Cit9CisKK0RPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLT53cmFwcGVkKCk7Cit9CisKK0RPTVdpbmRvdyYgZmlyc3RET01XaW5kb3coRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKSktPndyYXBwZWQoKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGNhbkFjY2Vz
c0RvY3VtZW50KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRG9jdW1lbnQqIHRhcmdldERvY3VtZW50
LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCit7CisgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgaWYgKCF0YXJnZXREb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgRE9NV2luZG93JiBhY3RpdmUgPSBhY3RpdmVET01XaW5kb3coc3RhdGUpOworCisgICAgaWYg
KGFjdGl2ZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLmNhbkFjY2Vzcyh0YXJnZXREb2N1
bWVudC0+c2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3dp
dGNoIChyZXBvcnRpbmdPcHRpb24pIHsKKyAgICBjYXNlIFRocm93U2VjdXJpdHlFcnJvcjoKKyAg
ICAgICAgdGhyb3dTZWN1cml0eUVycm9yKCpzdGF0ZSwgc2NvcGUsIHRhcmdldERvY3VtZW50LT5k
b21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTG9nU2VjdXJpdHlFcnJvcjoKKyAgICAgICAgcHJpbnRFcnJv
ck1lc3NhZ2VGb3JGcmFtZSh0YXJnZXREb2N1bWVudC0+ZnJhbWUoKSwgdGFyZ2V0RG9jdW1lbnQt
PmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3I6CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCaW5kaW5nU2Vj
dXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBET01XaW5kb3cmIHRhcmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0
aW9uKQoreworICAgIHJldHVybiBjYW5BY2Nlc3NEb2N1bWVudChzdGF0ZSwgdGFyZ2V0LmRvY3Vt
ZW50KCksIHJlcG9ydGluZ09wdGlvbik7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBGcmFtZSogdGFyZ2V0
LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCit7CisgICAgcmV0dXJu
IHRhcmdldCAmJiBjYW5BY2Nlc3NEb2N1bWVudChzdGF0ZSwgdGFyZ2V0LT5kb2N1bWVudCgpLCBy
ZXBvcnRpbmdPcHRpb24pOworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb05vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBOb2RlKiB0YXJnZXQpCit7CisgICAg
cmV0dXJuICF0YXJnZXQgfHwgY2FuQWNjZXNzRG9jdW1lbnQoJnN0YXRlLCAmdGFyZ2V0LT5kb2N1
bWVudCgpLCBMb2dTZWN1cml0eUVycm9yKTsKK30KKyAgICAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1
ZSB0aHJvd1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGVycm9yTWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lk
IGFwcGVuZEFyZ3VtZW50TXVzdEJlKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIHVuc2lnbmVkIGFy
Z3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiQXJndW1lbnQgIik7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoYXJndW1lbnRJ
bmRleCArIDEpOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICgnIik7CisgICAgYnVpbGRl
ci5hcHBlbmQoYXJndW1lbnROYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIicpIHRv
ICIpOworICAgIGlmICghZnVuY3Rpb25OYW1lKSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgidGhlICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChpbnRlcmZhY2VOYW1lKTsKKyAg
ICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgY29uc3RydWN0b3IiKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBidWlsZGVyLmFwcGVuZChpbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJy4nKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZnVuY3Rpb25OYW1lKTsKKyAg
ICB9CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgbXVzdCBiZSAiKTsKK30KKworSlNDOjpF
bmNvZGVkSlNWYWx1ZSByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKQoreworICAgIGF1dG8mIGNvbnRleHQgPSAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgIGNvbnRleHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VM
ZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJv
cGVydHkgJyIsIGF0dHJpYnV0ZU5hbWUsICInIG9uIGEgbm9uLSIsIGludGVyZmFjZU5hbWUsICIg
b2JqZWN0LiIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
fQorICAgIAordm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKQoreworICAgIGF1dG8mIGNvbnRleHQgPSAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgIGNvbnRleHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VM
ZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBzZXQgcHJvcGVy
dHkgJyIsIGF0dHJpYnV0ZU5hbWUsICInIG9uIGEgbm9uLSIsIGludGVyZmFjZU5hbWUsICIgb2Jq
ZWN0LiIpKTsKK30KKwordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4
Y2VwdGlvbigpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01F
eGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUikpOworfQorCit2b2lkIHRocm93Tm90
U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkpOworICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOworICAgIHRocm93RXhjZXB0
aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JU
RURfRVJSLCAmbWVzc2FnZVN0cmluZykpOworfQorCit2b2lkIHRocm93SW52YWxpZFN0YXRlRXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBj
aGFyKiBtZXNzYWdlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIFN0
cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElOVkFMSURfU1RBVEVfRVJSLCAmbWVz
c2FnZVN0cmluZykpOworfQorCit2b2lkIHRocm93U2VjdXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigm
c3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTRUNVUklUWV9FUlIsIG1l
c3NhZ2UpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51
bUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5z
aWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3Qg
Y2hhciogZXhwZWN0ZWRWYWx1ZXMpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAg
IGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFt
ZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOworICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgib25lIG9mOiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFZhbHVl
cyk7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50
b1N0cmluZygpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJl
RnVuY3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVy
LCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFt
ZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJhIGZ1bmN0aW9uIik7CisgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKK30K
KworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRl
eCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFj
ZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBl
KQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBhcHBlbmRBcmd1bWVudE11c3RC
ZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNl
TmFtZSwgZnVuY3Rpb25OYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImFuIGluc3Rh
bmNlIG9mICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVHlwZSk7CisgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKK30K
Kwordm9pZCB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlLCBBU0NJSUxpdGVyYWwoIkludmFsaWQgQXJyYXkgZWxlbWVudCB0eXBlIikpOworfQorCit2
b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQoreworICAgIHRocm93VHlw
ZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcu
JywgYXR0cmlidXRlTmFtZSwgIiBhdHRyaWJ1dGUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiLCBl
eHBlY3RlZFR5cGUpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1JlcXVpcmVkTWVt
YmVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSwgY29uc3QgY2hhciogbWVtYmVyTmFtZSwgY29uc3QgY2hhciogZGljdGlvbmFyeU5hbWUsIGNv
bnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJNZW1iZXIgIik7CisgICAgYnVpbGRlci5hcHBlbmQo
ZGljdGlvbmFyeU5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7CisgICAgYnVpbGRlci5h
cHBlbmQobWVtYmVyTmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgaXMgcmVxdWly
ZWQgYW5kIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIik7CisgICAgYnVpbGRlci5hcHBlbmQoZXhw
ZWN0ZWRUeXBlKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBi
dWlsZGVyLnRvU3RyaW5nKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93Q29uc3Ry
dWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUpCit7CisgICAgcmV0dXJuIHRocm93Vk1FcnJvcigmc3RhdGUsIHNjb3BlLCBjcmVhdGVSZWZl
cmVuY2VFcnJvcigmc3RhdGUsIG1ha2VTdHJpbmcoaW50ZXJmYWNlTmFtZSwgIiBjb25zdHJ1Y3Rv
ciBhc3NvY2lhdGVkIGV4ZWN1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIikpKTsKK30KKwor
dm9pZCB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiVmFsdWUgaXMgbm90IGEgc2VxdWVuY2UiKSk7Cit9CisKK3ZvaWQgdGhyb3dO
b25GaW5pdGVUeXBlRXJyb3IoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlRo
ZSBwcm92aWRlZCB2YWx1ZSBpcyBub24tZmluaXRlIikpOworfQorCitTdHJpbmcgbWFrZUdldHRl
clR5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFj
ZU5hbWUsICcuJywgYXR0cmlidXRlTmFtZSwgIiBnZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBp
bnN0YW5jZXMgb2YgIiwgaW50ZXJmYWNlTmFtZSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKQoreworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIG1h
a2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGF0dHJpYnV0ZU5hbWUpKTsK
K30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlz
ZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFj
ZU5hbWUsIGF0dHJpYnV0ZU5hbWUpKTsKK30KKworYm9vbCB0aHJvd1NldHRlclR5cGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIq
IGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgdGhyb3dU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwg
Jy4nLCBhdHRyaWJ1dGVOYW1lLCAiIHNldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNl
cyBvZiAiLCBpbnRlcmZhY2VOYW1lKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcg
bWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiQ2FuIG9ubHkg
Y2FsbCAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGZ1bmN0aW9uTmFtZSwgIiBvbiBpbnN0YW5jZXMg
b2YgIiwgaW50ZXJmYWNlTmFtZSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3Nh
Z2UoaW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFs
dWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKERlZmVycmVkUHJvbWlzZSYgcHJvbWlz
ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKK3sK
KyAgICBwcm9taXNlLnJlamVjdChUeXBlRXJyb3IsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShp
bnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0
aFRoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZh
Y2VOYW1lLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lKQoreworICAgIHJldHVybiBjcmVhdGVSZWpl
Y3RlZFByb21pc2VXaXRoVHlwZUVycm9yKHN0YXRlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2Uo
aW50ZXJmYWNlTmFtZSwgbWV0aG9kTmFtZSkpOworfQorCit2b2lkIGNhbGxGdW5jdGlvbldpdGhD
dXJyZW50QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCYgdGhp
c09iamVjdCwgSlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBKU0M6OkNhbGxEYXRh
IGNhbGxEYXRhOworICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENhbGxEYXRh
KCZmdW5jdGlvbiwgY2FsbERhdGEpOworICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6
Tm9uZSk7CisKKyAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgIEpT
Qzo6Y2FsbCgmc3RhdGUsICZmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmdGhpc09iamVj
dCwgYXJndW1lbnRzKTsKK30KKwordm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PERPTUNvbnN0cnVjdG9ySlNCdWls
dGluT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVuY3Rpb24p
OworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsVGhyb3dUeXBl
RXJyb3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIG9w
ZXJhdG9yIikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworfQorCitD
YWxsVHlwZSBET01Db25zdHJ1Y3Rvck9iamVjdDo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERh
dGEmIGNhbGxEYXRhKQoreworICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxUaHJv
d1R5cGVFcnJvcjsKKyAgICByZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7Cit9CisKK3ZvaWQgdGhyb3dE
T01TeW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRp
b24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU1lOVEFYX0VSUikp
OworfQorCit2b2lkIHRocm93RGF0YUNsb25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigm
c3RhdGUsIERBVEFfQ0xPTkVfRVJSKSk7Cit9CisKK3ZvaWQgdGhyb3dJbmRleFNpemVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5ERVhfU0laRV9FUlIpKTsKK30KKwordm9p
ZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0
aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBU
WVBFX01JU01BVENIX0VSUikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3Bw
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMTEzNTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjAsOTU5ICsyMCwxNSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLQotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2lu
Y2x1ZGUgIkNvbW1vblZNLmgiCi0jaW5jbHVkZSAiRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURl
c2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uSGVhZGVycy5oIgotI2luY2x1ZGUgIkV4
Y2VwdGlvbkludGVyZmFjZXMuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxQ
YXJzZXJJZGlvbXMuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1
ZGUgIkpTRE9NQ29udmVydC5oIgotI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgotI2luY2x1ZGUg
IkpTRE9NV2luZG93Q3VzdG9tLmgiCi0jaW5jbHVkZSAiSlNFeGNlcHRpb25CYXNlLmgiCi0jaW5j
bHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlIDxieXRlY29kZS9Db2RlQmxvY2suaD4K
LSNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+Ci0jaW5jbHVkZSA8aW5zcGVj
dG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4KLSNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0
YW5jZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vy
cm9ySGFuZGxpbmdTY29wZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FeGNlcHRp
b25IZWxwZXJzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8
c3RkYXJnLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdW5p
Y29kZS9DaGFyYWN0ZXJOYW1lcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNU
QVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3Rvck9iamVj
dCk7CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9NQ29uc3RydWN0
b3JXaXRoRG9jdW1lbnQpOwotCi12b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0
cmluZyYgcHJvcGVydHlOYW1lKQotewotICAgIGNvbW1vblZNKCkuYWRkSW1wdXJlUHJvcGVydHko
cHJvcGVydHlOYW1lKTsKLX0KLQotSlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQotewotICAgIGlmIChzLmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm4ganNOdWxsKCk7Ci0gICAgcmV0dXJuIGpzT3duZWRTdHJpbmcoZXhlYywgcyk7Ci19
Ci0KLUpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0
cmluZyYgcykKLXsKLSAgICBpZiAocy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHMpOwotfQotCi1KU1Zh
bHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgcmV0
dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Ci19Ci0KLUpTVmFsdWUg
anNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVSTCYgdXJsKQotewot
ICAgIGlmICh1cmwuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkpOwotfQotCi1zdGF0
aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSwgU3RyaW5nJiYgc3RyaW5nKQotewotICAgIGlmICghc3RyaW5n
LmNvbnRhaW5zT25seUxhdGluMSgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiBzdHJpbmc7
Ci19Ci0KLVN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBTdHJpbmcg
c3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmcoKTsKLSAgICByZXR1cm4gc3RyaW5nVG9CeXRlU3Ry
aW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotU3RyaW5nIHZhbHVlVG9C
eXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0KLSAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgcmV0dXJuIHN0cmluZ1RvQnl0
ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgYm9vbCBoYXNVbnBhaXJlZFN1cnJvZ2F0ZShTdHJpbmdWaWV3IHN0cmluZykKLXsKLSAgICAv
LyBGYXN0IHBhdGggZm9yIDgtYml0IHN0cmluZ3M7IHRoZXkgY2FuJ3QgaGF2ZSBhbnkgc3Vycm9n
YXRlcy4KLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsKLSAgICAgICAg
aWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyBzdHJp
bmdUb1VTVlN0cmluZyhTdHJpbmcmJiBzdHJpbmcpCi17Ci0gICAgLy8gRmFzdCBwYXRoIGZvciB0
aGUgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbm8gdW5wYWlyZWQgc3Vycm9nYXRlcy4KLSAgICBpZiAo
IWhhc1VucGFpcmVkU3Vycm9nYXRlKHN0cmluZykpCi0gICAgICAgIHJldHVybiBzdHJpbmc7Ci0K
LSAgICAvLyBTbG93IHBhdGg6IGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLW9i
dGFpbi11bmljb2RlCi0gICAgLy8gUmVwbGFjZXMgdW5wYWlyZWQgc3Vycm9nYXRlcyB3aXRoIHRo
ZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCi0gICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0gICAg
cmVzdWx0LnJlc2VydmVDYXBhY2l0eShzdHJpbmcubGVuZ3RoKCkpOwotICAgIFN0cmluZ1ZpZXcg
dmlldyB7IHN0cmluZyB9OwotICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiB2aWV3LmNvZGVQb2lu
dHMoKSkgewotICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKLSAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVQb2ludCk7Ci0gICAgfQotICAgIHJldHVybiBy
ZXN1bHQudG9TdHJpbmcoKTsKLX0KLQotU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmluZyhFeGVj
U3RhdGUmLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotewotICAgIFN0cmluZyBzdHJp
bmcgPSBpZGVudGlmaWVyLnN0cmluZygpOwotICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhX
VEZNb3ZlKHN0cmluZykpOwotfQotCi1TdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgU3RyaW5nIHN0cmlu
ZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKLQotICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZNb3ZlKHN0cmlu
ZykpOwotfQotCi1KU1ZhbHVlIGpzRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1ZSkK
LXsKLSAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKLX0KLQotZG91Ymxl
IHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAo
dmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzTnVtYmVyKCk7Ci0gICAg
aWYgKCF2YWx1ZS5pbmhlcml0cyhleGVjLT52bSgpLCBEYXRlSW5zdGFuY2U6OmluZm8oKSkpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50b09iamVjdChleGVj
KSktPmludGVybmFsTnVtYmVyKCk7Ci19Ci0KLXZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3Jp
cHQpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bS5j
dXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBhdXRvKiBleGNlcHRpb24gPSBq
c0R5bmFtaWNEb3duY2FzdDxKU0M6OkV4Y2VwdGlvbio+KHZtLCBleGNlcHRpb25WYWx1ZSk7Ci0g
ICAgaWYgKCFleGNlcHRpb24pIHsKLSAgICAgICAgZXhjZXB0aW9uID0gdm0ubGFzdEV4Y2VwdGlv
bigpOwotICAgICAgICBpZiAoIWV4Y2VwdGlvbikKLSAgICAgICAgICAgIGV4Y2VwdGlvbiA9IEpT
Qzo6RXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhjZXB0aW9uVmFsdWUsIEpTQzo6RXhj
ZXB0aW9uOjpEb05vdENhcHR1cmVTdGFjayk7Ci0gICAgfQotCi0gICAgcmVwb3J0RXhjZXB0aW9u
KGV4ZWMsIGV4Y2VwdGlvbiwgY2FjaGVkU2NyaXB0KTsKLX0KLQotU3RyaW5nIHJldHJpZXZlRXJy
b3JNZXNzYWdlKEV4ZWNTdGF0ZSYgc3RhdGUsIFZNJiB2bSwgSlNWYWx1ZSBleGNlcHRpb24sIENh
dGNoU2NvcGUmIGNhdGNoU2NvcGUpCi17Ci0gICAgaWYgKGF1dG8qIGV4Y2VwdGlvbkJhc2UgPSB0
b0V4Y2VwdGlvbkJhc2Uodm0sIGV4Y2VwdGlvbikpCi0gICAgICAgIHJldHVybiBleGNlcHRpb25C
YXNlLT50b1N0cmluZygpOwotCi0gICAgLy8gRklYTUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzEx
NTA4Nz4gV2ViIEluc3BlY3RvcjogV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uIHNob3VsZCBub3Qg
ZXZhbHVhdGUgSmF2YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCi0gICAgLy8gSWYgdGhpcyBp
cyBhIGN1c3RvbSBleGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0IHRvIHRyeSBh
bmQgZ2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGNlcHRpb24uCi0g
ICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoYXV0byogZXJyb3IgPSBqc0R5bmFtaWNE
b3duY2FzdDxFcnJvckluc3RhbmNlKj4odm0sIGV4Y2VwdGlvbikpCi0gICAgICAgIGVycm9yTWVz
c2FnZSA9IGVycm9yLT5zYW5pdGl6ZWRUb1N0cmluZygmc3RhdGUpOwotICAgIGVsc2UKLSAgICAg
ICAgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0KLSAgICAv
LyBXZSBuZWVkIHRvIGNsZWFyIGFueSBuZXcgZXhjZXB0aW9uIHRoYXQgbWF5IGJlIHRocm93biBp
biB0aGUgdG9TdHJpbmcoKSBjYWxsIGFib3ZlLgotICAgIC8vIHJlcG9ydEV4Y2VwdGlvbigpIGlz
IG5vdCBzdXBwb3NlZCB0byBiZSBtYWtpbmcgbmV3IGV4Y2VwdGlvbnMuCi0gICAgY2F0Y2hTY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOwotICAgIHJl
dHVybiBlcnJvck1lc3NhZ2U7Ci19Ci0KLXZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3Jp
cHQsIEV4Y2VwdGlvbkRldGFpbHMqIGV4Y2VwdGlvbkRldGFpbHMpCi17Ci0gICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0K
LSAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsK
LSAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLCBleGNlcHRpb24pKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZShleGVj
LT52bSgpKTsKLQotICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVhdGVT
Y3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgU2NyaXB0Q2FsbFN0
YWNrOjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKSk7Ci0gICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKLSAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKLQotICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpOwotICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0ganNEeW5h
bWljRG93bmNhc3Q8SlNET01XaW5kb3cqPih2bSwgZ2xvYmFsT2JqZWN0KSkgewotICAgICAgICBp
ZiAoIXdpbmRvdy0+d3JhcHBlZCgpLmlzQ3VycmVudGx5RGlzcGxheWVkSW5GcmFtZSgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBsaW5lTnVtYmVyID0gMDsKLSAgICBp
bnQgY29sdW1uTnVtYmVyID0gMDsKLSAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJMOwotICAg
IGlmIChjb25zdCBTY3JpcHRDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxTdGFjay0+Zmlyc3RO
b25OYXRpdmVDYWxsRnJhbWUoKSkgewotICAgICAgICBsaW5lTnVtYmVyID0gY2FsbEZyYW1lLT5s
aW5lTnVtYmVyKCk7Ci0gICAgICAgIGNvbHVtbk51bWJlciA9IGNhbGxGcmFtZS0+Y29sdW1uTnVt
YmVyKCk7Ci0gICAgICAgIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGNhbGxGcmFtZS0+c291cmNlVVJM
KCk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHJldHJpZXZlRXJyb3JNZXNz
YWdlKCpleGVjLCB2bSwgZXhjZXB0aW9uLT52YWx1ZSgpLCBzY29wZSk7Ci0gICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdsb2JhbE9iamVjdC0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnJlcG9y
dEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgZXhjZXB0
aW9uU291cmNlVVJMLCBleGNlcHRpb24sIGNhbGxTdGFjay0+c2l6ZSgpID8gY2FsbFN0YWNrIDog
bnVsbHB0ciwgY2FjaGVkU2NyaXB0KTsKLQotICAgIGlmIChleGNlcHRpb25EZXRhaWxzKSB7Ci0g
ICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPm1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7Ci0gICAgICAg
IGV4Y2VwdGlvbkRldGFpbHMtPmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICBleGNl
cHRpb25EZXRhaWxzLT5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7Ci0gICAgICAgIGV4Y2Vw
dGlvbkRldGFpbHMtPnNvdXJjZVVSTCA9IGV4Y2VwdGlvblNvdXJjZVVSTDsKLSAgICB9Ci19Ci0K
LXZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7Ci0gICAgYXV0byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7Ci0gICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKLSAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsK
LX0KLQotc3RhdGljIEpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
RXhjZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nKiBtZXNzYWdlID0gbnVsbHB0cikKLXsKLSAg
ICBpZiAoIWVjIHx8IGVjID09IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IpCi0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotCi0gICAgLy8gRklYTUU6IEhhbmRsZSBvdGhlciBXZWJJREwgZXhj
ZXB0aW9uIHR5cGVzLgotICAgIGlmIChlYyA9PSBUeXBlRXJyb3IpIHsKLSAgICAgICAgaWYgKCFt
ZXNzYWdlIHx8IG1lc3NhZ2UtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVU
eXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZXhlYywgKm1l
c3NhZ2UpOwotICAgIH0KLQotICAgIGlmIChlYyA9PSBSYW5nZUVycm9yKSB7Ci0gICAgICAgIGlm
ICghbWVzc2FnZSB8fCBtZXNzYWdlLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gY3Jl
YXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkJhZCB2YWx1ZSIpKTsKLSAgICAgICAg
cmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgKm1lc3NhZ2UpOwotICAgIH0KLQotICAgIGlm
IChlYyA9PSBTdGFja092ZXJmbG93RXJyb3IpCi0gICAgICAgIHJldHVybiBjcmVhdGVTdGFja092
ZXJmbG93RXJyb3IoZXhlYyk7Ci0KLSAgICAvLyBGSVhNRTogQWxsIGNhbGxlcnMgdG8gY3JlYXRl
RE9NRXhjZXB0aW9uIG5lZWQgdG8gcGFzcyBpbiB0aGUgY29ycmVjdCBnbG9iYWwgb2JqZWN0Lgot
ICAgIC8vIEZvciBub3csIHdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGUgbGV4aWNhbEdsb2JhbE9i
amVjdC4gV2hpY2ggaXMgd3JvbmcgaW4gY2FzZXMgbGlrZSB0aGlzOgotICAgIC8vIGZyYW1lc1sw
XS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KG51bGwsIG51bGwpOyAvLyB0aHJvd3MgYW4gZXhjZXB0
aW9uIHdoaWNoIHNob3VsZCBoYXZlIHRoZSBzdWJmcmFtZSdzIHByb3RvdHlwZXMuCi0gICAgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQ
cm90b3R5cGUoZXhlYyk7Ci0KLSAgICBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRp
b24oZWMpOwotCi0gICAgQ1N0cmluZyBtZXNzYWdlQ1N0cmluZzsKLSAgICBpZiAobWVzc2FnZSkK
LSAgICAgICAgbWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlLT51dGY4KCk7Ci0gICAgaWYgKG1lc3Nh
Z2UgJiYgIW1lc3NhZ2UtPmlzRW1wdHkoKSkgewotICAgICAgICAvLyBJdCBpcyBzYWZlIHRvIGRv
IHRoaXMgYmVjYXVzZSB0aGUgY2hhciogY29udGVudHMgb2YgdGhlIENTdHJpbmcgYXJlIGNvcGll
ZCBpbnRvIGEgbmV3IFdURjo6U3RyaW5nIGJlZm9yZSB0aGUgQ1N0cmluZyBpcyBkZXN0cm95ZWQu
Ci0gICAgICAgIGRlc2NyaXB0aW9uLmRlc2NyaXB0aW9uID0gbWVzc2FnZUNTdHJpbmcuZGF0YSgp
OwotICAgIH0KLQotICAgIEpTVmFsdWUgZXJyb3JPYmplY3Q7Ci0gICAgc3dpdGNoIChkZXNjcmlw
dGlvbi50eXBlKSB7Ci0gICAgY2FzZSBET01Db3JlRXhjZXB0aW9uVHlwZToKLSNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLSAgICBjYXNlIElEQkRhdGFiYXNlRXhjZXB0aW9uVHlwZToKLSNl
bmRpZgotICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBET01D
b3JlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBGaWxlRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgRmlsZUV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgU1FMRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmpl
Y3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1FMRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3Jp
cHRpb24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTVkdFeGNlcHRpb25UeXBlOgotICAg
ICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdFeGNlcHRpb246
OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFhQYXRoRXhj
ZXB0aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgWFBhdGhFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGVycm9yT2JqZWN0KTsKLSAgICBhZGRFcnJvckluZm8o
ZXhlYywgYXNPYmplY3QoZXJyb3JPYmplY3QpLCB0cnVlKTsKLSAgICByZXR1cm4gZXJyb3JPYmpl
Y3Q7Ci19Ci0KLUpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhj
ZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIHJldHVybiBjcmVh
dGVET01FeGNlcHRpb24oZXhlYywgZWMsICZtZXNzYWdlKTsKLX0KLQotSlNWYWx1ZSBjcmVhdGVE
T01FeGNlcHRpb24oRXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQotewot
ICAgIHJldHVybiBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBleGNlcHRpb24uY29kZSgpLCBl
eGNlcHRpb24ucmVsZWFzZU1lc3NhZ2UoKSk7Ci19Ci0KLXZvaWQgcHJvcGFnYXRlRXhjZXB0aW9u
U2xvd1BhdGgoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKLXsKLSAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhj
ZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
RE9NRXhjZXB0aW9uKHN0YXRlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpKTsKLX0KLQotYm9vbCBoYXNJ
dGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1
ZSk7Ci0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGU7Ci0gICAg
SlNWYWx1ZSBhcHBseU1ldGhvZCA9IG9iamVjdC0+Z2V0TWV0aG9kKCZzdGF0ZSwgY2FsbERhdGEs
IGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgQVNDSUlMaXRlcmFs
KCJTeW1ib2wuaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLQotICAgIHJldHVybiAhYXBwbHlNZXRo
b2QuaXNVbmRlZmluZWQoKTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93
QWNjZXNzVG9GcmFtZShFeGVjU3RhdGUmIHN0YXRlLCBGcmFtZSYgZnJhbWUsIFN0cmluZyYgbWVz
c2FnZSkKLXsKLSAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJh
bWUoJnN0YXRlLCAmZnJhbWUsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIG1lc3NhZ2UgPSBmcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+
Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSkpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93
QWNjZXNzVG9ET01XaW5kb3coRXhlY1N0YXRlJiBzdGF0ZSwgRE9NV2luZG93JiBnbG9iYWxPYmpl
Y3QsIFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRB
bGxvd0FjY2Vzc1RvRE9NV2luZG93KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBEb05vdFJlcG9ydFNl
Y3VyaXR5RXJyb3IpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBtZXNzYWdlID0gZ2xvYmFs
T2JqZWN0LmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3Rh
dGUpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JG
cmFtZShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAoIWZy
YW1lKQotICAgICAgICByZXR1cm47Ci0gICAgZnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygp
LT5wcmludEVycm9yTWVzc2FnZShtZXNzYWdlKTsKLX0KLQotU3RydWN0dXJlKiBnZXRDYWNoZWRE
T01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8pCi17Ci0gICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMgPSBn
bG9iYWxPYmplY3Quc3RydWN0dXJlcyhOb0xvY2tpbmdOZWNlc3NhcnkpOwotICAgIHJldHVybiBz
dHJ1Y3R1cmVzLmdldChjbGFzc0luZm8pLmdldCgpOwotfQotCi1TdHJ1Y3R1cmUqIGNhY2hlRE9N
U3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKLXsKLSAgICBhdXRvIGxvY2tlciA9
IGxvY2tEdXJpbmdNYXJraW5nKGdsb2JhbE9iamVjdC52bSgpLmhlYXAsIGdsb2JhbE9iamVjdC5n
Y0xvY2soKSk7Ci0gICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9iYWxPYmpl
Y3Quc3RydWN0dXJlcyhsb2NrZXIpOwotICAgIEFTU0VSVCghc3RydWN0dXJlcy5jb250YWlucyhj
bGFzc0luZm8pKTsKLSAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJh
cnJpZXI8U3RydWN0dXJlPihnbG9iYWxPYmplY3Qudm0oKSwgJmdsb2JhbE9iamVjdCwgc3RydWN0
dXJlKSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotfQotCi1zdGF0aWMgY29uc3QgaW50MzJfdCBr
TWF4SW50MzIgPSAweDdmZmZmZmZmOwotc3RhdGljIGNvbnN0IGludDMyX3Qga01pbkludDMyID0g
LWtNYXhJbnQzMiAtIDE7Ci1zdGF0aWMgY29uc3QgdWludDMyX3Qga01heFVJbnQzMiA9IDB4ZmZm
ZmZmZmZVOwotc3RhdGljIGNvbnN0IGludDY0X3Qga0pTTWF4SW50ZWdlciA9IDB4MjAwMDAwMDAw
MDAwMDBMTCAtIDE7IC8vIDJeNTMgLSAxLCBsYXJnZXN0IGludGVnZXIgZXhhY3RseSByZXByZXNl
bnRhYmxlIGluIEVDTUFTY3JpcHQuCi0KLXN0YXRpYyBTdHJpbmcgcmFuZ2VFcnJvclN0cmluZyhk
b3VibGUgdmFsdWUsIGRvdWJsZSBtaW4sIGRvdWJsZSBtYXgpCi17Ci0gICAgcmV0dXJuIG1ha2VT
dHJpbmcoIlZhbHVlICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHZhbHVlKSwg
IiBpcyBvdXRzaWRlIHRoZSByYW5nZSBbIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3Jp
cHQobWluKSwgIiwgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWF4KSwgIl0i
KTsKLX0KLQotc3RhdGljIGRvdWJsZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgZG91
YmxlIHgsIGRvdWJsZSBtaW5pbXVtLCBkb3VibGUgbWF4aW11bSkKLXsKLSAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkpIHsKLSAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhp
bXVtKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICB4ID0gdHJ1bmMoeCk7Ci0gICAg
aWYgKHggPCBtaW5pbXVtIHx8IHggPiBtYXhpbXVtKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBUPgotc3RydWN0IEludFR5cGVMaW1pdHMgewotfTsKLQotdGVtcGxhdGUgPD4KLXN0
cnVjdCBJbnRUeXBlTGltaXRzPGludDhfdD4gewotICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWlu
VmFsdWUgPSAtMTI4OwotICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWF4VmFsdWUgPSAxMjc7Ci0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKLX07
Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50OF90PiB7Ci0gICAgc3Rh
dGljIGNvbnN0IHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1
Y3QgSW50VHlwZUxpbWl0czxpbnQxNl90PiB7Ci0gICAgc3RhdGljIGNvbnN0IHNob3J0IG1pblZh
bHVlID0gLTMyNzY4OwotICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtYXhWYWx1ZSA9IDMyNzY3Owot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2
Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8dWludDE2X3Q+IHsKLSAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbWF4VmFsdWUgPSA2NTUzNTsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgotfTsKLQot
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3NpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91
bGQgb25seSBiZSB1c2VkIGZvciBzaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKLQotICAgIHR5cGVk
ZWYgSW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFpdDsKLSAgICAvLyBGYXN0IHBhdGggaWYgdGhl
IHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJh
bmdlLgotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpIHsKLSAgICAgICAgaW50MzJfdCBkID0gdmFs
dWUuYXNJbnQzMigpOwotICAgICAgICBpZiAoZCA+PSBMaW1pdHNUcmFpdDo6bWluVmFsdWUgJiYg
ZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VD4oZCk7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gZCA8IExpbWl0c1RyYWl0OjptaW5WYWx1
ZSA/IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA6IExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKLSAgICAg
ICAgfQotICAgICAgICBkICU9IExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlczsKLSAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQgPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyBkIC0gTGlt
aXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzIDogZCk7Ci0gICAgfQotCi0gICAgZG91YmxlIHggPSB2
YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDAp
OwotCi0gICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJu
IGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgTGltaXRzVHJhaXQ6Om1pblZhbHVlLCBMaW1pdHNUcmFp
dDo6bWF4VmFsdWUpOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsK
LSAgICB9Ci0KLSAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6IGZs
b29yKGZhYnMoeCkpOwotICAgIHggPSBmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVl
cyk7Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oeCA+IExpbWl0c1RyYWl0OjptYXhWYWx1
ZSA/IHggLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiB4KTsKLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmln
dXJhdGlvbikKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNp
Z25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25s
eSBiZSB1c2VkIGZvciB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOwotCi0gICAgdHlwZWRlZiBJ
bnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OwotICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFs
dWUgaXMgYWxyZWFkeSBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5n
ZS4KLSAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkgewotICAgICAgICB1aW50MzJfdCBkID0gdmFs
dWUuYXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGQgPD0gTGltaXRzVHJhaXQ6Om1heFZhbHVlKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwotICAgICAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKLSAgICAgICAgICAgIHJldHVybiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0KLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKLSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgotICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBMaW1p
dHNUcmFpdDo6bWF4VmFsdWUpOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxU
Pih4KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8
ICF4KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgp
KSA6IGZsb29yKGZhYnMoeCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihmbW9kKHgsIExp
bWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcykpOwotfQotCi1pbnQ4X3QgdG9JbnQ4RW5mb3JjZVJh
bmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
dG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLXVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5n
ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRv
U21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLWludDhfdCB0b0ludDhDbGFtcChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlcklu
dDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcCk7Ci19Ci0KLXVpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0
ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi0v
LyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWJ5dGUKLWludDhfdCB0b0ludDgoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50
PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtb2N0ZXQKLXVp
bnQ4X3QgdG9VSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJl
dHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi1pbnQxNl90IHRvSW50MTZFbmZvcmNlUmFu
Z2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFs
bGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi11aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJV
SW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotaW50MTZfdCB0b0ludDE2Q2xhbXAoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+
KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Ci19
Ci0KLXVpbnQxNl90IHRvVUludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKLX0KLQotLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvV2ViSURMLyNlcy1zaG9ydAotaW50MTZfdCB0b0ludDE2KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90
PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsK
LX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1zaG9ydAot
dWludDE2X3QgdG9VSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3Jn
L1RSL1dlYklETC8jZXMtbG9uZwotaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAodmFsdWUu
aXNJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0gICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIDApOwotICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIGtNaW5JbnQzMiwga01h
eEludDMyKTsKLX0KLQotaW50MzJfdCB0b0ludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICByZXR1cm4g
dmFsdWUuYXNJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUp
OwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88aW50MzJfdD4oeCk7Ci19
Ci0KLXVpbnQzMl90IHRvVUludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFz
VUludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAg
cmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzx1aW50MzJfdD4oeCk7Ci19Ci0KLS8v
IGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9uZwotdWludDMyX3Qg
dG9VSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICByZXR1cm4g
dmFsdWUuYXNVSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3Jj
ZVJhbmdlKHN0YXRlLCB4LCAwLCBrTWF4VUludDMyKTsKLX0KLQotaW50NjRfdCB0b0ludDY0RW5m
b3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRl
LCB4LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50ZWdlcik7Ci19Ci0KLXVpbnQ2NF90IHRvVUlu
dDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdl
KHN0YXRlLCB4LCAwLCBrSlNNYXhJbnRlZ2VyKTsKLX0KLQotaW50NjRfdCB0b0ludDY0Q2xhbXAo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0g
dmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBz
dGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwg
LWtKU01heEludGVnZXIpLCBrSlNNYXhJbnRlZ2VyKSk7Ci19Ci0KLXVpbnQ2NF90IHRvVUludDY0
Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJs
ZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/
IDAgOiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3Vi
bGU+KHgsIDApLCBrSlNNYXhJbnRlZ2VyKSk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1dlYklETC8jZXMtbG9uZy1sb25nCi1pbnQ2NF90IHRvSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
Ci0KLSAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUg
dmFsdWVzIG1vZHVsbyAyXjY0LgotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOwotICAgIGRvdWJs
ZVRvSW50ZWdlcih4LCBuKTsKLSAgICByZXR1cm4gbjsKLX0KLQotLy8gaHR0cDovL3d3dy53My5v
cmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nLWxvbmcKLXVpbnQ2NF90IHRvVUludDY0KEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50
b051bWJlcigmc3RhdGUpOwotCi0gICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7
IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KLSAgICB1bnNpZ25lZCBsb25nIGxv
bmcgbjsKLSAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7Ci0gICAgcmV0dXJuIG47Ci19Ci0KLWNs
YXNzIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgewotcHVibGljOgotICAgIEdldENhbGxl
ckdsb2JhbE9iamVjdEZ1bmN0b3IoKSA9IGRlZmF1bHQ7Ci0KLSAgICBTdGFja1Zpc2l0b3I6OlN0
YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAg
ICAgIGlmICghbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSkgewotICAgICAgICAgICAgbV9oYXNTa2lw
cGVkRmlyc3RGcmFtZSA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpD
b250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdXRvKiBjb2RlQmxvY2sgPSB2aXNp
dG9yLT5jb2RlQmxvY2soKSkKLSAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQodmlz
aXRvci0+Y2FsbGVlKCkpOwotICAgICAgICAgICAgLy8gRklYTUU6IENhbGxlZSBpcyBub3QgYW4g
b2JqZWN0IGlmIHRoZSBjYWxsZXIgaXMgV2ViIEFzc2VtYmx5LgotICAgICAgICAgICAgLy8gRmln
dXJlIG91dCB3aGF0IHRvIGRvIGhlcmUuIFdlIGNhbiBwcm9iYWJseSBnZXQgdGhlIGdsb2JhbCBv
YmplY3QKLSAgICAgICAgICAgIC8vIGZyb20gdGhlIHRvcC1tb3N0IFdhc20gSW5zdGFuY2UuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MjEKLSAgICAgICAgICAg
IGlmICh2aXNpdG9yLT5jYWxsZWUoKS0+aXNPYmplY3QoKSkKLSAgICAgICAgICAgICAgICBtX2ds
b2JhbE9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxlZSgpKS0+Z2xvYmFs
T2JqZWN0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsK
LSAgICB9Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9nbG9iYWxPYmplY3Q7IH0KLQotcHJpdmF0ZToKLSAgICBtdXRhYmxlIGJvb2wgbV9oYXNT
a2lwcGVkRmlyc3RGcmFtZSB7IGZhbHNlIH07Ci0gICAgbXV0YWJsZSBKU0dsb2JhbE9iamVjdCog
bV9nbG9iYWxPYmplY3QgeyBudWxscHRyIH07Ci19OwotCi1ET01XaW5kb3cmIGNhbGxlckRPTVdp
bmRvdyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3Rv
ciBpdGVyOwotICAgIGV4ZWMtPml0ZXJhdGUoaXRlcik7Ci0gICAgcmV0dXJuIGl0ZXIuZ2xvYmFs
T2JqZWN0KCkgPyBhc0pTRE9NV2luZG93KGl0ZXIuZ2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCkg
OiBmaXJzdERPTVdpbmRvdyhleGVjKTsKLX0KLQotRE9NV2luZG93JiBhY3RpdmVET01XaW5kb3co
RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKTsKLX0KLQotRE9NV2luZG93JiBmaXJzdERPTVdp
bmRvdyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+
dm1FbnRyeUdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOwotfQotCi1zdGF0aWMgaW5saW5lIGJv
b2wgY2FuQWNjZXNzRG9jdW1lbnQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEb2N1bWVudCogdGFy
Z2V0RG9jdW1lbnQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKLXsK
LSAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoIXRhcmdldERvY3VtZW50KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBET01XaW5kb3cmIGFjdGl2ZSA9IGFjdGl2ZURPTVdpbmRvdyhzdGF0ZSk7
Ci0KLSAgICBpZiAoYWN0aXZlLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkuY2FuQWNjZXNz
KHRhcmdldERvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBzd2l0Y2ggKHJlcG9ydGluZ09wdGlvbikgewotICAgIGNhc2UgVGhyb3dTZWN1cml0
eUVycm9yOgotICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKnN0YXRlLCBzY29wZSwgdGFyZ2V0
RG9jdW1lbnQtPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3Rp
dmUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMb2dTZWN1cml0eUVycm9yOgotICAgICAg
ICBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKHRhcmdldERvY3VtZW50LT5mcmFtZSgpLCB0YXJn
ZXREb2N1bWVudC0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFj
dGl2ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERvTm90UmVwb3J0U2VjdXJpdHlFcnJv
cjoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIERPTVdpbmRvdyYgdGFyZ2V0LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiBy
ZXBvcnRpbmdPcHRpb24pCi17Ci0gICAgcmV0dXJuIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0
YXJnZXQuZG9jdW1lbnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKLX0KLQotYm9vbCBCaW5kaW5nU2Vj
dXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEZy
YW1lKiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKLXsK
LSAgICByZXR1cm4gdGFyZ2V0ICYmIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJnZXQtPmRv
Y3VtZW50KCksIHJlcG9ydGluZ09wdGlvbik7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5Ojpz
aG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIE5vZGUqIHRhcmdl
dCkKLXsKLSAgICByZXR1cm4gIXRhcmdldCB8fCBjYW5BY2Nlc3NEb2N1bWVudCgmc3RhdGUsICZ0
YXJnZXQtPmRvY3VtZW50KCksIExvZ1NlY3VyaXR5RXJyb3IpOwotfQogICAgIAotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIHRocm93VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCi17Ci0gICAgcmV0
dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKLX0KLQot
c3RhdGljIHZvaWQgYXBwZW5kQXJndW1lbnRNdXN0QmUoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwg
dW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJBcmd1bWVudCAiKTsKLSAgICBidWlsZGVyLmFwcGVuZE51bWJl
cihhcmd1bWVudEluZGV4ICsgMSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgKCciKTsK
LSAgICBidWlsZGVyLmFwcGVuZChhcmd1bWVudE5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiJykgdG8gIik7Ci0gICAgaWYgKCFmdW5jdGlvbk5hbWUpIHsKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJ0aGUgIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFj
ZU5hbWUpOwotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBjb25zdHJ1Y3RvciIpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5hbWUpOwotICAg
ICAgICBidWlsZGVyLmFwcGVuZCgnLicpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChmdW5jdGlv
bk5hbWUpOwotICAgIH0KLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBtdXN0IGJlICIpOwot
fQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7Ci0gICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpK
UywgTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRv
IGFjY2VzcyBwcm9wZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJm
YWNlTmFtZSwgIiBvYmplY3QuIikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci19Ci0gICAgCi12b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7Ci0gICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpK
UywgTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRv
IHNldCBwcm9wZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNl
TmFtZSwgIiBvYmplY3QuIikpOwotfQotCi12b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUs
IGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSKSk7Ci19Ci0KLXZv
aWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7Ci0gICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7Ci0gICAg
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwg
Tk9UX1NVUFBPUlRFRF9FUlIsICZtZXNzYWdlU3RyaW5nKSk7Ci19Ci0KLXZvaWQgdGhyb3dJbnZh
bGlkU3RhdGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24o
KSk7Ci0gICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7Ci0gICAgdGhyb3dFeGNlcHRp
b24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5WQUxJRF9TVEFU
RV9FUlIsICZtZXNzYWdlU3RyaW5nKSk7Ci19Ci0KLXZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93
RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNFQ1VS
SVRZX0VSUiwgbWVzc2FnZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1l
bnRNdXN0QmVFbnVtRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUs
IGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFZhbHVlcykKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7Ci0gICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwg
YXJndW1lbnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7Ci0gICAg
YnVpbGRlci5hcHBlbmRMaXRlcmFsKCJvbmUgb2Y6ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGV4
cGVjdGVkVmFsdWVzKTsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
LCBidWlsZGVyLnRvU3RyaW5nKCkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJn
dW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1l
bnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGFwcGVuZEFyZ3VtZW50TXVz
dEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgaW50ZXJmYWNlTmFtZSwg
ZnVuY3Rpb25OYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImEgZnVuY3Rpb24iKTsK
LSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3Ry
aW5nKCkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3Io
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBh
cmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0
aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBl
eHBlY3RlZFR5cGUpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGFwcGVuZEFy
Z3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgZnVuY3Rp
b25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiYW4gaW5zdGFuY2Ugb2YgIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRUeXBlKTsK
LSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3Ry
aW5nKCkpOwotfQotCi12b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICB0aHJvd1R5cGVFcnJv
cihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBBcnJheSBlbGVtZW50IHR5cGUi
KSk7Ci19Ci0KLXZvaWQgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCi17Ci0g
ICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJm
YWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGF0dHJpYnV0ZSBtdXN0IGJlIGFuIGluc3Rh
bmNlIG9mICIsIGV4cGVjdGVkVHlwZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93
UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9u
YXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQotewotICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIk1lbWJlciAiKTsKLSAgICBidWls
ZGVyLmFwcGVuZChkaWN0aW9uYXJ5TmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJy4nKTsKLSAg
ICBidWlsZGVyLmFwcGVuZChtZW1iZXJOYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
IiBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiKTsKLSAgICBidWlsZGVy
LmFwcGVuZChleHBlY3RlZFR5cGUpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUg
dGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSkKLXsKLSAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZzdGF0ZSwgc2NvcGUs
IGNyZWF0ZVJlZmVyZW5jZUVycm9yKCZzdGF0ZSwgbWFrZVN0cmluZyhpbnRlcmZhY2VOYW1lLCAi
IGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUi
KSkpOwotfQotCi12b2lkIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIHRocm93VHlwZUVycm9yKHN0YXRl
LCBzY29wZSwgQVNDSUlMaXRlcmFsKCJWYWx1ZSBpcyBub3QgYSBzZXF1ZW5jZSIpKTsKLX0KLQot
dm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKQotewotICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiVGhlIHByb3ZpZGVkIHZhbHVlIGlzIG5vbi1maW5pdGUiKSk7Ci19Ci0KLVN0cmlu
ZyBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJUaGUg
IiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGdldHRlciBjYW4gb25seSBi
ZSB1c2VkIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKLX0KLQotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgYXR0cmli
dXRlTmFtZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoR2V0
dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlUmVq
ZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3Nh
Z2UoaW50ZXJmYWNlTmFtZSwgYXR0cmlidXRlTmFtZSkpOwotfQotCi1ib29sIHRocm93U2V0dGVy
VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsK
LSAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRl
cmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgc2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQg
b24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLVN0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQotewotICAgIHJldHVybiBtYWtlU3RyaW5n
KCJDYW4gb25seSBjYWxsICIsIGludGVyZmFjZU5hbWUsICcuJywgZnVuY3Rpb25OYW1lLCAiIG9u
IGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgdGhy
b3dUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
KQotewotICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VUaGlzVHlw
ZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpKTsKLX0KLQotSlNDOjpF
bmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9t
aXNlJiBwcm9taXNlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBtZXRo
b2ROYW1lKQotewotICAgIHByb21pc2UucmVqZWN0KFR5cGVFcnJvciwgbWFrZVRoaXNUeXBlRXJy
b3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVj
dFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCi17Ci0gICAgcmV0dXJu
IGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VUaGlzVHlwZUVy
cm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7Ci19Ci0KIHZvaWQgY2FsbEZ1
bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
T2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQogewogICAgIEpT
Qzo6Q2FsbERhdGEgY2FsbERhdGE7CkBAIC0xMDA3LDI4ICs2Myw0IEBAIENhbGxUeXBlIERPTUNv
bnN0cnVjdG9yT2JqZWN0OjpnZXRDYWxsRGEKICAgICByZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7CiB9
CiAKLXZvaWQgdGhyb3dET01TeW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0g
ICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0
ZSwgU1lOVEFYX0VSUikpOwotfQotCi12b2lkIHRocm93RGF0YUNsb25lRXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0
ZURPTUV4Y2VwdGlvbigmc3RhdGUsIERBVEFfQ0xPTkVfRVJSKSk7Ci19Ci0KLXZvaWQgdGhyb3dJ
bmRleFNpemVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRp
b24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5ERVhfU0laRV9F
UlIpKTsKLX0KLQotdm9pZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2Vw
dGlvbigpKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNl
cHRpb24oJnN0YXRlLCBUWVBFX01JU01BVENIX0VSUikpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1
Y3Rvci5oCShyZXZpc2lvbiAyMTEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDExICsxOSw2NCBAQAogCiAj
cHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmgiCi0j
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBCYXNlIGNsYXNzIGZvciBhbGwgY29uc3Ry
dWN0b3Igb2JqZWN0cyBpbiB0aGUgSlNDIGJpbmRpbmdzLgorY2xhc3MgRE9NQ29uc3RydWN0b3JP
YmplY3QgOiBwdWJsaWMgSlNET01PYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNET01P
YmplY3QgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpJ
bXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91bGRDYWxsR2V0Q2Fs
bERhdGE7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworCitwcm90ZWN0ZWQ6Cisg
ICAgRE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCYpOworCisgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKKyAg
ICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBKU0M6OkNhbGxEYXRh
Jik7Cit9OworCisvLyBDb25zdHJ1Y3RvcnMgdXNpbmcgdGhpcyBiYXNlIGNsYXNzIGRlcGVuZCBv
biBiZWluZyBpbiBhIERvY3VtZW50IGFuZAorLy8gY2FuIG5ldmVyIGJlIHVzZWQgZnJvbSBhIFdv
cmtlckdsb2JhbFNjb3BlLgorY2xhc3MgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgOiBwdWJs
aWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgQmFzZTsKK3B1YmxpYzoKKyAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PERvY3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50
KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QpCisgICAgICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KGdsb2JhbE9iamVjdC52bSgpKTsKKyAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdC5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSk7CisgICAgfQorfTsKKworY2xhc3MgRE9N
Q29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3Qg
eworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKworcHJv
dGVjdGVkOgorICAgIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6U3RydWN0dXJl
KiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Qzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworCisgICAgSlNDOjpKU0Z1bmN0aW9uKiBp
bml0aWFsaXplRnVuY3Rpb24oKTsKKyAgICB2b2lkIHNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6
OlZNJiwgSlNDOjpKU0Z1bmN0aW9uJik7CisKK3ByaXZhdGU6CisgICAgSlNDOjpXcml0ZUJhcnJp
ZXI8SlNDOjpKU0Z1bmN0aW9uPiBtX2luaXRpYWxpemVGdW5jdGlvbjsKK307CisKIHRlbXBsYXRl
PHR5cGVuYW1lIEpTQ2xhc3M+IGNsYXNzIEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxl
IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIERP
TUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CkBAIC0xMzEsNiArMTg0LDM3IEBAIHByaXZhdGU6CiAg
ICAgSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGUqIGluaXRpYWxpemVFeGVjdXRhYmxlKEpTQzo6Vk0m
KTsKIH07CiAKK2lubGluZSBKU0M6OlN0cnVjdHVyZSogRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworaW5saW5lIERPTUNv
bnN0cnVjdG9yT2JqZWN0OjpET01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIDogSlNET01PYmpl
Y3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9CisKK2lubGluZSBTdHJpbmcgRE9NQ29u
c3RydWN0b3JPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCopCit7CisgICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgiRnVuY3Rpb24iKTsKK30KKworaW5saW5lIERPTUNvbnN0cnVjdG9ySlNC
dWlsdGluT2JqZWN0OjpET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIDogRE9N
Q29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9CisKK2lubGlu
ZSBKU0M6OkpTRnVuY3Rpb24qIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojppbml0aWFs
aXplRnVuY3Rpb24oKQoreworICAgIHJldHVybiBtX2luaXRpYWxpemVGdW5jdGlvbi5nZXQoKTsK
K30KKworaW5saW5lIHZvaWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnNldEluaXRp
YWxpemVGdW5jdGlvbihKU0M6OlZNJiB2bSwgSlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKK3sK
KyAgICBtX2luaXRpYWxpemVGdW5jdGlvbi5zZXQodm0sIHRoaXMsICZmdW5jdGlvbik7Cit9CisK
KwogdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlPEpTQ2xhc3M+KiBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxK
U0NsYXNzPjo6Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIEpTRE9NQ29uc3RydWN0b3JO
b3RDb25zdHJ1Y3RhYmxlKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0
ZUNlbGw8SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU+KHZtLmhlYXApKSBKU0RPTUNv
bnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CkBAIC0y
MjAsNiArMzA0LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIHZvaWQgSgog
ICAgIGluaXRpYWxpemVQcm9wZXJ0aWVzKHZtLCBnbG9iYWxPYmplY3QpOwogfQogCit2b2lkIGNh
bGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU09i
amVjdCYgdGhpc09iamVjdCwgSlNDOjpKU0Z1bmN0aW9uJik7CisKIHRlbXBsYXRlPHR5cGVuYW1l
IEpTQ2xhc3M+IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQnVpbHRpbkNvbnN0cnVjdG9y
PEpTQ2xhc3M+OjpjYWxsQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
T2JqZWN0JiBvYmplY3QpCiB7CiAgICAgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMo
c3RhdGUsIG9iamVjdCwgKmluaXRpYWxpemVGdW5jdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oCShyZXZpc2lvbiAyMTEzODQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRl
ICJJRExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5s
aW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNw
cAkocmV2aXNpb24gMjExMzUzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUJpbmRpbmcuY3BwOjIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAzNCBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDExLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5p
ZyA8c2FtQHdlYmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIE1pY2hhZWwgUHJ1ZXR0
IDxtaWNoYWVsQDY4ay5vcmc+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisKKyNpbmNsdWRlICJD
YWNoZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgorI2luY2x1ZGUgIkRPTUNvbnN0
cnVjdG9yV2l0aERvY3VtZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlYWRl
cnMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25JbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VF
eGNlcHRpb24uaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlICJKU0RPTVBy
b21pc2UuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgorI2luY2x1ZGUgIkpTRXhj
ZXB0aW9uQmFzZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSA8Ynl0
ZWNvZGUvQ29kZUJsb2NrLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5o
PgorI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg+CisjaW5jbHVk
ZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9FcnJvckhhbmRsaW5nU2NvcGUuaD4KKyNpbmNsdWRlIDxydW50aW1l
L0Vycm9ySW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbi5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5j
dGlvbi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7Cit1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NUQVRJQ19BU1NFUlRf
SVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3Rvck9iamVjdCk7CitTVEFUSUNf
QVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1l
bnQpOworCit2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVy
dHlOYW1lKQoreworICAgIGNvbW1vblZNKCkuYWRkSW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1l
KTsKK30KKworSlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgU3RyaW5nJiBzKQoreworICAgIGlmIChzLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ganNO
dWxsKCk7CisgICAgcmV0dXJuIGpzT3duZWRTdHJpbmcoZXhlYywgcyk7Cit9CisKK0pTVmFsdWUg
anNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKK3sK
KyAgICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
cmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHMpOworfQorCitKU1ZhbHVlIGpzU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIGpzU3RyaW5n
V2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Cit9CisKK0pTVmFsdWUganNTdHJpbmdPclVu
ZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVSTCYgdXJsKQoreworICAgIGlmICh1cmwu
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBqc1N0
cmluZ1dpdGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkpOworfQorCitzdGF0aWMgaW5saW5lIFN0
cmluZyBzdHJpbmdUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSwgU3RyaW5nJiYgc3RyaW5nKQoreworICAgIGlmICghc3RyaW5nLmNvbnRhaW5zT25s
eUxhdGluMSgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiBzdHJpbmc7Cit9CisKK1N0cmlu
ZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50aWZpZXIpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gaWRl
bnRpZmllci5zdHJpbmcoKTsKKyAgICByZXR1cm4gc3RyaW5nVG9CeXRlU3RyaW5nKHN0YXRlLCBz
Y29wZSwgV1RGTW92ZShzdHJpbmcpKTsKK30KKworU3RyaW5nIHZhbHVlVG9CeXRlU3RyaW5nKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdHJp
bmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0
ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBoYXNV
bnBhaXJlZFN1cnJvZ2F0ZShTdHJpbmdWaWV3IHN0cmluZykKK3sKKyAgICAvLyBGYXN0IHBhdGgg
Zm9yIDgtYml0IHN0cmluZ3M7IHRoZXkgY2FuJ3QgaGF2ZSBhbnkgc3Vycm9nYXRlcy4KKyAgICBp
ZiAoc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChhdXRv
IGNvZGVQb2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsKKyAgICAgICAgaWYgKFVfSVNfU1VS
Uk9HQVRFKGNvZGVQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb1VTVlN0cmlu
ZyhTdHJpbmcmJiBzdHJpbmcpCit7CisgICAgLy8gRmFzdCBwYXRoIGZvciB0aGUgY2FzZSB3aGVy
ZSB0aGVyZSBhcmUgbm8gdW5wYWlyZWQgc3Vycm9nYXRlcy4KKyAgICBpZiAoIWhhc1VucGFpcmVk
U3Vycm9nYXRlKHN0cmluZykpCisgICAgICAgIHJldHVybiBzdHJpbmc7CisKKyAgICAvLyBTbG93
IHBhdGg6IGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLW9idGFpbi11bmljb2Rl
CisgICAgLy8gUmVwbGFjZXMgdW5wYWlyZWQgc3Vycm9nYXRlcyB3aXRoIHRoZSByZXBsYWNlbWVu
dCBjaGFyYWN0ZXIuCisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2Vy
dmVDYXBhY2l0eShzdHJpbmcubGVuZ3RoKCkpOworICAgIFN0cmluZ1ZpZXcgdmlldyB7IHN0cmlu
ZyB9OworICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiB2aWV3LmNvZGVQb2ludHMoKSkgeworICAg
ICAgICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKGNvZGVQb2ludCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQudG9TdHJp
bmcoKTsKK30KKworU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmluZyhFeGVjU3RhdGUmLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQoreworICAgIFN0cmluZyBzdHJpbmcgPSBpZGVudGlm
aWVyLnN0cmluZygpOworICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZNb3ZlKHN0cmlu
ZykpOworfQorCitTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIHN0cmluZyA9IHZhbHVlLnRv
V1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KworICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZNb3ZlKHN0cmluZykpOworfQorCitK
U1ZhbHVlIGpzRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKK30KKworZG91YmxlIHZhbHVlVG9EYXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNOdW1i
ZXIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzTnVtYmVyKCk7CisgICAgaWYgKCF2YWx1ZS5p
bmhlcml0cyhleGVjLT52bSgpLCBEYXRlSW5zdGFuY2U6OmluZm8oKSkpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50b09iamVjdChleGVjKSktPmludGVybmFs
TnVtYmVyKCk7Cit9CisKK3ZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBleGNlcHRpb25WYWx1ZSwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCit7CisgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFk
SXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRvKiBleGNlcHRpb24gPSBqc0R5bmFtaWNEb3du
Y2FzdDxKU0M6OkV4Y2VwdGlvbio+KHZtLCBleGNlcHRpb25WYWx1ZSk7CisgICAgaWYgKCFleGNl
cHRpb24pIHsKKyAgICAgICAgZXhjZXB0aW9uID0gdm0ubGFzdEV4Y2VwdGlvbigpOworICAgICAg
ICBpZiAoIWV4Y2VwdGlvbikKKyAgICAgICAgICAgIGV4Y2VwdGlvbiA9IEpTQzo6RXhjZXB0aW9u
OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhjZXB0aW9uVmFsdWUsIEpTQzo6RXhjZXB0aW9uOjpEb05v
dENhcHR1cmVTdGFjayk7CisgICAgfQorCisgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2Vw
dGlvbiwgY2FjaGVkU2NyaXB0KTsKK30KKworU3RyaW5nIHJldHJpZXZlRXJyb3JNZXNzYWdlKEV4
ZWNTdGF0ZSYgc3RhdGUsIFZNJiB2bSwgSlNWYWx1ZSBleGNlcHRpb24sIENhdGNoU2NvcGUmIGNh
dGNoU2NvcGUpCit7CisgICAgaWYgKGF1dG8qIGV4Y2VwdGlvbkJhc2UgPSB0b0V4Y2VwdGlvbkJh
c2Uodm0sIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBleGNlcHRpb25CYXNlLT50b1N0cmlu
ZygpOworCisgICAgLy8gRklYTUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNTA4Nz4gV2ViIElu
c3BlY3RvcjogV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uIHNob3VsZCBub3QgZXZhbHVhdGUgSmF2
YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCisgICAgLy8gSWYgdGhpcyBpcyBhIGN1c3RvbSBl
eGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0IHRvIHRyeSBhbmQgZ2V0IGEgbmlj
ZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGNlcHRpb24uCisgICAgU3RyaW5nIGVy
cm9yTWVzc2FnZTsKKyAgICBpZiAoYXV0byogZXJyb3IgPSBqc0R5bmFtaWNEb3duY2FzdDxFcnJv
ckluc3RhbmNlKj4odm0sIGV4Y2VwdGlvbikpCisgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9y
LT5zYW5pdGl6ZWRUb1N0cmluZygmc3RhdGUpOworICAgIGVsc2UKKyAgICAgICAgZXJyb3JNZXNz
YWdlID0gZXhjZXB0aW9uLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisKKyAgICAvLyBXZSBuZWVkIHRv
IGNsZWFyIGFueSBuZXcgZXhjZXB0aW9uIHRoYXQgbWF5IGJlIHRocm93biBpbiB0aGUgdG9TdHJp
bmcoKSBjYWxsIGFib3ZlLgorICAgIC8vIHJlcG9ydEV4Y2VwdGlvbigpIGlzIG5vdCBzdXBwb3Nl
ZCB0byBiZSBtYWtpbmcgbmV3IGV4Y2VwdGlvbnMuCisgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2Vw
dGlvbigpOworICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOworICAgIHJldHVybiBlcnJvck1l
c3NhZ2U7Cit9CisKK3ZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDOjpF
eGNlcHRpb24qIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQsIEV4Y2VwdGlv
bkRldGFpbHMqIGV4Y2VwdGlvbkRldGFpbHMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICBSRUxFQVNF
X0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBpZiAoaXNU
ZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLCBleGNlcHRpb24pKQorICAgICAgICByZXR1
cm47CisKKyAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZShleGVjLT52bSgpKTsKKwor
ICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3JpcHRDYWxsU3Rh
Y2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgU2NyaXB0Q2FsbFN0YWNrOjptYXhDYWxs
U3RhY2tTaXplVG9DYXB0dXJlKSk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICB2
bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKKworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpOworICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0ganNEeW5hbWljRG93bmNhc3Q8
SlNET01XaW5kb3cqPih2bSwgZ2xvYmFsT2JqZWN0KSkgeworICAgICAgICBpZiAoIXdpbmRvdy0+
d3JhcHBlZCgpLmlzQ3VycmVudGx5RGlzcGxheWVkSW5GcmFtZSgpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGludCBsaW5lTnVtYmVyID0gMDsKKyAgICBpbnQgY29sdW1uTnVt
YmVyID0gMDsKKyAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJMOworICAgIGlmIChjb25zdCBT
Y3JpcHRDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxTdGFjay0+Zmlyc3ROb25OYXRpdmVDYWxs
RnJhbWUoKSkgeworICAgICAgICBsaW5lTnVtYmVyID0gY2FsbEZyYW1lLT5saW5lTnVtYmVyKCk7
CisgICAgICAgIGNvbHVtbk51bWJlciA9IGNhbGxGcmFtZS0+Y29sdW1uTnVtYmVyKCk7CisgICAg
ICAgIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGNhbGxGcmFtZS0+c291cmNlVVJMKCk7CisgICAgfQor
CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHJldHJpZXZlRXJyb3JNZXNzYWdlKCpleGVjLCB2
bSwgZXhjZXB0aW9uLT52YWx1ZSgpLCBzY29wZSk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnJlcG9ydEV4Y2VwdGlvbihl
cnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgZXhjZXB0aW9uU291cmNlVVJM
LCBleGNlcHRpb24sIGNhbGxTdGFjay0+c2l6ZSgpID8gY2FsbFN0YWNrIDogbnVsbHB0ciwgY2Fj
aGVkU2NyaXB0KTsKKworICAgIGlmIChleGNlcHRpb25EZXRhaWxzKSB7CisgICAgICAgIGV4Y2Vw
dGlvbkRldGFpbHMtPm1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7CisgICAgICAgIGV4Y2VwdGlvbkRl
dGFpbHMtPmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAgICBleGNlcHRpb25EZXRhaWxz
LT5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7CisgICAgICAgIGV4Y2VwdGlvbkRldGFpbHMt
PnNvdXJjZVVSTCA9IGV4Y2VwdGlvblNvdXJjZVVSTDsKKyAgICB9Cit9CisKK3ZvaWQgcmVwb3J0
Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgYXV0
byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKKyAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKK30KKworc3RhdGlj
IEpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29k
ZSBlYywgY29uc3QgU3RyaW5nKiBtZXNzYWdlID0gbnVsbHB0cikKK3sKKyAgICBpZiAoIWVjIHx8
IGVjID09IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworCisgICAgLy8gRklYTUU6IEhhbmRsZSBvdGhlciBXZWJJREwgZXhjZXB0aW9uIHR5cGVz
LgorICAgIGlmIChlYyA9PSBUeXBlRXJyb3IpIHsKKyAgICAgICAgaWYgKCFtZXNzYWdlIHx8IG1l
c3NhZ2UtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZXhl
Yyk7CisgICAgICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZXhlYywgKm1lc3NhZ2UpOworICAg
IH0KKworICAgIGlmIChlYyA9PSBSYW5nZUVycm9yKSB7CisgICAgICAgIGlmICghbWVzc2FnZSB8
fCBtZXNzYWdlLT5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmFuZ2VFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIkJhZCB2YWx1ZSIpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZVJhbmdlRXJyb3IoZXhlYywgKm1lc3NhZ2UpOworICAgIH0KKworICAgIGlmIChlYyA9PSBTdGFj
a092ZXJmbG93RXJyb3IpCisgICAgICAgIHJldHVybiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3Io
ZXhlYyk7CisKKyAgICAvLyBGSVhNRTogQWxsIGNhbGxlcnMgdG8gY3JlYXRlRE9NRXhjZXB0aW9u
IG5lZWQgdG8gcGFzcyBpbiB0aGUgY29ycmVjdCBnbG9iYWwgb2JqZWN0LgorICAgIC8vIEZvciBu
b3csIHdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGUgbGV4aWNhbEdsb2JhbE9iamVjdC4gV2hpY2gg
aXMgd3JvbmcgaW4gY2FzZXMgbGlrZSB0aGlzOgorICAgIC8vIGZyYW1lc1swXS5kb2N1bWVudC5j
cmVhdGVFbGVtZW50KG51bGwsIG51bGwpOyAvLyB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoaWNoIHNo
b3VsZCBoYXZlIHRoZSBzdWJmcmFtZSdzIHByb3RvdHlwZXMuCisgICAgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhl
Yyk7CisKKyAgICBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworCisg
ICAgQ1N0cmluZyBtZXNzYWdlQ1N0cmluZzsKKyAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgbWVz
c2FnZUNTdHJpbmcgPSBtZXNzYWdlLT51dGY4KCk7CisgICAgaWYgKG1lc3NhZ2UgJiYgIW1lc3Nh
Z2UtPmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJdCBpcyBzYWZlIHRvIGRvIHRoaXMgYmVjYXVz
ZSB0aGUgY2hhciogY29udGVudHMgb2YgdGhlIENTdHJpbmcgYXJlIGNvcGllZCBpbnRvIGEgbmV3
IFdURjo6U3RyaW5nIGJlZm9yZSB0aGUgQ1N0cmluZyBpcyBkZXN0cm95ZWQuCisgICAgICAgIGRl
c2NyaXB0aW9uLmRlc2NyaXB0aW9uID0gbWVzc2FnZUNTdHJpbmcuZGF0YSgpOworICAgIH0KKwor
ICAgIEpTVmFsdWUgZXJyb3JPYmplY3Q7CisgICAgc3dpdGNoIChkZXNjcmlwdGlvbi50eXBlKSB7
CisgICAgY2FzZSBET01Db3JlRXhjZXB0aW9uVHlwZToKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKKyAgICBjYXNlIElEQkRhdGFiYXNlRXhjZXB0aW9uVHlwZToKKyNlbmRpZgorICAgICAg
ICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBET01Db3JlRXhjZXB0aW9u
OjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlRXhj
ZXB0aW9uVHlwZToKKyAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgRmlsZUV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU1FMRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgU1FMRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBTVkdFeGNlcHRpb25UeXBlOgorICAgICAgICBlcnJvck9i
amVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdFeGNlcHRpb246OmNyZWF0ZShkZXNj
cmlwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFhQYXRoRXhjZXB0aW9uVHlwZToK
KyAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgWFBhdGhFeGNl
cHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
CisgICAgQVNTRVJUKGVycm9yT2JqZWN0KTsKKyAgICBhZGRFcnJvckluZm8oZXhlYywgYXNPYmpl
Y3QoZXJyb3JPYmplY3QpLCB0cnVlKTsKKyAgICByZXR1cm4gZXJyb3JPYmplY3Q7Cit9CisKK0pT
VmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSBl
YywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIHJldHVybiBjcmVhdGVET01FeGNlcHRp
b24oZXhlYywgZWMsICZtZXNzYWdlKTsKK30KKworSlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24o
RXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQoreworICAgIHJldHVybiBj
cmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBleGNlcHRpb24uY29kZSgpLCBleGNlcHRpb24ucmVs
ZWFzZU1lc3NhZ2UoKSk7Cit9CisKK3ZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uU2xvd1BhdGgoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlv
biYmIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOwor
ICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9u
KHN0YXRlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpKTsKK30KKworYm9vbCBoYXNJdGVyYXRvck1ldGhv
ZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRv
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CisgICAgSlNWYWx1ZSBhcHBs
eU1ldGhvZCA9IG9iamVjdC0+Z2V0TWV0aG9kKCZzdGF0ZSwgY2FsbERhdGEsIGNhbGxUeXBlLCB2
bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgQVNDSUlMaXRlcmFsKCJTeW1ib2wuaXRl
cmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNhbGxhYmxlIikpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIGZhbHNlKTsKKworICAgIHJldHVybiAhYXBwbHlNZXRob2QuaXNVbmRlZmlu
ZWQoKTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFt
ZShFeGVjU3RhdGUmIHN0YXRlLCBGcmFtZSYgZnJhbWUsIFN0cmluZyYgbWVzc2FnZSkKK3sKKyAg
ICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoJnN0YXRlLCAm
ZnJhbWUsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIG1lc3NhZ2UgPSBmcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+Y3Jvc3NEb21haW5B
Y2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSkpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01X
aW5kb3coRXhlY1N0YXRlJiBzdGF0ZSwgRE9NV2luZG93JiBnbG9iYWxPYmplY3QsIFN0cmluZyYg
bWVzc2FnZSkKK3sKKyAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1Rv
RE9NV2luZG93KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3Ip
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBtZXNzYWdlID0gZ2xvYmFsT2JqZWN0LmNyb3Nz
RG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSog
ZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm47CisgICAgZnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5wcmludEVycm9y
TWVzc2FnZShtZXNzYWdlKTsKK30KKworU3RydWN0dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUo
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0lu
Zm8pCit7CisgICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9iYWxPYmplY3Qu
c3RydWN0dXJlcyhOb0xvY2tpbmdOZWNlc3NhcnkpOworICAgIHJldHVybiBzdHJ1Y3R1cmVzLmdl
dChjbGFzc0luZm8pLmdldCgpOworfQorCitTdHJ1Y3R1cmUqIGNhY2hlRE9NU3RydWN0dXJlKEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mbykKK3sKKyAgICBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdN
YXJraW5nKGdsb2JhbE9iamVjdC52bSgpLmhlYXAsIGdsb2JhbE9iamVjdC5nY0xvY2soKSk7Cisg
ICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9iYWxPYmplY3Quc3RydWN0dXJl
cyhsb2NrZXIpOworICAgIEFTU0VSVCghc3RydWN0dXJlcy5jb250YWlucyhjbGFzc0luZm8pKTsK
KyAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJhcnJpZXI8U3RydWN0
dXJlPihnbG9iYWxPYmplY3Qudm0oKSwgJmdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSkuaXRlcmF0
b3ItPnZhbHVlLmdldCgpOworfQorCitzdGF0aWMgY29uc3QgaW50MzJfdCBrTWF4SW50MzIgPSAw
eDdmZmZmZmZmOworc3RhdGljIGNvbnN0IGludDMyX3Qga01pbkludDMyID0gLWtNYXhJbnQzMiAt
IDE7CitzdGF0aWMgY29uc3QgdWludDMyX3Qga01heFVJbnQzMiA9IDB4ZmZmZmZmZmZVOworc3Rh
dGljIGNvbnN0IGludDY0X3Qga0pTTWF4SW50ZWdlciA9IDB4MjAwMDAwMDAwMDAwMDBMTCAtIDE7
IC8vIDJeNTMgLSAxLCBsYXJnZXN0IGludGVnZXIgZXhhY3RseSByZXByZXNlbnRhYmxlIGluIEVD
TUFTY3JpcHQuCisKK3N0YXRpYyBTdHJpbmcgcmFuZ2VFcnJvclN0cmluZyhkb3VibGUgdmFsdWUs
IGRvdWJsZSBtaW4sIGRvdWJsZSBtYXgpCit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlZhbHVl
ICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHZhbHVlKSwgIiBpcyBvdXRzaWRl
IHRoZSByYW5nZSBbIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWluKSwgIiwg
IiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWF4KSwgIl0iKTsKK30KKworc3Rh
dGljIGRvdWJsZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHgsIGRvdWJs
ZSBtaW5pbXVtLCBkb3VibGUgbWF4aW11bSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmIChzdGQ6
OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0
YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKyAgICB4ID0gdHJ1bmMoeCk7CisgICAgaWYgKHggPCBtaW5p
bXVtIHx8IHggPiBtYXhpbXVtKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHg7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
c3RydWN0IEludFR5cGVMaW1pdHMgeworfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBJbnRUeXBl
TGltaXRzPGludDhfdD4geworICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWluVmFsdWUgPSAtMTI4
OworICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWF4VmFsdWUgPSAxMjc7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKK307CisKK3RlbXBsYXRl
IDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0IHVp
bnQ4X3QgbWF4VmFsdWUgPSAyNTU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9m
VmFsdWVzID0gMjU2OyAvLyAyXjgKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxp
bWl0czxpbnQxNl90PiB7CisgICAgc3RhdGljIGNvbnN0IHNob3J0IG1pblZhbHVlID0gLTMyNzY4
OworICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtYXhWYWx1ZSA9IDMyNzY3OworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Cit9OworCit0ZW1w
bGF0ZSA8Pgorc3RydWN0IEludFR5cGVMaW1pdHM8dWludDE2X3Q+IHsKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgc2hvcnQgbWF4VmFsdWUgPSA2NTUzNTsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgorfTsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0
aW9uKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NpZ25lZDxU
Pjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBiZSB1
c2VkIGZvciBzaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKKworICAgIHR5cGVkZWYgSW50VHlwZUxp
bWl0czxUPiBMaW1pdHNUcmFpdDsKKyAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFs
cmVhZHkgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgorICAgIGlm
ICh2YWx1ZS5pc0ludDMyKCkpIHsKKyAgICAgICAgaW50MzJfdCBkID0gdmFsdWUuYXNJbnQzMigp
OworICAgICAgICBpZiAoZCA+PSBMaW1pdHNUcmFpdDo6bWluVmFsdWUgJiYgZCA8PSBMaW1pdHNU
cmFpdDo6bWF4VmFsdWUpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7Cisg
ICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6
CisgICAgICAgICAgICByZXR1cm4gZCA8IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA/IExpbWl0c1Ry
YWl0OjptaW5WYWx1ZSA6IExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKKyAgICAgICAgfQorICAgICAg
ICBkICU9IExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlczsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFQ+KGQgPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyBkIC0gTGltaXRzVHJhaXQ6Om51
bWJlck9mVmFsdWVzIDogZCk7CisgICAgfQorCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworCisgICAgc3dp
dGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgcmV0dXJuIGVuZm9yY2VSYW5n
ZShzdGF0ZSwgeCwgTGltaXRzVHJhaXQ6Om1pblZhbHVlLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUp
OworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsKKyAgICB9CisKKyAg
ICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6IGZsb29yKGZhYnMoeCkp
OworICAgIHggPSBmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyk7CisKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VD4oeCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/IHggLSBMaW1p
dHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiB4KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CitzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sK
KyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxUPjo6dmFs
dWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBiZSB1c2VkIGZv
ciB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOworCisgICAgdHlwZWRlZiBJbnRUeXBlTGltaXRz
PFQ+IExpbWl0c1RyYWl0OworICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFk
eSBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KKyAgICBpZiAo
dmFsdWUuaXNVSW50MzIoKSkgeworICAgICAgICB1aW50MzJfdCBkID0gdmFsdWUuYXNVSW50MzIo
KTsKKyAgICAgICAgaWYgKGQgPD0gTGltaXRzVHJhaXQ6Om1heFZhbHVlKQorICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKKyAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAg
ICAgIHJldHVybiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgMCk7CisKKyAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICBicmVhazsK
KyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgor
ICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBMaW1pdHNUcmFpdDo6bWF4
VmFsdWUpOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
KyAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsKKyAgICB9
CisKKyAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6IGZsb29yKGZh
YnMoeCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihmbW9kKHgsIExpbWl0c1RyYWl0Ojpu
dW1iZXJPZlZhbHVlcykpOworfQorCitpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50
PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZSk7Cit9CisKK3VpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8
dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZSk7Cit9CisKK2ludDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0
YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9CisK
K3VpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQorCisvLyBodHRwOi8vd3d3
LnczLm9yZy9UUi9XZWJJREwvI2VzLWJ5dGUKK2ludDhfdCB0b0ludDgoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3Rh
dGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisK
Ky8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtb2N0ZXQKK3VpbnQ4X3QgdG9VSW50
OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxs
ZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpOworfQorCitpbnQxNl90IHRvSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2
X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2UpOworfQorCit1aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90
PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlKTsKK30KKworaW50MTZfdCB0b0ludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKK3VpbnQxNl90
IHRvVUludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIv
V2ViSURMLyNlcy1zaG9ydAoraW50MTZfdCB0b0ludDE2KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKK30KKworLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1zaG9ydAordWludDE2X3QgdG9V
SW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9T
bWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8j
ZXMtbG9uZworaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAodmFsdWUuaXNJbnQzMigpKQor
ICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgZG91YmxlIHggPSB2YWx1ZS50
b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworICAg
IHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIGtNaW5JbnQzMiwga01heEludDMyKTsKK30K
KworaW50MzJfdCB0b0ludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQz
MigpOworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIHJldHVy
biBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88aW50MzJfdD4oeCk7Cit9CisKK3VpbnQzMl90
IHRvVUludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBp
ZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisK
KyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6
aXNuYW4oeCkgPyAwIDogY2xhbXBUbzx1aW50MzJfdD4oeCk7Cit9CisKKy8vIGh0dHA6Ly93d3cu
dzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9uZwordWludDMyX3QgdG9VSW50MzJFbmZv
cmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50
MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRl
LCB4LCAwLCBrTWF4VUludDMyKTsKK30KKworaW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdlKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0
ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAta0pTTWF4
SW50ZWdlciwga0pTTWF4SW50ZWdlcik7Cit9CisKK3VpbnQ2NF90IHRvVUludDY0RW5mb3JjZVJh
bmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAw
LCBrSlNNYXhJbnRlZ2VyKTsKK30KKworaW50NjRfdCB0b0ludDY0Q2xhbXAoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1i
ZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0aWNfY2FzdDxp
bnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgLWtKU01heEludGVn
ZXIpLCBrSlNNYXhJbnRlZ2VyKSk7Cit9CisKK3VpbnQ2NF90IHRvVUludDY0Q2xhbXAoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJsZSB4ID0gdmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+KHgsIDApLCBr
SlNNYXhJbnRlZ2VyKSk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMt
bG9uZy1sb25nCitpbnQ2NF90IHRvSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisKKyAgICAvLyBN
YXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFsdWVzIG1vZHVs
byAyXjY0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOworICAgIGRvdWJsZVRvSW50ZWdlcih4
LCBuKTsKKyAgICByZXR1cm4gbjsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURM
LyNlcy11bnNpZ25lZC1sb25nLWxvbmcKK3VpbnQ2NF90IHRvVUludDY0KEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOworCisgICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7IGNvbnZlcnQgZmlu
aXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbjsKKyAgICBk
b3VibGVUb0ludGVnZXIoeCwgbik7CisgICAgcmV0dXJuIG47Cit9CisKK2NsYXNzIEdldENhbGxl
ckdsb2JhbE9iamVjdEZ1bmN0b3IgeworcHVibGljOgorICAgIEdldENhbGxlckdsb2JhbE9iamVj
dEZ1bmN0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRv
cigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9o
YXNTa2lwcGVkRmlyc3RGcmFtZSkgeworICAgICAgICAgICAgbV9oYXNTa2lwcGVkRmlyc3RGcmFt
ZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChhdXRvKiBjb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxv
Y2soKSkKKyAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodmlzaXRvci0+Y2FsbGVl
KCkpOworICAgICAgICAgICAgLy8gRklYTUU6IENhbGxlZSBpcyBub3QgYW4gb2JqZWN0IGlmIHRo
ZSBjYWxsZXIgaXMgV2ViIEFzc2VtYmx5LgorICAgICAgICAgICAgLy8gRmlndXJlIG91dCB3aGF0
IHRvIGRvIGhlcmUuIFdlIGNhbiBwcm9iYWJseSBnZXQgdGhlIGdsb2JhbCBvYmplY3QKKyAgICAg
ICAgICAgIC8vIGZyb20gdGhlIHRvcC1tb3N0IFdhc20gSW5zdGFuY2UuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MjEKKyAgICAgICAgICAgIGlmICh2aXNpdG9y
LT5jYWxsZWUoKS0+aXNPYmplY3QoKSkKKyAgICAgICAgICAgICAgICBtX2dsb2JhbE9iamVjdCA9
IGpzQ2FzdDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICB9CisKKyAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxP
YmplY3Q7IH0KKworcHJpdmF0ZToKKyAgICBtdXRhYmxlIGJvb2wgbV9oYXNTa2lwcGVkRmlyc3RG
cmFtZSB7IGZhbHNlIH07CisgICAgbXV0YWJsZSBKU0dsb2JhbE9iamVjdCogbV9nbG9iYWxPYmpl
Y3QgeyBudWxscHRyIH07Cit9OworCitET01XaW5kb3cmIGNhbGxlckRPTVdpbmRvdyhFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvciBpdGVyOworICAg
IGV4ZWMtPml0ZXJhdGUoaXRlcik7CisgICAgcmV0dXJuIGl0ZXIuZ2xvYmFsT2JqZWN0KCkgPyBh
c0pTRE9NV2luZG93KGl0ZXIuZ2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCkgOiBmaXJzdERPTVdp
bmRvdyhleGVjKTsKK30KKworRE9NV2luZG93JiBhY3RpdmVET01XaW5kb3coRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSktPndyYXBwZWQoKTsKK30KKworRE9NV2luZG93JiBmaXJzdERPTVdpbmRvdyhFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+dm1FbnRyeUdsb2Jh
bE9iamVjdCgpKS0+d3JhcHBlZCgpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY2FuQWNjZXNz
RG9jdW1lbnQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEb2N1bWVudCogdGFyZ2V0RG9jdW1lbnQs
IFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKK3sKKyAgICBWTSYgdm0g
PSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBpZiAoIXRhcmdldERvY3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBET01XaW5kb3cmIGFjdGl2ZSA9IGFjdGl2ZURPTVdpbmRvdyhzdGF0ZSk7CisKKyAgICBpZiAo
YWN0aXZlLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkuY2FuQWNjZXNzKHRhcmdldERvY3Vt
ZW50LT5zZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBzd2l0
Y2ggKHJlcG9ydGluZ09wdGlvbikgeworICAgIGNhc2UgVGhyb3dTZWN1cml0eUVycm9yOgorICAg
ICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKnN0YXRlLCBzY29wZSwgdGFyZ2V0RG9jdW1lbnQtPmRv
bVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBMb2dTZWN1cml0eUVycm9yOgorICAgICAgICBwcmludEVycm9y
TWVzc2FnZUZvckZyYW1lKHRhcmdldERvY3VtZW50LT5mcmFtZSgpLCB0YXJnZXREb2N1bWVudC0+
ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcjoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IERPTVdpbmRvdyYgdGFyZ2V0LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRp
b24pCit7CisgICAgcmV0dXJuIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJnZXQuZG9jdW1l
bnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3Vs
ZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEZyYW1lKiB0YXJnZXQs
IFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKK3sKKyAgICByZXR1cm4g
dGFyZ2V0ICYmIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJnZXQtPmRvY3VtZW50KCksIHJl
cG9ydGluZ09wdGlvbik7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0Fj
Y2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIE5vZGUqIHRhcmdldCkKK3sKKyAgICBy
ZXR1cm4gIXRhcmdldCB8fCBjYW5BY2Nlc3NEb2N1bWVudCgmc3RhdGUsICZ0YXJnZXQtPmRvY3Vt
ZW50KCksIExvZ1NlY3VyaXR5RXJyb3IpOworfQorICAgIAorc3RhdGljIEVuY29kZWRKU1ZhbHVl
IHRocm93VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKK30KKworc3RhdGljIHZvaWQg
YXBwZW5kQXJndW1lbnRNdXN0QmUoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgdW5zaWduZWQgYXJn
dW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZh
Y2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7CisgICAgYnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJBcmd1bWVudCAiKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcihhcmd1bWVudElu
ZGV4ICsgMSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgKCciKTsKKyAgICBidWlsZGVy
LmFwcGVuZChhcmd1bWVudE5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJykgdG8g
Iik7CisgICAgaWYgKCFmdW5jdGlvbk5hbWUpIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJ0aGUgIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5hbWUpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBjb25zdHJ1Y3RvciIpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5hbWUpOworICAgICAgICBidWlsZGVy
LmFwcGVuZCgnLicpOworICAgICAgICBidWlsZGVyLmFwcGVuZChmdW5jdGlvbk5hbWUpOworICAg
IH0KKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBtdXN0IGJlICIpOworfQorCitKU0M6OkVu
Y29kZWRKU1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUpCit7CisgICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihz
dGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cisg
ICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxl
dmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9w
ZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNlTmFtZSwgIiBv
YmplY3QuIikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9
CisgICAgCit2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUpCit7CisgICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihz
dGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cisg
ICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxl
dmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIHNldCBwcm9wZXJ0
eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNlTmFtZSwgIiBvYmpl
Y3QuIikpOworfQorCit2b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhj
ZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4
Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSKSk7Cit9CisKK3ZvaWQgdGhyb3dOb3RT
dXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24o
KSk7CisgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7CisgICAgdGhyb3dFeGNlcHRp
b24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRF
RF9FUlIsICZtZXNzYWdlU3RyaW5nKSk7Cit9CisKK3ZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNo
YXIqIG1lc3NhZ2UpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgU3Ry
aW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBz
Y29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5WQUxJRF9TVEFURV9FUlIsICZtZXNz
YWdlU3RyaW5nKSk7Cit9CisKK3ZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQor
eworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZz
dGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNFQ1VSSVRZX0VSUiwgbWVz
c2FnZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVt
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNp
Z25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIq
IGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBj
aGFyKiBleHBlY3RlZFZhbHVlcykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAg
YXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1l
LCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7CisgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJvbmUgb2Y6ICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVmFsdWVz
KTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRv
U3RyaW5nKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVG
dW5jdGlvbkVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25z
dCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7CisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIs
IGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgaW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1l
KTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImEgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOworfQor
CitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4
LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUp
Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJl
KGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgZnVuY3Rpb25JbnRlcmZhY2VO
YW1lLCBmdW5jdGlvbk5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYW4gaW5zdGFu
Y2Ugb2YgIik7CisgICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRUeXBlKTsKKyAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOworfQor
Cit2b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBBcnJheSBlbGVtZW50IHR5cGUiKSk7Cit9CisKK3Zv
aWQgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBh
dHRyaWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCit7CisgICAgdGhyb3dUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4n
LCBhdHRyaWJ1dGVOYW1lLCAiIGF0dHJpYnV0ZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICIsIGV4
cGVjdGVkVHlwZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1i
ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29u
c3QgY2hhciogZXhwZWN0ZWRUeXBlKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIk1lbWJlciAiKTsKKyAgICBidWlsZGVyLmFwcGVuZChk
aWN0aW9uYXJ5TmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmQoJy4nKTsKKyAgICBidWlsZGVyLmFw
cGVuZChtZW1iZXJOYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBpcyByZXF1aXJl
ZCBhbmQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZChleHBl
Y3RlZFR5cGUpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1
aWxkZXIudG9TdHJpbmcoKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1
Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFt
ZSkKK3sKKyAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZVJlZmVy
ZW5jZUVycm9yKCZzdGF0ZSwgbWFrZVN0cmluZyhpbnRlcmZhY2VOYW1lLCAiIGNvbnN0cnVjdG9y
IGFzc29jaWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKSkpOworfQorCit2
b2lkIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKQoreworICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVND
SUlMaXRlcmFsKCJWYWx1ZSBpcyBub3QgYSBzZXF1ZW5jZSIpKTsKK30KKwordm9pZCB0aHJvd05v
bkZpbml0ZVR5cGVFcnJvcihFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KQoreworICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVGhl
IHByb3ZpZGVkIHZhbHVlIGlzIG5vbi1maW5pdGUiKSk7Cit9CisKK1N0cmluZyBtYWtlR2V0dGVy
VHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBh
dHRyaWJ1dGVOYW1lKQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNl
TmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGdldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGlu
c3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0
aHJvd0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0
ZU5hbWUpCit7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgbWFr
ZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgYXR0cmlidXRlTmFtZSkpOwor
fQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogYXR0cmlidXRlTmFtZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlUmVqZWN0ZWRQcm9taXNl
V2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNl
TmFtZSwgYXR0cmlidXRlTmFtZSkpOworfQorCitib29sIHRocm93U2V0dGVyVHlwZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKK3sKKyAgICB0aHJvd1R5
cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAn
LicsIGF0dHJpYnV0ZU5hbWUsICIgc2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2Vz
IG9mICIsIGludGVyZmFjZU5hbWUpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBt
YWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJDYW4gb25seSBj
YWxsICIsIGludGVyZmFjZU5hbWUsICcuJywgZnVuY3Rpb25OYW1lLCAiIG9uIGluc3RhbmNlcyBv
ZiAiLCBpbnRlcmZhY2VOYW1lKTsKK30KKworRW5jb2RlZEpTVmFsdWUgdGhyb3dUaGlzVHlwZUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIHJl
dHVybiB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2Fn
ZShpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1
ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiBwcm9taXNl
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lKQorewor
ICAgIHByb21pc2UucmVqZWN0KFR5cGVFcnJvciwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGlu
dGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRo
VGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFj
ZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZVJlamVj
dGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShp
bnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7Cit9CisKK3ZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1
cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0JiB0aGlz
T2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQoreworICAgIEpTQzo6Q2FsbERhdGEg
Y2FsbERhdGE7CisgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEo
JmZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpO
b25lKTsKKworICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgSlND
OjpjYWxsKCZzdGF0ZSwgJmZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsICZ0aGlzT2JqZWN0
LCBhcmd1bWVudHMpOworfQorCit2b2lkIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9y
KQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JKU0J1aWx0
aW5PYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luaXRpYWxpemVGdW5jdGlvbik7
Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVF
cnJvcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldycgb3Bl
cmF0b3IiKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Cit9CisKK0Nh
bGxUeXBlIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0
YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbFRocm93
VHlwZUVycm9yOworICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsKK30KKwordm9pZCB0aHJvd0RP
TVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTWU5UQVhfRVJSKSk7
Cit9CisKK3ZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7
CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZz
dGF0ZSwgREFUQV9DTE9ORV9FUlIpKTsKK30KKwordm9pZCB0aHJvd0luZGV4U2l6ZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3Bl
LCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTkRFWF9TSVpFX0VSUikpOworfQorCit2b2lk
IHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRo
cm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFRZ
UEVfTUlTTUFUQ0hfRVJSKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAJKHJldmlzaW9uIDIx
MTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNzAgKzIwLDMyIEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKIAogI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1
ZGUgIkNvbW1vblZNLmgiCi0jaW5jbHVkZSAiRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVh
ZGVycy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkludGVyZmFjZXMuaCIKLSNpbmNsdWRlICJGcmFt
ZS5oIgotI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFz
ZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgogI2luY2x1ZGUgIkpTRE9N
UHJvbWlzZS5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCisjaW5jbHVkZSAiSlNE
T01XaW5kb3cuaCIKKyNpbmNsdWRlICJKU0R5bmFtaWNEb3duY2FzdC5oIgogI2luY2x1ZGUgIkpT
RXhjZXB0aW9uQmFzZS5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSA8
Ynl0ZWNvZGUvQ29kZUJsb2NrLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFj
ay5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9FcnJvckhhbmRsaW5nU2NvcGUuaD4KLSNpbmNsdWRlIDxydW50
aW1lL0Vycm9ySW5zdGFuY2UuaD4KICNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbi5oPgogI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNG
dW5jdGlvbi5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
KyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1
Y3Rvck9iamVjdCk7Ci1TVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9N
Q29uc3RydWN0b3JXaXRoRG9jdW1lbnQpOwotCi12b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0
IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQotewotICAgIGNvbW1vblZNKCkuYWRkSW1wdXJl
UHJvcGVydHkocHJvcGVydHlOYW1lKTsKLX0KLQotSlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxs
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQotewotICAgIGlmIChzLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgcmV0dXJuIGpzT3duZWRTdHJpbmcoZXhl
Yywgcyk7Ci19Ci0KLUpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFN0cmluZyYgcykKLXsKLSAgICBpZiAocy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHMpOwot
fQotCi1KU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCi17
Ci0gICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Ci19Ci0K
LUpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVSTCYg
dXJsKQotewotICAgIGlmICh1cmwuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkpOwot
fQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgU3RyaW5nJiYgc3RyaW5nKQotewotICAgIGlm
ICghc3RyaW5nLmNvbnRhaW5zT25seUxhdGluMSgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVy
biBzdHJpbmc7Ci19Ci0KLVN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCi17Ci0gICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICBTdHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmcoKTsKLSAgICByZXR1cm4gc3RyaW5n
VG9CeXRlU3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotU3RyaW5n
IHZhbHVlVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRl
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgcmV0dXJuIHN0
cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgYm9vbCBoYXNVbnBhaXJlZFN1cnJvZ2F0ZShTdHJpbmdWaWV3IHN0cmluZykK
LXsKLSAgICAvLyBGYXN0IHBhdGggZm9yIDgtYml0IHN0cmluZ3M7IHRoZXkgY2FuJ3QgaGF2ZSBh
bnkgc3Vycm9nYXRlcy4KLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsK
LSAgICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIFN0
cmluZyBzdHJpbmdUb1VTVlN0cmluZyhTdHJpbmcmJiBzdHJpbmcpCi17Ci0gICAgLy8gRmFzdCBw
YXRoIGZvciB0aGUgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbm8gdW5wYWlyZWQgc3Vycm9nYXRlcy4K
LSAgICBpZiAoIWhhc1VucGFpcmVkU3Vycm9nYXRlKHN0cmluZykpCi0gICAgICAgIHJldHVybiBz
dHJpbmc7Ci0KLSAgICAvLyBTbG93IHBhdGg6IGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlk
bC8jZGZuLW9idGFpbi11bmljb2RlCi0gICAgLy8gUmVwbGFjZXMgdW5wYWlyZWQgc3Vycm9nYXRl
cyB3aXRoIHRoZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCi0gICAgU3RyaW5nQnVpbGRlciByZXN1
bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShzdHJpbmcubGVuZ3RoKCkpOwotICAgIFN0
cmluZ1ZpZXcgdmlldyB7IHN0cmluZyB9OwotICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiB2aWV3
LmNvZGVQb2ludHMoKSkgewotICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkK
LSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVQb2ludCk7Ci0gICAgfQotICAg
IHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLX0KLQotU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0
cmluZyhFeGVjU3RhdGUmLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotewotICAgIFN0
cmluZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOwotICAgIHJldHVybiBzdHJpbmdUb1VT
VlN0cmluZyhXVEZNb3ZlKHN0cmluZykpOwotfQotCi1TdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgU3Ry
aW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZN
b3ZlKHN0cmluZykpOwotfQotCi1KU1ZhbHVlIGpzRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJs
ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0oKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKLX0K
LQotZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzTnVtYmVy
KCk7Ci0gICAgaWYgKCF2YWx1ZS5pbmhlcml0cyhleGVjLT52bSgpLCBEYXRlSW5zdGFuY2U6Omlu
Zm8oKSkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0
X05hTigpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50b09i
amVjdChleGVjKSktPmludGVybmFsTnVtYmVyKCk7Ci19Ci0KIHZvaWQgcmVwb3J0RXhjZXB0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgQ2FjaGVkU2NyaXB0KiBj
YWNoZWRTY3JpcHQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTIyOSwxMiArOTEs
MTIgQEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgRXJy
b3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoZXhlYy0+dm0oKSk7CiAKLSAgICBSZWZQdHI8U2Ny
aXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlv
bihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2Fw
dHVyZSkpOworICAgIGF1dG8gY2FsbFN0YWNrID0gSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRDYWxs
U3RhY2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgSW5zcGVjdG9yOjpTY3JpcHRDYWxs
U3RhY2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUpOwogICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CiAgICAgdm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7CiAKLSAgICBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IGpzRHlu
YW1pY0Rvd25jYXN0PEpTRE9NV2luZG93Kj4odm0sIGdsb2JhbE9iamVjdCkpIHsKKyAgICBhdXRv
KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOworICAgIGlmIChhdXRvKiB3aW5kb3cgPSBqc0R5bmFtaWNEb3duY2Fz
dDxKU0RPTVdpbmRvdyo+KHZtLCBnbG9iYWxPYmplY3QpKSB7CiAgICAgICAgIGlmICghd2luZG93
LT53cmFwcGVkKCkuaXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMjQyLDE1ICsxMDQsMTQgQEAgdm9pZCByZXBvcnRFeGNlcHRpb24o
RXhlY1N0YXRlKiBleGVjLCBKUwogICAgIGludCBsaW5lTnVtYmVyID0gMDsKICAgICBpbnQgY29s
dW1uTnVtYmVyID0gMDsKICAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJMOwotICAgIGlmIChj
b25zdCBTY3JpcHRDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxTdGFjay0+Zmlyc3ROb25OYXRp
dmVDYWxsRnJhbWUoKSkgeworICAgIGlmIChhdXRvKiBjYWxsRnJhbWUgPSBjYWxsU3RhY2stPmZp
cnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgbGluZU51bWJlciA9IGNhbGxGcmFt
ZS0+bGluZU51bWJlcigpOwogICAgICAgICBjb2x1bW5OdW1iZXIgPSBjYWxsRnJhbWUtPmNvbHVt
bk51bWJlcigpOwogICAgICAgICBleGNlcHRpb25Tb3VyY2VVUkwgPSBjYWxsRnJhbWUtPnNvdXJj
ZVVSTCgpOwogICAgIH0KIAotICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSByZXRyaWV2ZUVycm9y
TWVzc2FnZSgqZXhlYywgdm0sIGV4Y2VwdGlvbi0+dmFsdWUoKSwgc2NvcGUpOwotICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3Qt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5y
ZXBvcnRFeGNlcHRpb24oZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGV4
Y2VwdGlvblNvdXJjZVVSTCwgZXhjZXB0aW9uLCBjYWxsU3RhY2stPnNpemUoKSA/IGNhbGxTdGFj
ayA6IG51bGxwdHIsIGNhY2hlZFNjcmlwdCk7CisgICAgYXV0byBlcnJvck1lc3NhZ2UgPSByZXRy
aWV2ZUVycm9yTWVzc2FnZSgqZXhlYywgdm0sIGV4Y2VwdGlvbi0+dmFsdWUoKSwgc2NvcGUpOwor
ICAgIGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5yZXBvcnRFeGNlcHRp
b24oZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGV4Y2VwdGlvblNvdXJj
ZVVSTCwgZXhjZXB0aW9uLCBjYWxsU3RhY2stPnNpemUoKSA/IGNhbGxTdGFjay5wdHIoKSA6IG51
bGxwdHIsIGNhY2hlZFNjcmlwdCk7CiAKICAgICBpZiAoZXhjZXB0aW9uRGV0YWlscykgewogICAg
ICAgICBleGNlcHRpb25EZXRhaWxzLT5tZXNzYWdlID0gZXJyb3JNZXNzYWdlOwpAQCAtMzQ3LDQ2
MyArMjA4LDYgQEAgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZQogICAg
IEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgdGhyb3dFeGNlcHRpb24oJnN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVET01FeGNlcHRpb24oc3RhdGUsIFdURk1vdmUoZXhjZXB0
aW9uKSkpOwogfQotCi1ib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoIXZhbHVl
LmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBD
YWxsVHlwZSBjYWxsVHlwZTsKLSAgICBKU1ZhbHVlIGFwcGx5TWV0aG9kID0gb2JqZWN0LT5nZXRN
ZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJh
dG9yU3ltYm9sLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC5pdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQg
YmUgY2FsbGFibGUiKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwot
Ci0gICAgcmV0dXJuICFhcHBseU1ldGhvZC5pc1VuZGVmaW5lZCgpOwotfQotCi1ib29sIEJpbmRp
bmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEV4ZWNTdGF0ZSYgc3RhdGUsIEZy
YW1lJiBmcmFtZSwgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsICZmcmFtZSwgRG9Ob3RSZXBvcnRTZWN1
cml0eUVycm9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgbWVzc2FnZSA9IGZyYW1lLmRv
Y3VtZW50KCktPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3Rp
dmVET01XaW5kb3coJnN0YXRlKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJpbmRp
bmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhFeGVjU3RhdGUmIHN0YXRl
LCBET01XaW5kb3cmIGdsb2JhbE9iamVjdCwgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChC
aW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRlLCBnbG9i
YWxPYmplY3QsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIG1lc3NhZ2UgPSBnbG9iYWxPYmplY3QuY3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3Nh
Z2UoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9p
ZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQotewotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBmcmFtZS0+
ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPnByaW50RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOwotfQot
Ci1TdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0LCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKLXsKLSAgICBKU0RPTVN0cnVj
dHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5zdHJ1Y3R1cmVzKE5vTG9ja2luZ05l
Y2Vzc2FyeSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZXMuZ2V0KGNsYXNzSW5mbykuZ2V0KCk7Ci19
Ci0KLVN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
KQotewotICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtpbmcoZ2xvYmFsT2JqZWN0LnZt
KCkuaGVhcCwgZ2xvYmFsT2JqZWN0LmdjTG9jaygpKTsKLSAgICBKU0RPTVN0cnVjdHVyZU1hcCYg
c3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5zdHJ1Y3R1cmVzKGxvY2tlcik7Ci0gICAgQVNTRVJU
KCFzdHJ1Y3R1cmVzLmNvbnRhaW5zKGNsYXNzSW5mbykpOwotICAgIHJldHVybiBzdHJ1Y3R1cmVz
LnNldChjbGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC52bSgp
LCAmZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci19Ci0K
LXN0YXRpYyBjb25zdCBpbnQzMl90IGtNYXhJbnQzMiA9IDB4N2ZmZmZmZmY7Ci1zdGF0aWMgY29u
c3QgaW50MzJfdCBrTWluSW50MzIgPSAta01heEludDMyIC0gMTsKLXN0YXRpYyBjb25zdCB1aW50
MzJfdCBrTWF4VUludDMyID0gMHhmZmZmZmZmZlU7Ci1zdGF0aWMgY29uc3QgaW50NjRfdCBrSlNN
YXhJbnRlZ2VyID0gMHgyMDAwMDAwMDAwMDAwMExMIC0gMTsgLy8gMl41MyAtIDEsIGxhcmdlc3Qg
aW50ZWdlciBleGFjdGx5IHJlcHJlc2VudGFibGUgaW4gRUNNQVNjcmlwdC4KLQotc3RhdGljIFN0
cmluZyByYW5nZUVycm9yU3RyaW5nKGRvdWJsZSB2YWx1ZSwgZG91YmxlIG1pbiwgZG91YmxlIG1h
eCkKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiVmFsdWUgIiwgU3RyaW5nOjpudW1iZXJUb1N0
cmluZ0VDTUFTY3JpcHQodmFsdWUpLCAiIGlzIG91dHNpZGUgdGhlIHJhbmdlIFsiLCBTdHJpbmc6
Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtaW4pLCAiLCAiLCBTdHJpbmc6Om51bWJlclRvU3Ry
aW5nRUNNQVNjcmlwdChtYXgpLCAiXSIpOwotfQotCi1zdGF0aWMgZG91YmxlIGVuZm9yY2VSYW5n
ZShFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgeCwgZG91YmxlIG1pbmltdW0sIGRvdWJsZSBtYXhp
bXVtKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2lu
Zih4KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5nZUVycm9y
U3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIHggPSB0cnVuYyh4KTsKLSAgICBpZiAoeCA8IG1pbmltdW0gfHwgeCA+IG1heGltdW0pIHsK
LSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4
LCBtaW5pbXVtLCBtYXhpbXVtKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1
cm4geDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0cyB7
Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8aW50OF90PiB7Ci0gICAg
c3RhdGljIGNvbnN0IGludDhfdCBtaW5WYWx1ZSA9IC0xMjg7Ci0gICAgc3RhdGljIGNvbnN0IGlu
dDhfdCBtYXhWYWx1ZSA9IDEyNzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZW
YWx1ZXMgPSAyNTY7IC8vIDJeOAotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGlt
aXRzPHVpbnQ4X3Q+IHsKLSAgICBzdGF0aWMgY29uc3QgdWludDhfdCBtYXhWYWx1ZSA9IDI1NTsK
LSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAot
fTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzPGludDE2X3Q+IHsKLSAgICBz
dGF0aWMgY29uc3Qgc2hvcnQgbWluVmFsdWUgPSAtMzI3Njg7Ci0gICAgc3RhdGljIGNvbnN0IHNo
b3J0IG1heFZhbHVlID0gMzI3Njc7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9m
VmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlw
ZUxpbWl0czx1aW50MTZfdD4gewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtYXhW
YWx1ZSA9IDY1NTM1OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9
IDY1NTM2OyAvLyAyXjE2Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxp
bmUgVCB0b1NtYWxsZXJJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0K
LSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2lu
dGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHNpZ25lZCBpbnRlZ3Jh
bCB0eXBlcyIpOwotCi0gICAgdHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0Owot
ICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCBzaWduZWQg
aW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCi0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkgewot
ICAgICAgICBpbnQzMl90IGQgPSB2YWx1ZS5hc0ludDMyKCk7Ci0gICAgICAgIGlmIChkID49IExp
bWl0c1RyYWl0OjptaW5WYWx1ZSAmJiBkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKLSAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKLSAgICAgICAgc3dpdGNoIChjb25maWd1
cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiBk
IDwgTGltaXRzVHJhaXQ6Om1pblZhbHVlID8gTGltaXRzVHJhaXQ6Om1pblZhbHVlIDogTGltaXRz
VHJhaXQ6Om1heFZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIGQgJT0gTGltaXRzVHJhaXQ6Om51
bWJlck9mVmFsdWVzOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCA+IExpbWl0c1Ry
YWl0OjptYXhWYWx1ZSA/IGQgLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiBkKTsKLSAg
ICB9Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0KLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
LSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgotICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBMaW1pdHNUcmFp
dDo6bWluVmFsdWUsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7Ci0gICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICByZXR1cm4gc3RkOjppc25hbih4
KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOwotICAgIH0KLQotICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8
IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgeCA9IHggPCAw
ID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7Ci0gICAgeCA9IGZtb2QoeCwgTGlt
aXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih4
ID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8geCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVl
cyA6IHgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgVCB0b1Nt
YWxsZXJVSW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFs
PFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHVuc2lnbmVkIGludGVncmFsIHR5
cGVzIik7Ci0KLSAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4gTGltaXRzVHJhaXQ7Ci0gICAg
Ly8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0IHVuc2lnbmVkIGlu
dGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKSB7Ci0g
ICAgICAgIHVpbnQzMl90IGQgPSB2YWx1ZS5hc1VJbnQzMigpOwotICAgICAgICBpZiAoZCA8PSBM
aW1pdHNUcmFpdDo6bWF4VmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4o
ZCk7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KGQpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIExpbWl0c1RyYWl0
OjptYXhWYWx1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLQotICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgIHJldHVybiBlbmZvcmNl
UmFuZ2Uoc3RhdGUsIHgsIDAsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7Ci0gICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICByZXR1cm4gc3RkOjpp
c25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOwotICAgIH0KLQotICAgIGlmIChzdGQ6OmlzbmFu
KHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgeCA9
IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKSk7Ci19Ci0K
LWludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotdWlu
dDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotaW50
OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKLX0KLQotdWludDhfdCB0b1VJbnQ4Q2xhbXAo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1Nt
YWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMt
Ynl0ZQotaW50OF90IHRvSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvV2ViSURMLyNlcy1vY3RldAotdWludDhfdCB0b1VJbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUs
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLWlu
dDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLXVpbnQxNl90
IHRvVUludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17
Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi1pbnQxNl90IHRv
SW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVy
biB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wKTsKLX0KLQotdWludDE2X3QgdG9VSW50MTZDbGFtcChFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVp
bnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xh
bXApOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXNob3J0Ci1pbnQx
Nl90IHRvSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJ
REwvI2VzLXVuc2lnbmVkLXNob3J0Ci11aW50MTZfdCB0b1VJbnQxNihFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90Pihz
dGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0K
LQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nCi1pbnQzMl90IHRvSW50
MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5h
c0ludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShz
dGF0ZSwgeCwga01pbkludDMyLCBrTWF4SW50MzIpOwotfQotCi1pbnQzMl90IHRvSW50MzJDbGFt
cChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc0lu
dDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9
IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDog
Y2xhbXBUbzxpbnQzMl90Pih4KTsKLX0KLQotdWludDMyX3QgdG9VSW50MzJDbGFtcChFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQot
ICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRv
PHVpbnQzMl90Pih4KTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11
bnNpZ25lZC1sb25nCi11aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKHZhbHVlLmlzVUlu
dDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgZG91YmxlIHgg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IDApOwotICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtNYXhVSW50MzIpOwot
fQotCi1pbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJl
dHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIC1rSlNNYXhJbnRlZ2VyLCBrSlNNYXhJbnRlZ2Vy
KTsKLX0KLQotdWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgZG91YmxlIHggPSB2YWx1
ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwot
ICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtKU01heEludGVnZXIpOwotfQot
Ci1pbnQ2NF90IHRvSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCi17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVy
biBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bWluPGRvdWJs
ZT4oc3RkOjptYXg8ZG91YmxlPih4LCAta0pTTWF4SW50ZWdlciksIGtKU01heEludGVnZXIpKTsK
LX0KLQotdWludDY0X3QgdG9VSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAg
IHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om1p
bjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgMCksIGtKU01heEludGVnZXIpKTsKLX0KLQot
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nLWxvbmcKLWludDY0X3QgdG9J
bnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0g
dmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLQotICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0
eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCi0gICAgdW5zaWduZWQg
bG9uZyBsb25nIG47Ci0gICAgZG91YmxlVG9JbnRlZ2VyKHgsIG4pOwotICAgIHJldHVybiBuOwot
fQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmctbG9u
ZwotdWludDY0X3QgdG9VSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0KLSAgICAvLyBNYXAgTmFO
cyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0
LgotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOwotICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsK
LSAgICByZXR1cm4gbjsKLX0KLQotY2xhc3MgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvciB7
Ci1wdWJsaWM6Ci0gICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvcigpID0gZGVmYXVsdDsK
LQotICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNp
dG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX2hhc1NraXBwZWRGaXJzdEZyYW1lKSB7
Ci0gICAgICAgICAgICBtX2hhc1NraXBwZWRGaXJzdEZyYW1lID0gdHJ1ZTsKLSAgICAgICAgICAg
IHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGF1dG8qIGNvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpKQotICAgICAgICAgICAgbV9n
bG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIEFTU0VSVCh2aXNpdG9yLT5jYWxsZWUoKSk7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogQ2FsbGVlIGlzIG5vdCBhbiBvYmplY3QgaWYgdGhlIGNhbGxlciBpcyBXZWIgQXNzZW1i
bHkuCi0gICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gaGVyZS4gV2UgY2FuIHBy
b2JhYmx5IGdldCB0aGUgZ2xvYmFsIG9iamVjdAotICAgICAgICAgICAgLy8gZnJvbSB0aGUgdG9w
LW1vc3QgV2FzbSBJbnN0YW5jZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTcyMQotICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxlZSgpLT5pc09iamVjdCgp
KQotICAgICAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odmlz
aXRvci0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gU3RhY2tWaXNpdG9yOjpEb25lOwotICAgIH0KLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdDsgfQotCi1wcml2YXRlOgot
ICAgIG11dGFibGUgYm9vbCBtX2hhc1NraXBwZWRGaXJzdEZyYW1lIHsgZmFsc2UgfTsKLSAgICBt
dXRhYmxlIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdCB7IG51bGxwdHIgfTsKLX07Ci0K
LURPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBHZXRD
YWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yIGl0ZXI7Ci0gICAgZXhlYy0+aXRlcmF0ZShpdGVyKTsK
LSAgICByZXR1cm4gaXRlci5nbG9iYWxPYmplY3QoKSA/IGFzSlNET01XaW5kb3coaXRlci5nbG9i
YWxPYmplY3QoKSktPndyYXBwZWQoKSA6IGZpcnN0RE9NV2luZG93KGV4ZWMpOwotfQotCi1ET01X
aW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGFz
SlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOwotfQot
Ci1ET01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1
cm4gYXNKU0RPTVdpbmRvdyhleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5BY2Nlc3NEb2N1bWVudChKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIERvY3VtZW50KiB0YXJnZXREb2N1bWVudCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRp
b24gcmVwb3J0aW5nT3B0aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmICghdGFyZ2V0RG9j
dW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIERPTVdpbmRvdyYgYWN0aXZlID0g
YWN0aXZlRE9NV2luZG93KHN0YXRlKTsKLQotICAgIGlmIChhY3RpdmUuZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKS5jYW5BY2Nlc3ModGFyZ2V0RG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHN3aXRjaCAocmVwb3J0aW5nT3B0aW9uKSB7
Ci0gICAgY2FzZSBUaHJvd1NlY3VyaXR5RXJyb3I6Ci0gICAgICAgIHRocm93U2VjdXJpdHlFcnJv
cigqc3RhdGUsIHNjb3BlLCB0YXJnZXREb2N1bWVudC0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWlu
QWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExv
Z1NlY3VyaXR5RXJyb3I6Ci0gICAgICAgIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUodGFyZ2V0
RG9jdW1lbnQtPmZyYW1lKCksIHRhcmdldERvY3VtZW50LT5kb21XaW5kb3coKS0+Y3Jvc3NEb21h
aW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yOgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vz
c1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRE9NV2luZG93JiB0YXJnZXQsIFNl
Y3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKLXsKLSAgICByZXR1cm4gY2Fu
QWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC5kb2N1bWVudCgpLCByZXBvcnRpbmdPcHRpb24p
OwotfQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgRnJhbWUqIHRhcmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRp
b24gcmVwb3J0aW5nT3B0aW9uKQotewotICAgIHJldHVybiB0YXJnZXQgJiYgY2FuQWNjZXNzRG9j
dW1lbnQoc3RhdGUsIHRhcmdldC0+ZG9jdW1lbnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKLX0KLQot
Ym9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgTm9kZSogdGFyZ2V0KQotewotICAgIHJldHVybiAhdGFyZ2V0IHx8IGNhbkFj
Y2Vzc0RvY3VtZW50KCZzdGF0ZSwgJnRhcmdldC0+ZG9jdW1lbnQoKSwgTG9nU2VjdXJpdHlFcnJv
cik7Ci19CiAgICAgCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdGhyb3dUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSkKIHsKQEAgLTk3Myw0MCArMzc3LDYgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBy
ZWplY3RQcm9taXNlV2l0aFRoaQogICAgIHJldHVybiBjcmVhdGVSZWplY3RlZFByb21pc2VXaXRo
VHlwZUVycm9yKHN0YXRlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwg
bWV0aG9kTmFtZSkpOwogfQogCi12b2lkIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRz
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgSlNDOjpK
U0Z1bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwotICAg
IEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENhbGxEYXRhKCZmdW5jdGlvbiwgY2Fs
bERhdGEpOwotICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7Ci0KLSAgICBK
U0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc3RhdGUuYXJndW1lbnRDb3VudCgpOyArK2kpCi0gICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOwotICAgIEpTQzo6Y2FsbCgmc3RhdGUs
ICZmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmdGhpc09iamVjdCwgYXJndW1lbnRzKTsK
LX0KLQotdm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6dmlzaXRDaGlsZHJlbihK
U0M6OkpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBhdXRv
KiB0aGlzT2JqZWN0ID0ganNDYXN0PERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Kj4oY2Vs
bCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwot
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRv
ci5hcHBlbmQodGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVuY3Rpb24pOwotfQotCi1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsVGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRl
KiBleGVjKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIG9wZXJhdG9yIikpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwotfQotCi1DYWxsVHlwZSBET01Db25z
dHJ1Y3Rvck9iamVjdDo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQot
ewotICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxUaHJvd1R5cGVFcnJvcjsKLSAg
ICByZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7Ci19Ci0KIHZvaWQgdGhyb3dET01TeW50YXhFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCiB7CiAgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5oCShyZXZpc2lvbiAyMTEzNTMpCShm
cm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOjIxMTM1MykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDgyNSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkt
MjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAw
My0yMDA2LCAyMDA4LTIwMDksIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9y
Zz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsu
b3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisj
aW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgor
I2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIkpTRHluYW1pY0Rvd25jYXN0Lmgi
CisjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCisjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxl
SW5saW5lcy5oIgorI2luY2x1ZGUgIldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIgorI2lu
Y2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5oPgorI2luY2x1ZGUg
PGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9XZWFrLmg+CisjaW5j
bHVkZSA8aGVhcC9XZWFrSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvQXV4aWxpYXJ5QmFy
cmllcklubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVu
dGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pT
Q0pTVmFsdWVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NlbGxJbmxpbmVzLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9KU09iamVjdElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pT
VHlwZWRBcnJheXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0xvb2t1cC5oPgorI2luY2x1ZGUgPHJ1
bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlu
bGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvV3JpdGVCYXJyaWVy
Lmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Cisj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisv
LyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGZpbGUgYSBsb3QgZWFzaWVyIHRvIHJlYWQgYnkg
cHV0dGluZyBhbGwgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGF0IHRoZSB0b3AsCisvLyBhbmQgZnVu
Y3Rpb24gZGVmaW5pdGlvbnMgYmVsb3csIGV2ZW4gZm9yIHRlbXBsYXRlIGFuZCBpbmxpbmUgZnVu
Y3Rpb25zLgorCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEpTRnVuY3Rpb247Cit9CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVkU2NyaXB0OworY2xhc3MgRGVmZXJyZWRQcm9t
aXNlOworY2xhc3MgRE9NV2luZG93OworY2xhc3MgRnJhbWU7CitjbGFzcyBVUkw7CitjbGFzcyBO
b2RlOworCitzdHJ1Y3QgRXhjZXB0aW9uRGV0YWlscyB7CisgICAgU3RyaW5nIG1lc3NhZ2U7Cisg
ICAgaW50IGxpbmVOdW1iZXIgeyAwIH07CisgICAgaW50IGNvbHVtbk51bWJlciB7IDAgfTsKKyAg
ICBTdHJpbmcgc291cmNlVVJMOworfTsKKworLy8gQmFzZSBjbGFzcyBmb3IgYWxsIGNvbnN0cnVj
dG9yIG9iamVjdHMgaW4gdGhlIEpTQyBiaW5kaW5ncy4KK2NsYXNzIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0IDogcHVibGljIEpTRE9NT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTRE9NT2Jq
ZWN0IEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFz
ZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IEpTQzo6SW1w
bGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSB8IEpTQzo6VHlwZU9mU2hvdWxkQ2FsbEdldENhbGxE
YXRhOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKKworcHJvdGVjdGVkOgorICAg
IERPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3Qm
KTsKKworICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CisgICAg
c3RhdGljIEpTQzo6Q2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgSlNDOjpDYWxsRGF0YSYp
OworfTsKKworY2xhc3MgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QgOiBwdWJsaWMgRE9N
Q29uc3RydWN0b3JPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JP
YmplY3QgQmFzZTsKKworcHJvdGVjdGVkOgorICAgIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2Jq
ZWN0KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworCisgICAg
SlNDOjpKU0Z1bmN0aW9uKiBpbml0aWFsaXplRnVuY3Rpb24oKTsKKyAgICB2b2lkIHNldEluaXRp
YWxpemVGdW5jdGlvbihKU0M6OlZNJiwgSlNDOjpKU0Z1bmN0aW9uJik7CisKK3ByaXZhdGU6Cisg
ICAgSlNDOjpXcml0ZUJhcnJpZXI8SlNDOjpKU0Z1bmN0aW9uPiBtX2luaXRpYWxpemVGdW5jdGlv
bjsKK307CisKK0RPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CitE
T01XaW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworRE9NV2luZG93JiBm
aXJzdERPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworCitXRUJDT1JFX0VYUE9SVCBKU0M6OkVu
Y29kZWRKU1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYs
IGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwor
V0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKTsKKwordm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7CitXRUJDT1JFX0VYUE9SVCBi
b29sIHRocm93U2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
JiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7
CisKK3ZvaWQgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7IC8vIE5vdCB0aGUgc2FtZSBhcyBhIEphdmFTY3JpcHQg
c3ludGF4IGVycm9yLgordm9pZCB0aHJvd0luZGV4U2l6ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93SW52YWxpZFN0YXRlRXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKK1dFQkNPUkVf
RVhQT1JUIHZvaWQgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVzc2FnZSk7Cit2b2lk
IHRocm93U2VjdXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSk7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHRocm93U2VxdWVuY2VU
eXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dU
eXBlTWlzbWF0Y2hFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOworCitX
RUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVt
RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVu
dEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3Rl
ZFZhbHVlcyk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlv
bkVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1l
bnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbklu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBK
U0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBh
cmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOworV0VCQ09SRV9FWFBP
UlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVtYmVyTmFtZSwgY29u
c3QgY2hhciogZGljdGlvbmFyeU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7CitKU0M6
OkVuY29kZWRKU1ZhbHVlIHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5h
dmFpbGFibGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUpOworCitTdHJpbmcgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2Uo
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitT
dHJpbmcgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworCitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIHRocm93R2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRl
TmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVy
ZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7CisKK1dFQkNPUkVfRVhQT1JUIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlz
ZVdpdGhUaGlzVHlwZUVycm9yKERlZmVycmVkUHJvbWlzZSYsIGNvbnN0IGNoYXIqIGludGVyZmFj
ZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpF
bmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1l
KTsKKworV0VCQ09SRV9FWFBPUlQgSlNDOjpTdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVy
ZShKU0RPTUdsb2JhbE9iamVjdCYsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7CitXRUJDT1JFX0VY
UE9SVCBKU0M6OlN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3Qm
LCBKU0M6OlN0cnVjdHVyZSosIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVjdHVyZShKU0M6
OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFz
cz4gSlNDOjpTdHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3Rh
dGUqKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpKU09iamVjdCogZ2V0
RE9NUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisKK3ZvaWQgY2Fs
bEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mKTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
SlNDbGFzcz4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0aW4oSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmpl
Y3QmKTsKKworSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29y
bGQmLCBKU0M6OkFycmF5QnVmZmVyKik7Cit2b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZm
ZXIqKTsKKworSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiwgdm9pZCopOworSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkJiwgU2NyaXB0V3JhcHBhYmxlKik7CitKU0M6OkpTQXJyYXlCdWZmZXIqIGdldElu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciopOwor
Citib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpT
RE9NT2JqZWN0KiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqKTsKK2Jvb2wgc2V0SW5saW5lQ2FjaGVk
V3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCog
d3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcik7Citib29sIHNldElu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciosIEpT
Qzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJP
d25lcik7CisKK2Jvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYs
IHZvaWQqLCBKU0RPTU9iamVjdCopOworYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9N
V3JhcHBlcldvcmxkJiwgU2NyaXB0V3JhcHBhYmxlKiwgSlNET01PYmplY3QqIHdyYXBwZXIpOwor
Ym9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJh
eUJ1ZmZlciosIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlcik7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIERPTUNsYXNzPiBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJX
b3JsZCYsIERPTUNsYXNzJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpT
Qzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgUmVm
PERPTUNsYXNzPiYgb2JqZWN0KSB7IHJldHVybiBnZXRDYWNoZWRXcmFwcGVyKHdvcmxkLCBvYmpl
Y3QuZ2V0KCkpOyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBl
ckNsYXNzPiB2b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyosIFdy
YXBwZXJDbGFzcyopOwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBw
ZXJDbGFzcz4gdm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyos
IFdyYXBwZXJDbGFzcyopOwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+
IGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUPiYmKSAtPiB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlw
ZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNz
Kj46OnR5cGU7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gYXV0byBj
cmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpIC0+IHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5
cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBKU0M6OkpTVmFsdWUgd3JhcChKU0M6
OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgRE9NQ2xhc3MmKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgSlNDbGFzcz4gSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYp
OworCit2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYpOworCitjb25z
dCBKU0M6Okhhc2hUYWJsZSYgZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShKU0M6OlZNJiwgY29u
c3QgSlNDOjpIYXNoVGFibGUmIHN0YXRpY1RhYmxlKTsKKworU3RyaW5nIHJldHJpZXZlRXJyb3JN
ZXNzYWdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24s
IEpTQzo6Q2F0Y2hTY29wZSYpOworV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqID0g
bnVsbHB0cik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RXhjZXB0aW9uKiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIsIEV4Y2VwdGlv
bkRldGFpbHMqID0gbnVsbHB0cik7Cit2b2lkIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oSlNDOjpF
eGVjU3RhdGUqKTsKKworSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZWNT
dGF0ZSYsIEV4Y2VwdGlvbiYmKTsKK0pTQzo6SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUqLCBFeGNlcHRpb25Db2RlLCBjb25zdCBTdHJpbmcmKTsKKworLy8gQ29udmVy
dCBhIERPTSBpbXBsZW1lbnRhdGlvbiBleGNlcHRpb24gaW50byBhIEphdmFTY3JpcHQgZXhjZXB0
aW9uIGluIHRoZSBleGVjdXRpb24gc3RhdGUuCit2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKK1dFQkNPUkVfRVhQ
T1JUIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uU2xvd1BhdGgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBFeGNlcHRpb24mJik7CisKK0pTQzo6SlNWYWx1ZSBqc1N0cmluZyhKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IFVSTCYpOyAvLyBlbXB0eSBpZiB0aGUgVVJMIGlzIG51bGwKKwor
SlNDOjpKU1ZhbHVlIGpzU3RyaW5nT3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBT
dHJpbmcmKTsgLy8gdW5kZWZpbmVkIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAorSlNDOjpKU1ZhbHVl
IGpzU3RyaW5nT3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBVUkwmKTsgLy8gdW5k
ZWZpbmVkIGlmIHRoZSBVUkwgaXMgbnVsbAorCisvLyBTZWUgSmF2YVNjcmlwdENvcmUgZm9yIGV4
cGxhbmF0aW9uOiBTaG91bGQgYmUgdXNlZCBmb3IgYW55IHN0cmluZyB0aGF0IGlzIGFscmVhZHkg
b3duZWQgYnkgYW5vdGhlcgorLy8gb2JqZWN0LCB0byBsZXQgdGhlIGVuZ2luZSBrbm93IHRoYXQg
Y29sbGVjdGluZyB0aGUgSlNTdHJpbmcgd3JhcHBlciBpcyB1bmxpa2VseSB0byBzYXZlIG1lbW9y
eS4KK0pTQzo6SlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgU3RyaW5nJik7CisKK1N0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5
TmFtZSk7CisKK0F0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlBy
b3BlcnR5TmFtZSk7CisKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3Ry
aW5nKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CitXRUJDT1JFX0VY
UE9SVCBTdHJpbmcgdmFsdWVUb0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmluZyhKU0M6OkV4
ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IHZhbHVlVG9VU1ZTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCitpbnQz
Ml90IGZpbml0ZUludDMyVmFsdWUoSlNDOjpKU1ZhbHVlLCBKU0M6OkV4ZWNTdGF0ZSosIGJvb2wm
IG9rYXkpOworCisvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBjb252ZXJ0IHZhbHVlcyB0byBp
bnRlZ2VycyBhcyBwZXIgdGhlIFdlYklETCBzcGVjaWZpY2F0aW9uLgorLy8gVGhlIGNvbnZlcnNp
b24gZmFpbHMgaWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgb3Is
IGlmIEVuZm9yY2VSYW5nZSBpcyBzcGVjaWZpZWQsCisvLyB0aGUgdmFsdWUgaXMgb3V0c2lkZSB0
aGUgcmFuZ2Ugb2YgdGhlIGRlc3RpbmF0aW9uIGludGVnZXIgdHlwZS4KKworV0VCQ09SRV9FWFBP
UlQgaW50OF90IHRvSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2RW5m
b3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JU
IHVpbnQxNl90IHRvVUludDE2RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQz
MkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VY
UE9SVCBpbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCitXRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9J
bnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQg
dWludDhfdCB0b1VJbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VC
Q09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTZDbGFtcChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJDbGFt
cChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MzJf
dCB0b1VJbnQzMkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVf
RVhQT1JUIGludDY0X3QgdG9JbnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IHRvVUludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOworCitXRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRv
SW50MTYoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWlu
dDE2X3QgdG9VSW50MTYoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9F
WFBPUlQgaW50NjRfdCB0b0ludDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dF
QkNPUkVfRVhQT1JUIHVpbnQ2NF90IHRvVUludDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKKworSlNDOjpKU1ZhbHVlIGpzRGF0ZShKU0M6OkV4ZWNTdGF0ZSosIGRvdWJsZSB2YWx1
ZSk7CisKKy8vIE5hTiBpZiB0aGUgdmFsdWUgY2FuJ3QgYmUgY29udmVydGVkIHRvIGEgZGF0ZS4K
K2RvdWJsZSB2YWx1ZVRvRGF0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7CisKKy8v
IFZhbGlkYXRlcyB0aGF0IHRoZSBwYXNzZWQgb2JqZWN0IGlzIGEgc2VxdWVuY2UgdHlwZSBwZXIg
c2VjdGlvbiA0LjEuMTMgb2YgdGhlIFdlYklETCBzcGVjLgorSlNDOjpKU09iamVjdCogdG9KU1Nl
cXVlbmNlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCB1bnNpZ25lZCYgbGVuZ3RoKTsK
KworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IEpTQzo6QXJyYXlCdWZmZXImKTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Jik7CitKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1
ZmZlciopOworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcqKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8
VD4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmUHRyPFQ+JiYpOwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCosIGNvbnN0IFZlY3RvcjxUPiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8VD4+Jik7CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xv
YmFsT2JqZWN0KiwgY29uc3QgSlNDOjpQcml2YXRlTmFtZSYpOworCitKU0M6OkpTVmFsdWUgdG9K
U0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFs
dWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6
OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgVCYpOworSlNDOjpKU1ZhbHVl
IHRvSlNJdGVyYXRvckVuZChKU0M6OkV4ZWNTdGF0ZSYpOworCitSZWZQdHI8SlNDOjpBcnJheUJ1
ZmZlclZpZXc+IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJy
YXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Bv
c3NpYmx5U2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxK
U0M6OkludDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6
OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4
QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRB
cnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpT
VmFsdWUpOworUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZB
cnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0
b1Bvc3NpYmx5U2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQ
dHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlT
aGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CisKK1JlZlB0cjxKU0M6
OkFycmF5QnVmZmVyVmlldz4gdG9VbnNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlND
OjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDhBcnJheT4gdG9VbnNoYXJlZEludDhBcnJheShK
U0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFy
ZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50MzJB
cnJheT4gdG9VbnNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQ
dHI8SlNDOjpVaW50OEFycmF5PiB0b1Vuc2hhcmVkVWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhD
bGFtcGVkQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50MTZB
cnJheT4gdG9VbnNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVm
UHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVW5zaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlND
OjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJB
cnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4g
dG9VbnNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSlNUeXBlPiBWZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2
ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGJv
b2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCitl
bnVtIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHsgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yLCBM
b2dTZWN1cml0eUVycm9yLCBUaHJvd1NlY3VyaXR5RXJyb3IgfTsKK25hbWVzcGFjZSBCaW5kaW5n
U2VjdXJpdHkgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JO
b2RlKEpTQzo6RXhlY1N0YXRlJiwgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNo
ZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgVCopOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IEV4Y2VwdGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNT
dGF0ZSYsIEV4Y2VwdGlvbk9yPFQqPiYmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNl
cHRpb25PcjxUKj4gY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRp
b25PcjxUJj4mJik7CisgICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6
RXhlY1N0YXRlKiwgRE9NV2luZG93JiwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1
cml0eUVycm9yKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpF
eGVjU3RhdGUmLCBET01XaW5kb3cmLCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIGJvb2wgc2hvdWxk
QWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiwgRnJhbWUqLCBTZWN1cml0eVJlcG9y
dGluZ09wdGlvbiA9IExvZ1NlY3VyaXR5RXJyb3IpOworICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nl
c3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRlJiwgRnJhbWUmLCBTdHJpbmcmIG1lc3NhZ2UpOworICAg
IGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoSlNDOjpFeGVjU3RhdGUmLCBOb2RlKik7Cit9
OworCit2b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOworCitTdHJpbmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5h
bWUpOworQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJvcGVy
dHlOYW1lKTsKKwordGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlND
OjpFbmNvZGVkSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKKworZW51
bSBjbGFzcyBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciB7IFRocm93LCBSZXR1cm5FYXJseSwgUmVq
ZWN0UHJvbWlzZSwgQXNzZXJ0IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+CitzdHJ1
Y3QgQmluZGluZ0NhbGxlciB7CisgICAgdXNpbmcgQXR0cmlidXRlU2V0dGVyRnVuY3Rpb24gPSBi
b29sKEpTQzo6RXhlY1N0YXRlJiwgSlNDbGFzcyYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpUaHJvd1Nj
b3BlJik7CisgICAgdXNpbmcgQXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gPSBKU0M6OkpTVmFsdWUo
SlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNpbmcg
T3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0
YXRlKiwgSlNDbGFzcyosIEpTQzo6VGhyb3dTY29wZSYpOworICAgIHVzaW5nIFByb21pc2VPcGVy
YXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVjU3RhdGUq
LCBKU0NsYXNzKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Njb3BlJik7CisK
KyAgICBzdGF0aWMgSlNDbGFzcyogY2FzdEZvckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUpOworICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yT3BlcmF0aW9u
KEpTQzo6RXhlY1N0YXRlJik7CisKKyAgICB0ZW1wbGF0ZTxQcm9taXNlT3BlcmF0aW9uQ2FsbGVy
RnVuY3Rpb24gb3BlcmF0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRU
aHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlPgorICAgIHN0YXRp
YyBKU0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxQcm9taXNlT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBjb25zdCBjaGFyKiBvcGVy
YXRpb25OYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlKTsKKyAgICAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yT3BlcmF0aW9uKCpzdGF0ZSk7CisgICAgICAgIGlmIChz
aG91bGRUaHJvdyAhPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0ICYmIFVOTElLRUxZ
KCF0aGlzT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aFRoaXNU
eXBlRXJyb3IocHJvbWlzZS5nZXQoKSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJh
dGlvbk5hbWUpOworICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7CisgICAgICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygpKTsKKyAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0
byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNPYmplY3QuCisgICAgICAgIHJldHVy
biBvcGVyYXRpb25DYWxsZXIoc3RhdGUsIHRoaXNPYmplY3QsIFdURk1vdmUocHJvbWlzZSksIHRo
cm93U2NvcGUpOworICAgIH0KKworICAgIHRlbXBsYXRlPE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9u
IG9wZXJhdGlvbkNhbGxlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpT
VmFsdWUgY2FsbE9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNvbnN0IGNoYXIqIG9w
ZXJhdGlvbk5hbWUpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhdGUpOworICAgICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAg
YXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsKKyAgICAgICAgaWYg
KHNob3VsZFRocm93ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5MSUtF
TFkoIXRoaXNPYmplY3QpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OlRocm93KQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1Ro
aXNUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFt
ZSwgb3BlcmF0aW9uTmFtZSk7CisgICAgICAgICAgICAvLyBGb3IgY3VzdG9tIHByb21pc2UtcmV0
dXJuaW5nIG9wZXJhdGlvbnMKKyAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aFRo
aXNUeXBlRXJyb3IoKnN0YXRlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9u
TmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QpOworICAgICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIEpTQ2xhc3M6OmluZm8oKSk7Cisg
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJhdGVk
IGNvZGUgdG8gdXNlIHJlZmVyZW5jZXMgZm9yIHN0YXRlIGFuZCB0aGlzT2JqZWN0LgorICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uQ2FsbGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTxBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiBzZXR0ZXIsIENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OlRocm93PgorICAgIHN0YXRpYyBib29sIHNldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvckF0
dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghdGhpc09i
amVjdCkpCisgICAgICAgICAgICByZXR1cm4gKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpUaHJvdykgPyB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2Nv
cGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKSA6IGZhbHNlOwor
ICAgICAgICByZXR1cm4gc2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIEpTQzo6SlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRocm93U2NvcGUpOworICAgIH0KKworICAgIHRlbXBsYXRl
PEF0dHJpYnV0ZUdldHRlckZ1bmN0aW9uIGdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Ig
c2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+CisgICAgc3RhdGlj
IEpTQzo6RW5jb2RlZEpTVmFsdWUgYXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlND
OjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCisg
ICAgeworICAgICAgICBBU1NFUlQoc3RhdGUpOworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byogdGhpc09iamVj
dCA9IGNhc3RGb3JBdHRyaWJ1dGUoKnN0YXRlLCB0aGlzVmFsdWUpOworICAgICAgICBpZiAoVU5M
SUtFTFkoIXRoaXNPYmplY3QpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93KQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xh
c3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmVqZWN0UHJvbWlzZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCBKU0NsYXNzOjpp
bmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSk7CisgICAgICAgICAgICByZXR1cm4gSlND
OjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoZ2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3Qs
IHRocm93U2NvcGUpKTsKKyAgICB9Cit9OworCisvLyBFeGNlcHRpb25PciBoYW5kbGluZy4KK3Zv
aWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
RXhjZXB0aW9uT3I8dm9pZD4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3Bl
JiwgRXhjZXB0aW9uT3I8VD4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlND
OjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VD4mJiB2YWx1ZSk7CisKKy8vIElubGluZSBmdW5j
dGlvbnMgYW5kIHRlbXBsYXRlIGRlZmluaXRpb25zLgorCitpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUq
IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKK3sK
KyAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7Cit9CisKK2lubGluZSBET01Db25zdHJ1Y3Rvck9iamVjdDo6RE9NQ29uc3RydWN0b3JP
YmplY3QoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKKyAgICA6IEpTRE9NT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQorewor
fQorCitpbmxpbmUgU3RyaW5nIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpjbGFzc05hbWUoY29uc3Qg
SlNPYmplY3QqKQoreworICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkZ1bmN0aW9uIik7Cit9CisK
K2lubGluZSBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6RE9NQ29uc3RydWN0b3JKU0J1
aWx0aW5PYmplY3QoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0KQoreworfQorCitpbmxpbmUgSlNDOjpKU0Z1bmN0aW9uKiBET01Db25zdHJ1Y3Rv
ckpTQnVpbHRpbk9iamVjdDo6aW5pdGlhbGl6ZUZ1bmN0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9p
bml0aWFsaXplRnVuY3Rpb24uZ2V0KCk7Cit9CisKK2lubGluZSB2b2lkIERPTUNvbnN0cnVjdG9y
SlNCdWlsdGluT2JqZWN0OjpzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYgdm0sIEpTQzo6
SlNGdW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAgbV9pbml0aWFsaXplRnVuY3Rpb24uc2V0KHZt
LCB0aGlzLCAmZnVuY3Rpb24pOworfQorCitpbmxpbmUgSlNET01HbG9iYWxPYmplY3QqIGRlcHJl
Y2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgLy8gRklYTUU6IENhbGxlcnMgdG8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNpbmcgdGhl
IGdsb2JhbCBvYmplY3QKKyAgICAvLyBmcm9tIHdoaWNoIHRoZSBvYmplY3QgaXMgYmVpbmcgY3Jl
YXRlZCwgaW5zdGVhZCBvZiBhc3N1bWluZyB0aGUgbGV4aWNhbCBvbmUuCisgICAgLy8gZS5nLiBz
dWJmcmFtZS5kb2N1bWVudC5ib2R5IHNob3VsZCB1c2UgdGhlIHN1YmZyYW1lJ3MgZ2xvYmFsIG9i
amVjdCwgbm90IHRoZSBsZXhpY2FsIG9uZS4KKyAgICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorewor
ICAgIGlmIChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0Q2FjaGVkRE9NU3RydWN0dXJl
KGdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gc3Ry
dWN0dXJlOworICAgIHJldHVybiBjYWNoZURPTVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIFdyYXBw
ZXJDbGFzczo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6
OmNyZWF0ZVByb3RvdHlwZSh2bSwgJmdsb2JhbE9iamVjdCkpLCBXcmFwcGVyQ2xhc3M6OmluZm8o
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3Ry
dWN0dXJlKiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQor
eworICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIHdyb25nLiBJdCB1c2VzIHRoZSB3cm9u
ZyBnbG9iYWwgb2JqZWN0IGZvciBjcmVhdGluZyB0aGUgcHJvdG90eXBlIHN0cnVjdHVyZS4KKyAg
ICByZXR1cm4gZ2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFzcz4oZXhlYy0+dm0oKSwgKmRlcHJl
Y2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYykpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRET01Qcm90b3R5cGUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICBy
ZXR1cm4gSlNDOjpqc0Nhc3Q8SlNDOjpKU09iamVjdCo+KGFzT2JqZWN0KGdldERPTVN0cnVjdHVy
ZTxXcmFwcGVyQ2xhc3M+KHZtLCAqSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9i
YWxPYmplY3QpKS0+c3RvcmVkUHJvdG90eXBlKCkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
SlNDbGFzcz4gaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUgY3JlYXRlSlNCdWlsdGluKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU0Z1bmN0aW9uJiBpbml0aWFsaXplRnVuY3Rpb24sIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgSlNDOjpKU09iamVjdCogb2Jq
ZWN0ID0gSlNDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxKU0NsYXNzPihnbG9iYWxPYmpl
Y3Qudm0oKSwgZ2xvYmFsT2JqZWN0KSwgJmdsb2JhbE9iamVjdCk7CisgICAgY2FsbEZ1bmN0aW9u
V2l0aEN1cnJlbnRBcmd1bWVudHMoc3RhdGUsICpvYmplY3QsIGluaXRpYWxpemVGdW5jdGlvbik7
CisgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKG9iamVjdCk7Cit9CisKK2lubGluZSBK
U0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQs
IEpTQzo6QXJyYXlCdWZmZXIqKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIqPih3b3JsZC52bSgpLm1fdHlwZWRBcnJheUNvbnRyb2xsZXIuZ2V0
KCkpLT53cmFwcGVyT3duZXIoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoSlNDOjpB
cnJheUJ1ZmZlciogZG9tT2JqZWN0KQoreworICAgIHJldHVybiBkb21PYmplY3Q7Cit9CisKK2lu
bGluZSBKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQm
LCB2b2lkKikgeyByZXR1cm4gbnVsbHB0cjsgfQoraW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVk
V3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqLCBKU0M6OldlYWtI
YW5kbGVPd25lciopIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9vbCBjbGVhcklubGluZUNh
Y2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0KikgeyByZXR1
cm4gZmFsc2U7IH0KKworaW5saW5lIEpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVy
KERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0KQorewor
ICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIGRvbU9iamVjdC0+d3JhcHBlcigpOworfQorCitpbmxpbmUgSlNDOjpKU0FycmF5QnVm
ZmVyKiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6
QXJyYXlCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBidWZmZXItPm1fd3JhcHBlci5nZXQoKTsK
K30KKworaW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQm
IHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01PYmplY3QqIHdyYXBwZXIs
IEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpCit7CisgICAgaWYgKCF3b3JsZC5p
c05vcm1hbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZG9tT2JqZWN0LT5zZXRXcmFw
cGVyKHdyYXBwZXIsIHdyYXBwZXJPd25lciwgJndvcmxkKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworaW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6SlNBcnJheUJ1ZmZlciogd3Jh
cHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcikKK3sKKyAgICBpZiAoIXdv
cmxkLmlzTm9ybWFsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb21PYmplY3QtPm1f
d3JhcHBlciA9IEpTQzo6V2VhazxKU0M6OkpTQXJyYXlCdWZmZXI+KHdyYXBwZXIsIHdyYXBwZXJP
d25lciwgJndvcmxkKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgY2xlYXJJ
bmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJs
ZSogZG9tT2JqZWN0LCBKU0RPTU9iamVjdCogd3JhcHBlcikKK3sKKyAgICBpZiAoIXdvcmxkLmlz
Tm9ybWFsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb21PYmplY3QtPmNsZWFyV3Jh
cHBlcih3cmFwcGVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgY2xlYXJJ
bmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZm
ZXIqIGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKQoreworICAgIGlmICgh
d29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHdlYWtDbGVhcihk
b21PYmplY3QtPm1fd3JhcHBlciwgd3JhcHBlcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVk
V3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyYgZG9tT2JqZWN0KQorewor
ICAgIGlmIChhdXRvKiB3cmFwcGVyID0gZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgJmRv
bU9iamVjdCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVybiB3b3JsZC5tX3dy
YXBwZXJzLmdldCh3cmFwcGVyS2V5KCZkb21PYmplY3QpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQgY2FjaGVXcmFw
cGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QsIFdyYXBwZXJD
bGFzcyogd3JhcHBlcikKK3sKKyAgICBKU0M6OldlYWtIYW5kbGVPd25lciogb3duZXIgPSB3cmFw
cGVyT3duZXIod29ybGQsIGRvbU9iamVjdCk7CisgICAgaWYgKHNldElubGluZUNhY2hlZFdyYXBw
ZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlciwgb3duZXIpKQorICAgICAgICByZXR1cm47Cisg
ICAgd2Vha0FkZCh3b3JsZC5tX3dyYXBwZXJzLCB3cmFwcGVyS2V5KGRvbU9iamVjdCksIEpTQzo6
V2VhazxKU0M6OkpTT2JqZWN0Pih3cmFwcGVyLCBvd25lciwgJndvcmxkKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lk
IHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzKiBkb21PYmpl
Y3QsIFdyYXBwZXJDbGFzcyogd3JhcHBlcikKK3sKKyAgICBpZiAoY2xlYXJJbmxpbmVDYWNoZWRX
cmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBwZXIpKQorICAgICAgICByZXR1cm47CisgICAg
d2Vha1JlbW92ZSh3b3JsZC5tX3dyYXBwZXJzLCB3cmFwcGVyS2V5KGRvbU9iamVjdCksIHdyYXBw
ZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gaW5saW5l
IGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8
VD4mJiBkb21PYmplY3QpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxE
T01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZQoreworICAgIHVzaW5nIFdyYXBwZXJDbGFz
cyA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBw
ZXJDbGFzczsKKworICAgIEFTU0VSVCghZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndv
cmxkKCksIGRvbU9iamVjdCkpOworICAgIGF1dG8qIGRvbU9iamVjdFB0ciA9IGRvbU9iamVjdC5w
dHIoKTsKKyAgICBhdXRvKiB3cmFwcGVyID0gV3JhcHBlckNsYXNzOjpjcmVhdGUoZ2V0RE9NU3Ry
dWN0dXJlPFdyYXBwZXJDbGFzcz4oZ2xvYmFsT2JqZWN0LT52bSgpLCAqZ2xvYmFsT2JqZWN0KSwg
Z2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGRvbU9iamVjdCkpOworICAgIGNhY2hlV3JhcHBlcihnbG9i
YWxPYmplY3QtPndvcmxkKCksIGRvbU9iamVjdFB0ciwgd3JhcHBlcik7CisgICAgcmV0dXJuIHdy
YXBwZXI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBpbmxp
bmUgYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJl
ZjxUPiYmIGRvbU9iamVjdCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2Ft
ZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZQoreworICAgIHJldHVybiBjcmVhdGVX
cmFwcGVyPERPTUNsYXNzPihnbG9iYWxPYmplY3QsIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxET01D
bGFzcz4oV1RGTW92ZShkb21PYmplY3QpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNs
YXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHdyYXAoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBET01DbGFzcyYgZG9tT2JqZWN0KQoreworICAg
IGlmIChhdXRvKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxk
KCksIGRvbU9iamVjdCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVybiB0b0pT
TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIFJlZjxET01DbGFzcz4oZG9tT2JqZWN0
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0NsYXNzJiBjYXN0
VGhpc1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKK3sKKyAgICBhdXRvIHRoaXNWYWx1ZSA9
IHN0YXRlLnRoaXNWYWx1ZSgpOworICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTQ2xhc3MqPihzdGF0ZS52bSgpLCB0aGlzVmFsdWUpOworICAgIEFTU0VSVChjYXN0ZWRU
aGlzKTsKKyAgICByZXR1cm4gKmNhc3RlZFRoaXM7Cit9CisKK2lubGluZSBpbnQzMl90IGZpbml0
ZUludDMyVmFsdWUoSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgYm9v
bCYgb2theSkKK3sKKyAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoZXhlYyk7Cisg
ICAgb2theSA9IHN0ZDo6aXNmaW5pdGUobnVtYmVyKTsKKyAgICByZXR1cm4gSlNDOjp0b0ludDMy
KG51bWJlcik7Cit9CisKKy8vIFZhbGlkYXRlcyB0aGF0IHRoZSBwYXNzZWQgb2JqZWN0IGlzIGEg
c2VxdWVuY2UgdHlwZSBwZXIgc2VjdGlvbiA0LjEuMTMgb2YgdGhlIFdlYklETCBzcGVjLgoraW5s
aW5lIEpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlND
OjpKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCYgbGVuZ3RoKQoreworICAgIEpTQzo6Vk0mIHZtID0g
ZXhlYy52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IHZhbHVlLmdldE9iamVjdCgpOworICAgIGlmICgh
b2JqZWN0KSB7CisgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoZXhlYywgc2NvcGUpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBKU0M6OkpTVmFsdWUgbGVuZ3Ro
VmFsdWUgPSBvYmplY3QtPmdldCgmZXhlYywgZXhlYy5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKworICAgIGlmIChsZW5n
dGhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIHRocm93U2VxdWVuY2VUeXBl
RXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBsZW5ndGggPSBsZW5ndGhWYWx1ZS50b1VJbnQzMigmZXhlYyk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyJiBidWZmZXIpCit7CisgICAgaWYg
KGF1dG8gcmVzdWx0ID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIGJ1
ZmZlcikpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAvLyBUaGUgSlNBcnJheUJ1ZmZl
cjo6Y3JlYXRlIGZ1bmN0aW9uIHdpbGwgcmVnaXN0ZXIgdGhlIHdyYXBwZXIgaW4gZmluaXNoQ3Jl
YXRpb24uCisgICAgcmV0dXJuIEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHN0YXRlLT52bSgp
LCBnbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKGJ1ZmZlci5zaGFyaW5nTW9kZSgp
KSwgJmJ1ZmZlcik7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1
ZmZlclZpZXcmIHZpZXcpCit7CisgICAgcmV0dXJuIHZpZXcud3JhcChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0KTsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlciogYnVm
ZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsK
KyAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqYnVmZmVyKTsKK30KKworaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyVmlldyogdmlldykKK3sKKyAg
ICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgIHJldHVybiB0
b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICp2aWV3KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VD4mJiBwdHIpCit7CisgICAgcmV0dXJuIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBwdHIuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiYmIHB0cikKK3sKKyAgICByZXR1
cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFQ+JiB2ZWN0b3Ip
Cit7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9
IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgdmVjdG9yLnNpemUoKSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIGFycmF5LT5wdXRE
aXJlY3RJbmRleChleGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgdmVjdG9yW2ldKSk7
CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAg
ICB9CisgICAgcmV0dXJuIGFycmF5OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8VD4+JiB2ZWN0b3IpCit7CisgICAg
SlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVj
dEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgdmVjdG9yLnNpemUoKSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRl
eChleGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgdmVjdG9yW2ldLmdldCgpKSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICB9
CisgICAgcmV0dXJuIGFycmF5OworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgSlNDOjpQcml2YXRlTmFt
ZSYgcHJpdmF0ZU5hbWUpCit7CisgICAgcmV0dXJuIEpTQzo6U3ltYm9sOjpjcmVhdGUoZXhlYy0+
dm0oKSwgcHJpdmF0ZU5hbWUudWlkKCkpOworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJ
dGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgm
c3RhdGUsIHZhbHVlLCBmYWxzZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgdmFsdWUpCit7CisgICAgcmV0dXJuIGNy
ZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwgdG9KUygmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIHZhbHVlKSwgZmFsc2UpOworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRv
ckVuZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9y
UmVzdWx0T2JqZWN0KCZzdGF0ZSwgSlNDOjpqc1VuZGVmaW5lZCgpLCB0cnVlKTsKK30KKworaW5s
aW5lIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVm
ZmVyVmlldyhKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8qIHdy
YXBwZXIgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Kj4odm0sIHZh
bHVlKTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiB3cmFwcGVyLT5wb3NzaWJseVNoYXJlZEltcGwoKTsKK30KKworaW5saW5lIFJlZlB0cjxK
U0M6OkFycmF5QnVmZmVyVmlldz4gdG9VbnNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8gcmVzdWx0ID0gdG9Qb3NzaWJseVNo
YXJlZEFycmF5QnVmZmVyVmlldyh2bSwgdmFsdWUpOworICAgIGlmICghcmVzdWx0IHx8IHJlc3Vs
dC0+aXNTaGFyZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworaW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZElu
dDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRv
UG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0sIHZhbHVl
KTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQx
NkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Q
b3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4odm0sIHZhbHVl
KTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQz
MkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Q
b3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDMyQWRhcHRvcj4odm0sIHZhbHVl
KTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50
OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Q
b3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRvcj4odm0sIHZhbHVl
KTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Bvc3NpYmx5U2hh
cmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhDbGFt
cGVkQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQxNkFycmF5
PiB0b1Bvc3NpYmx5U2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6
VWludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFy
cmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpT
Qzo6VWludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0
MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZp
ZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6
OkZsb2F0NjRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiB2bSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVU
eXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVlKTsgfQorCitpbmxpbmUgUmVm
UHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxK
U0M6OkludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MTZB
cnJheT4gdG9VbnNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFw
dG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9VbnNo
YXJlZEludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
SlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFwdG9yPih2bSwgdmFs
dWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9VbnNoYXJlZFVpbnQ4QXJy
YXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hh
cmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9Citpbmxp
bmUgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5zaGFyZWRVaW50OENsYW1wZWRB
cnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5z
aGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENsYW1wZWRBZGFwdG9yPih2bSwgdmFsdWUp
OyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvVW5zaGFyZWRVaW50MTZBcnJh
eShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFy
ZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9Citpbmxp
bmUgUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVW5zaGFyZWRVaW50MzJBcnJheShKU0M6OlZN
JiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVU
eXBlZFZpZXc8SlNDOjpVaW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRy
PEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBK
U0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmll
dzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6
RmxvYXQ2NEFycmF5PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OkZsb2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIEpTVD4gaW5saW5lIFZlY3RvcjxSZWY8VD4+IHRvUmVmTmF0aXZlQXJyYXkoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNDOjpWTSYgdm0g
PSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICB0aHJvd1NlcXVlbmNlVHlw
ZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAg
VmVjdG9yPFJlZjxUPj4gcmVzdWx0OworICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwgdmFs
dWUsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpT
VmFsdWUganNWYWx1ZSkgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICAgICAgaWYgKGpzVmFsdWUuaW5oZXJpdHModm0sIEpTVDo6aW5mbygpKSkg
eworICAgICAgICAgICAgYXV0byogb2JqZWN0ID0gSlNUOjp0b1dyYXBwZWQodm0sIGpzVmFsdWUp
OworICAgICAgICAgICAgQVNTRVJUKG9iamVjdCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCpvYmplY3QpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRocm93QXJyYXlFbGVtZW50
VHlwZUVycm9yKCpzdGF0ZSwgc2NvcGUpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2lubGluZSBTdHJpbmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQoreworICAgIEFTU0VSVCghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpOwor
ICAgIHJldHVybiBwcm9wZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlkKCkgOiBwcm9w
ZXJ0eU5hbWUucHVibGljTmFtZSgpOworfQorCitpbmxpbmUgQXRvbWljU3RyaW5nIHByb3BlcnR5
TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAg
ICByZXR1cm4gQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFtZS51
aWQoKSA6IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworfQorCit0ZW1wbGF0ZTxKU0M6Ok5h
dGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1Zh
bHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorewor
ICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZShl
eGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGxlbmd0aCwgcHJvcGVydHlO
YW1lLnB1YmxpY05hbWUoKSwgbmF0aXZlRnVuY3Rpb24pKTsKK30KKworQUxXQVlTX0lOTElORSB2
b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQoreworICAgIGlmICh0aHJv
d1Njb3BlLmV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm47CisgICAgcHJvcGFnYXRlRXhjZXB0
aW9uU2xvd1BhdGgoc3RhdGUsIHRocm93U2NvcGUsIFdURk1vdmUoZXhjZXB0aW9uKSk7Cit9CisK
K2lubGluZSB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8dm9pZD4mJiB2YWx1ZSkKK3sK
KyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKQorICAgICAgICBwcm9wYWdh
dGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VD4mJiB2YWx1ZSkKK3sKKyAgICBp
ZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4
Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VD4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtF
TFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihz
dGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xv
YmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBUKiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2Rl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVCYgbm9kZSkKK3sKKyAgICByZXR1cm4gc2hvdWxkQWxs
b3dBY2Nlc3NUb05vZGUoc3RhdGUsICZub2RlKSA/ICZub2RlIDogbnVsbHB0cjsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0
eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBUKiBub2RlKQoreworICAgIHJldHVybiBz
aG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgbm9kZSkgPyBub2RlIDogbnVsbHB0cjsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEV4Y2VwdGlvbk9yPFQqPiBCaW5kaW5nU2Vj
dXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0
aW9uT3I8VCo+JiYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmhhc0V4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm4gdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpOworICAgIHJldHVybiBjaGVja1Nl
Y3VyaXR5Rm9yTm9kZShzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0
eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb25P
cjxUJj4mJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIGNoZWNrU2VjdXJp
dHlGb3JOb2RlKHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUK
IyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhh
bmRsaW5nLmgJKHJldmlzaW9uIDIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNTUgKzIzLDE5
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCiAjaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCi0jaW5jbHVk
ZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKLSNpbmNs
dWRlICJKU0R5bmFtaWNEb3duY2FzdC5oIgotI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgot
I2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCIKLSNpbmNsdWRlICJXZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUgPGhlYXAv
SGVhcElubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgotI2lu
Y2x1ZGUgPGhlYXAvV2Vhay5oPgotI2luY2x1ZGUgPGhlYXAvV2Vha0lubGluZXMuaD4KLSNpbmNs
dWRlIDxydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9KU0FycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVy
Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvSlNDZWxsSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3RJbmxpbmVz
Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+Ci0jaW5jbHVkZSA8cnVudGlt
ZS9Mb29rdXAuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBl
ZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KLSNpbmNs
dWRlIDxydW50aW1lL1dyaXRlQmFycmllci5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0j
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBmaWxl
IGEgbG90IGVhc2llciB0byByZWFkIGJ5IHB1dHRpbmcgYWxsIGZ1bmN0aW9uIGRlY2xhcmF0aW9u
cyBhdCB0aGUgdG9wLAotLy8gYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zIGJlbG93LCBldmVuIGZv
ciB0ZW1wbGF0ZSBhbmQgaW5saW5lIGZ1bmN0aW9ucy4KIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFz
cyBKU0Z1bmN0aW9uOworY2xhc3MgQ2F0Y2hTY29wZTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBDYWNoZWRTY3JpcHQ7CiBjbGFzcyBEZWZlcnJlZFByb21pc2U7Ci1jbGFzcyBE
T01XaW5kb3c7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIFVSTDsKLWNsYXNzIE5vZGU7CitjbGFzcyBK
U0RPTUdsb2JhbE9iamVjdDsKIAogc3RydWN0IEV4Y2VwdGlvbkRldGFpbHMgewogICAgIFN0cmlu
ZyBtZXNzYWdlOwpAQCAtODAsMzkgKzQ0LDYgQEAgc3RydWN0IEV4Y2VwdGlvbkRldGFpbHMgewog
ICAgIFN0cmluZyBzb3VyY2VVUkw7CiB9OwogCi0vLyBCYXNlIGNsYXNzIGZvciBhbGwgY29uc3Ry
dWN0b3Igb2JqZWN0cyBpbiB0aGUgSlNDIGJpbmRpbmdzLgotY2xhc3MgRE9NQ29uc3RydWN0b3JP
YmplY3QgOiBwdWJsaWMgSlNET01PYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNET01P
YmplY3QgQmFzZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpJ
bXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91bGRDYWxsR2V0Q2Fs
bERhdGE7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwotCi1wcm90ZWN0ZWQ6Ci0g
ICAgRE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCYpOwotCi0gICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKLSAg
ICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBKU0M6OkNhbGxEYXRh
Jik7Ci19OwotCi1jbGFzcyBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCA6IHB1YmxpYyBE
T01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rv
ck9iamVjdCBCYXNlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5P
YmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7Ci0KLSAg
ICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOwotICAgIHZvaWQgc2V0SW5p
dGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKLQotcHJpdmF0ZToK
LSAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6ZUZ1bmN0
aW9uOwotfTsKLQotRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsK
LURPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci1ET01XaW5kb3cm
IGZpcnN0RE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci0KIFdFQkNPUkVfRVhQT1JUIEpTQzo6
RW5jb2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7
CiBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0
ZU5hbWUpOwogCkBAIC0xNDcsNDcgKzc4LDYgQEAgV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVk
SlNWYWx1ZSByZWplYwogV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQ
cm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7CiBXRUJDT1JFX0VYUE9SVCBK
U0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlv
bk5hbWUpOwogCi1XRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3Ry
dWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKLVdFQkNP
UkVfRVhQT1JUIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9i
amVjdCYsIEpTQzo6U3RydWN0dXJlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3RydWN0dXJl
KEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBl
ckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6OkV4
ZWNTdGF0ZSopOwotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTT2JqZWN0
KiBnZXRET01Qcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLQotdm9p
ZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNPYmplY3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYpOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBKU0NsYXNzPiBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2Jh
bE9iamVjdCYpOwotCi1KU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBw
ZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKLXZvaWQqIHdyYXBwZXJLZXkoSlNDOjpBcnJh
eUJ1ZmZlciopOwotCi1KU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQmLCB2b2lkKik7Ci1KU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqKTsKLUpTQzo6SlNBcnJheUJ1ZmZlciog
Z2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVy
Kik7Ci0KLWJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lk
KiwgSlNET01PYmplY3QqLCBKU0M6OldlYWtIYW5kbGVPd25lciopOwotYm9vbCBzZXRJbmxpbmVD
YWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9NT2Jq
ZWN0KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKTsKLWJvb2wg
c2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVy
KiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3Jh
cHBlck93bmVyKTsKLQotYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0Kik7Ci1ib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3JhcHBl
cik7Ci1ib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6
OkFycmF5QnVmZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkJiwgRE9NQ2xhc3MmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxp
bmUgSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxk
LCBSZWY8RE9NQ2xhc3M+JiBvYmplY3QpIHsgcmV0dXJuIGdldENhY2hlZFdyYXBwZXIod29ybGQs
IG9iamVjdC5nZXQoKSk7IH0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBX
cmFwcGVyQ2xhc3M+IHZvaWQgY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNz
KiwgV3JhcHBlckNsYXNzKik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUg
V3JhcHBlckNsYXNzPiB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNs
YXNzKiwgV3JhcHBlckNsYXNzKik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5h
bWUgVD4gYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpIC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVl
LCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVy
Q2xhc3MqPjo6dHlwZTsKLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBh
dXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBl
bmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3Mq
Pjo6dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNWYWx1ZSB3cmFw
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBET01DbGFzcyYpOwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0NsYXNzJiBjYXN0VGhpc1ZhbHVlKEpTQzo6RXhlY1N0
YXRlJik7Ci0KLXZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0K
LWNvbnN0IEpTQzo6SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKEpTQzo6Vk0m
LCBjb25zdCBKU0M6Okhhc2hUYWJsZSYgc3RhdGljVGFibGUpOwotCiBTdHJpbmcgcmV0cmlldmVF
cnJvck1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlIGV4Y2Vw
dGlvbiwgSlNDOjpDYXRjaFNjb3BlJik7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNjcmlw
dCogPSBudWxscHRyKTsKIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0ciwgRXhj
ZXB0aW9uRGV0YWlscyogPSBudWxscHRyKTsKQEAgLTIwMCw1NzIgKzkwLDExIEBAIEpTQzo6SlNW
YWx1ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGUKIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9u
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOwogV0VCQ09S
RV9FWFBPUlQgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKIAotSlNDOjpKU1ZhbHVlIGpzU3RyaW5n
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgVVJMJik7IC8vIGVtcHR5IGlmIHRoZSBVUkwgaXMgbnVs
bAotCi1KU0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IFN0cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCi1KU0M6OkpT
VmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFVSTCYpOyAv
LyB1bmRlZmluZWQgaWYgdGhlIFVSTCBpcyBudWxsCi0KLS8vIFNlZSBKYXZhU2NyaXB0Q29yZSBm
b3IgZXhwbGFuYXRpb246IFNob3VsZCBiZSB1c2VkIGZvciBhbnkgc3RyaW5nIHRoYXQgaXMgYWxy
ZWFkeSBvd25lZCBieSBhbm90aGVyCi0vLyBvYmplY3QsIHRvIGxldCB0aGUgZW5naW5lIGtub3cg
dGhhdCBjb2xsZWN0aW5nIHRoZSBKU1N0cmluZyB3cmFwcGVyIGlzIHVubGlrZWx5IHRvIHNhdmUg
bWVtb3J5LgotSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpFeGVjU3RhdGUq
LCBjb25zdCBTdHJpbmcmKTsKLQotU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJv
cGVydHlOYW1lKTsKLQotQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpT
Qzo6UHJvcGVydHlOYW1lKTsKLQotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJUb0J5
dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLVdFQkNP
UkVfRVhQT1JUIFN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEpT
Qzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci1XRUJDT1JFX0VYUE9SVCBT
dHJpbmcgdmFsdWVUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0K
LWludDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUsIEpTQzo6RXhlY1N0YXRlKiwg
Ym9vbCYgb2theSk7Ci0KLS8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbnZlcnQgdmFsdWVz
IHRvIGludGVnZXJzIGFzIHBlciB0aGUgV2ViSURMIHNwZWNpZmljYXRpb24uCi0vLyBUaGUgY29u
dmVyc2lvbiBmYWlscyBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIG51bWJl
ciBvciwgaWYgRW5mb3JjZVJhbmdlIGlzIHNwZWNpZmllZCwKLS8vIHRoZSB2YWx1ZSBpcyBvdXRz
aWRlIHRoZSByYW5nZSBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlciB0eXBlLgotCi1XRUJDT1JF
X0VYUE9SVCBpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50
MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9F
WFBPUlQgdWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQzMl90IHRv
VUludDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNP
UkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5n
ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIGludDhf
dCB0b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VY
UE9SVCB1aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkNsYW1wKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDMyX3QgdG9JbnQz
MkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVp
bnQzMl90IHRvVUludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VC
Q09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRDbGFtcChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDgoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJ
bnQ4KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDE2
X3QgdG9JbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9S
VCB1aW50MTZfdCB0b1VJbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJD
T1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OwotV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwotCi1KU0M6OkpTVmFsdWUganNEYXRlKEpTQzo6RXhlY1N0YXRlKiwgZG91Ymxl
IHZhbHVlKTsKLQotLy8gTmFOIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gYSBk
YXRlLgotZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsK
LQotLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBl
IHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCi1KU0M6OkpTT2JqZWN0KiB0
b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkJiBsZW5n
dGgpOwotCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciYpOwotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcmKTsKLUpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkFy
cmF5QnVmZmVyKik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyopOwotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IFJlZjxUPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWZQdHI8VD4mJik7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgY29uc3QgVmVjdG9yPFQ+Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgVmVj
dG9yPFJlZlB0cjxUPj4mKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJik7Ci0KLUpTQzo6SlNWYWx1
ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6
SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9y
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUJik7Ci1KU0M6OkpT
VmFsdWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJik7Ci0KLVJlZlB0cjxKU0M6OkFy
cmF5QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwg
SlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZElu
dDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDE2QXJyYXk+
IHRvUG9zc2libHlTaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVm
UHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVk
VWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQ4Q2xh
bXBlZEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYsIEpT
Qzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVp
bnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDMyQXJy
YXk+IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsK
LVJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJBcnJheShK
U0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9Qb3Nz
aWJseVNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLQotUmVmUHRy
PEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0m
LCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVkSW50OEFy
cmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9V
bnNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJ
bnQzMkFycmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsK
LVJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mLCBK
U0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5zaGFyZWRV
aW50OENsYW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVp
bnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
Ci1SZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0m
LCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVkRmxv
YXQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQ2NEFy
cmF5PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1R5cGU+IFZlY3RvcjxSZWY8VD4+IHRvUmVm
TmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBP
UlQgYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
Ci0KLWVudW0gU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9ydFNlY3VyaXR5RXJy
b3IsIExvZ1NlY3VyaXR5RXJyb3IsIFRocm93U2VjdXJpdHlFcnJvciB9OwotbmFtZXNwYWNlIEJp
bmRpbmdTZWN1cml0eSB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hlY2tTZWN1cml0
eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
VCogY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUKik7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6
RXhlY1N0YXRlJiwgRXhjZXB0aW9uT3I8VCo+JiYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IEV4Y2VwdGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIEV4
Y2VwdGlvbk9yPFQmPiYmKTsKLSAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3co
SlNDOjpFeGVjU3RhdGUqLCBET01XaW5kb3cmLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9IExv
Z1NlY3VyaXR5RXJyb3IpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhK
U0M6OkV4ZWNTdGF0ZSYsIERPTVdpbmRvdyYsIFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgYm9vbCBz
aG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSosIFNlY3VyaXR5
UmVwb3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7Ci0gICAgYm9vbCBzaG91bGRBbGxv
d0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUmLCBGcmFtZSYsIFN0cmluZyYgbWVzc2FnZSk7
Ci0gICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIE5vZGUq
KTsKLX07Ci0KLXZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSk7Ci0KLVN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3Bl
cnR5TmFtZSk7Ci1BdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQ
cm9wZXJ0eU5hbWUpOwotCi10ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3Ro
PiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLQot
Ci1lbnVtIGNsYXNzIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHsgVGhyb3csIFJldHVybkVhcmx5
LCBSZWplY3RQcm9taXNlLCBBc3NlcnQgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4K
LXN0cnVjdCBCaW5kaW5nQ2FsbGVyIHsKLSAgICB1c2luZyBBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlv
biA9IGJvb2woSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlRo
cm93U2NvcGUmKTsKLSAgICB1c2luZyBBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiA9IEpTQzo6SlNW
YWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OlRocm93U2NvcGUmKTsKLSAgICB1
c2luZyBPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpF
eGVjU3RhdGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAgdXNpbmcgUHJvbWlz
ZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQ2xhc3MqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93U2NvcGUm
KTsKLQotICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RGb3JPcGVy
YXRpb24oSlNDOjpFeGVjU3RhdGUmKTsKLQotICAgIHRlbXBsYXRlPFByb21pc2VPcGVyYXRpb25D
YWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNo
b3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2U+Ci0gICAg
c3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbFByb21pc2VPcGVyYXRpb24oSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNvbnN0IGNoYXIq
IG9wZXJhdGlvbk5hbWUpCi0gICAgewotICAgICAgICBBU1NFUlQoc3RhdGUpOwotICAgICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAg
ICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsKLSAgICAgICAg
aWYgKHNob3VsZFRocm93ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5M
SUtFTFkoIXRoaXNPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRo
VGhpc1R5cGVFcnJvcihwcm9taXNlLmdldCgpLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwg
b3BlcmF0aW9uTmFtZSk7Ci0gICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKLSAgICAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZvKCkpOwotICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBj
b2RlIHRvIHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KLSAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhpc09iamVjdCwgV1RGTW92ZShwcm9taXNl
KSwgdGhyb3dTY29wZSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8T3BlcmF0aW9uQ2FsbGVyRnVu
Y3Rpb24gb3BlcmF0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJv
dyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KLSAgICBzdGF0aWMgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBjYWxsT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgY2hh
ciogb3BlcmF0aW9uTmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAg
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3RhdGUpOwotICAgICAg
ICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCAmJiBV
TkxJS0VMWSghdGhpc09iamVjdCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93VGhpc1R5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xh
c3NOYW1lLCBvcGVyYXRpb25OYW1lKTsKLSAgICAgICAgICAgIC8vIEZvciBjdXN0b20gcHJvbWlz
ZS1yZXR1cm5pbmcgb3BlcmF0aW9ucwotICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VX
aXRoVGhpc1R5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVy
YXRpb25OYW1lKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7Ci0gICAg
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygp
KTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5l
cmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNPYmplY3QuCi0g
ICAgICAgIHJldHVybiBvcGVyYXRpb25DYWxsZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2Nv
cGUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9uIHNldHRl
ciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6VGhyb3c+Ci0gICAgc3RhdGljIGJvb2wgc2V0QXR0cmlidXRlKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0
Rm9yQXR0cmlidXRlKCpzdGF0ZSwgdGhpc1ZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCF0
aGlzT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3I6OlRocm93KSA/IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhy
b3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpIDogZmFs
c2U7Ci0gICAgICAgIHJldHVybiBzZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgSlNDOjpKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdGhyb3dTY29wZSk7Ci0gICAgfQotCi0gICAgdGVt
cGxhdGU8QXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KLSAgICBz
dGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBhdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFt
ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7Ci0gICAgICAgIGlm
IChVTkxJS0VMWSghdGhpc09iamVjdCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9
PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygp
LT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOwotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93
ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlKQotICAgICAgICAgICAg
ICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcigqc3RhdGUsIEpTQ2xh
c3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKLSAgICAgICAgICAgIHJldHVy
biBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzVW5kZWZpbmVkKCkpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIoKnN0YXRlLCAqdGhpc09i
amVjdCwgdGhyb3dTY29wZSkpOwotICAgIH0KLX07Ci0KIC8vIEV4Y2VwdGlvbk9yIGhhbmRsaW5n
Lgogdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmLCBFeGNlcHRpb25Pcjx2b2lkPiYmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93
U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNW
YWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3Qm
LCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKTsKIAotLy8gSW5saW5l
IGZ1bmN0aW9ucyBhbmQgdGVtcGxhdGUgZGVmaW5pdGlvbnMuCi0KLWlubGluZSBKU0M6OlN0cnVj
dHVyZSogRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBl
KQotewotICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdz
KSwgaW5mbygpKTsKLX0KLQotaW5saW5lIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpET01Db25zdHJ1
Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQotICAgIDogSlNET01PYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3Qp
Ci17Ci19Ci0KLWlubGluZSBTdHJpbmcgRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNsYXNzTmFtZShj
b25zdCBKU09iamVjdCopCi17Ci0gICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRnVuY3Rpb24iKTsK
LX0KLQotaW5saW5lIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0OjpET01Db25zdHJ1Y3Rv
ckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJl
LCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLWlubGluZSBKU0M6OkpTRnVuY3Rpb24qIERPTUNvbnN0
cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojppbml0aWFsaXplRnVuY3Rpb24oKQotewotICAgIHJldHVy
biBtX2luaXRpYWxpemVGdW5jdGlvbi5nZXQoKTsKLX0KLQotaW5saW5lIHZvaWQgRE9NQ29uc3Ry
dWN0b3JKU0J1aWx0aW5PYmplY3Q6OnNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiB2bSwg
SlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAgICBtX2luaXRpYWxpemVGdW5jdGlvbi5z
ZXQodm0sIHRoaXMsICZmdW5jdGlvbik7Ci19Ci0KLWlubGluZSBKU0RPTUdsb2JhbE9iamVjdCog
ZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICAvLyBGSVhNRTogQ2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2lu
ZyB0aGUgZ2xvYmFsIG9iamVjdAotICAgIC8vIGZyb20gd2hpY2ggdGhlIG9iamVjdCBpcyBiZWlu
ZyBjcmVhdGVkLCBpbnN0ZWFkIG9mIGFzc3VtaW5nIHRoZSBsZXhpY2FsIG9uZS4KLSAgICAvLyBl
LmcuIHN1YmZyYW1lLmRvY3VtZW50LmJvZHkgc2hvdWxkIHVzZSB0aGUgc3ViZnJhbWUncyBnbG9i
YWwgb2JqZWN0LCBub3QgdGhlIGxleGljYWwgb25lLgotICAgIHJldHVybiBKU0M6OmpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3RydWN0dXJlKiBnZXRE
T01TdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Ci17Ci0gICAgaWYgKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYWNoZWRET01TdHJ1
Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmluZm8oKSkpCi0gICAgICAgIHJldHVy
biBzdHJ1Y3R1cmU7Ci0gICAgcmV0dXJuIGNhY2hlRE9NU3RydWN0dXJlKGdsb2JhbE9iamVjdCwg
V3JhcHBlckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIFdyYXBwZXJD
bGFzczo6Y3JlYXRlUHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSksIFdyYXBwZXJDbGFzczo6
aW5mbygpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlND
OjpTdHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgd3JvbmcuIEl0IHVzZXMgdGhl
IHdyb25nIGdsb2JhbCBvYmplY3QgZm9yIGNyZWF0aW5nIHRoZSBwcm90b3R5cGUgc3RydWN0dXJl
LgotICAgIHJldHVybiBnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihleGVjLT52bSgpLCAq
ZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldERPTVByb3Rv
dHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewot
ICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oYXNPYmplY3QoZ2V0RE9NU3Ry
dWN0dXJlPFdyYXBwZXJDbGFzcz4odm0sICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGdsb2JhbE9iamVjdCkpLT5zdG9yZWRQcm90b3R5cGUoKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0aW4o
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlv
biwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBKU0M6OkpTT2JqZWN0
KiBvYmplY3QgPSBKU0NsYXNzOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpTQ2xhc3M+KGdsb2Jh
bE9iamVjdC52bSgpLCBnbG9iYWxPYmplY3QpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICBjYWxsRnVu
Y3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhzdGF0ZSwgKm9iamVjdCwgaW5pdGlhbGl6ZUZ1bmN0
aW9uKTsKLSAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsKLX0KLQotaW5s
aW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiB3
b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciopCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlcio+KHdvcmxkLnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxl
ci5nZXQoKSktPndyYXBwZXJPd25lcigpOwotfQotCi1pbmxpbmUgdm9pZCogd3JhcHBlcktleShK
U0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QpCi17Ci0gICAgcmV0dXJuIGRvbU9iamVjdDsKLX0K
LQotaW5saW5lIEpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJX
b3JsZCYsIHZvaWQqKSB7IHJldHVybiBudWxscHRyOyB9Ci1pbmxpbmUgYm9vbCBzZXRJbmxpbmVD
YWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCosIEpTQzo6
V2Vha0hhbmRsZU93bmVyKikgeyByZXR1cm4gZmFsc2U7IH0KLWlubGluZSBib29sIGNsZWFySW5s
aW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqKSB7
IHJldHVybiBmYWxzZTsgfQotCi1pbmxpbmUgSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdy
YXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3Qp
Ci17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gZG9tT2JqZWN0LT53cmFwcGVyKCk7Ci19Ci0KLWlubGluZSBKU0M6OkpTQXJy
YXlCdWZmZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwg
SlNDOjpBcnJheUJ1ZmZlciogYnVmZmVyKQotewotICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZlci0+bV93cmFwcGVyLmdl
dCgpOwotfQotCi1pbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJX
b3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTU9iamVjdCogd3Jh
cHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcikKLXsKLSAgICBpZiAoIXdv
cmxkLmlzTm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkb21PYmplY3QtPnNl
dFdyYXBwZXIod3JhcHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1pbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVy
KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKQotewotICAgIGlm
ICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRvbU9iamVj
dC0+bV93cmFwcGVyID0gSlNDOjpXZWFrPEpTQzo6SlNBcnJheUJ1ZmZlcj4od3JhcHBlciwgd3Jh
cHBlck93bmVyLCAmd29ybGQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBj
bGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3Jh
cHBhYmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyKQotewotICAgIGlmICghd29y
bGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRvbU9iamVjdC0+Y2xl
YXJXcmFwcGVyKHdyYXBwZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBj
bGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJh
eUJ1ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIpCi17Ci0gICAg
aWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgd2Vha0Ns
ZWFyKGRvbU9iamVjdC0+bV93cmFwcGVyLCB3cmFwcGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRD
YWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzJiBkb21PYmplY3Qp
Ci17Ci0gICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxk
LCAmZG9tT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIHdvcmxk
Lm1fd3JhcHBlcnMuZ2V0KHdyYXBwZXJLZXkoJmRvbU9iamVjdCkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCBjYWNo
ZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgV3Jh
cHBlckNsYXNzKiB3cmFwcGVyKQotewotICAgIEpTQzo6V2Vha0hhbmRsZU93bmVyKiBvd25lciA9
IHdyYXBwZXJPd25lcih3b3JsZCwgZG9tT2JqZWN0KTsKLSAgICBpZiAoc2V0SW5saW5lQ2FjaGVk
V3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyLCBvd25lcikpCi0gICAgICAgIHJldHVy
bjsKLSAgICB3ZWFrQWRkKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwg
SlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+KHdyYXBwZXIsIG93bmVyLCAmd29ybGQpKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5l
IHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRv
bU9iamVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQotewotICAgIGlmIChjbGVhcklubGluZUNh
Y2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCi0gICAgICAgIHJldHVybjsK
LSAgICB3ZWFrUmVtb3ZlKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwg
d3JhcHBlcik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBp
bmxpbmUgYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFJlZjxUPiYmIGRvbU9iamVjdCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
YW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCi17Ci0gICAgdXNpbmcgV3JhcHBl
ckNsYXNzID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6
V3JhcHBlckNsYXNzOwotCi0gICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVj
dC0+d29ybGQoKSwgZG9tT2JqZWN0KSk7Ci0gICAgYXV0byogZG9tT2JqZWN0UHRyID0gZG9tT2Jq
ZWN0LnB0cigpOwotICAgIGF1dG8qIHdyYXBwZXIgPSBXcmFwcGVyQ2xhc3M6OmNyZWF0ZShnZXRE
T01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihnbG9iYWxPYmplY3QtPnZtKCksICpnbG9iYWxPYmpl
Y3QpLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoZG9tT2JqZWN0KSk7Ci0gICAgY2FjaGVXcmFwcGVy
KGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0UHRyLCB3cmFwcGVyKTsKLSAgICByZXR1
cm4gd3JhcHBlcjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+
IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjpp
c19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCi17Ci0gICAgcmV0dXJuIGNy
ZWF0ZVdyYXBwZXI8RE9NQ2xhc3M+KGdsb2JhbE9iamVjdCwgc3RhdGljX3JlZmVyZW5jZV9jYXN0
PERPTUNsYXNzPihXVEZNb3ZlKGRvbU9iamVjdCkpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
RE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERPTUNsYXNzJiBkb21PYmplY3QpCi17
Ci0gICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+
d29ybGQoKSwgZG9tT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJu
IHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgUmVmPERPTUNsYXNzPihkb21P
YmplY3QpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQ2xhc3Mm
IGNhc3RUaGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQotewotICAgIGF1dG8gdGhpc1Zh
bHVlID0gc3RhdGUudGhpc1ZhbHVlKCk7Ci0gICAgYXV0byBjYXN0ZWRUaGlzID0ganNEeW5hbWlj
RG93bmNhc3Q8SlNDbGFzcyo+KHN0YXRlLnZtKCksIHRoaXNWYWx1ZSk7Ci0gICAgQVNTRVJUKGNh
c3RlZFRoaXMpOwotICAgIHJldHVybiAqY2FzdGVkVGhpczsKLX0KLQotaW5saW5lIGludDMyX3Qg
ZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBib29sJiBva2F5KQotewotICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcihleGVj
KTsKLSAgICBva2F5ID0gc3RkOjppc2Zpbml0ZShudW1iZXIpOwotICAgIHJldHVybiBKU0M6OnRv
SW50MzIobnVtYmVyKTsKLX0KLQotLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3Qg
aXMgYSBzZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMu
Ci1pbmxpbmUgSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlJiBleGVj
LCBKU0M6OkpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpCi17Ci0gICAgSlNDOjpWTSYg
dm0gPSBleGVjLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotCi0gICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0KCk7Ci0gICAg
aWYgKCFvYmplY3QpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29w
ZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIEpTQzo6SlNWYWx1ZSBs
ZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotCi0gICAgaWYg
KGxlbmd0aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5j
ZVR5cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LQotICAgIGxlbmd0aCA9IGxlbmd0aFZhbHVlLnRvVUludDMyKCZleGVjKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0K
LWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXImIGJ1ZmZlcikKLXsKLSAg
ICBpZiAoYXV0byByZXN1bHQgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQo
KSwgYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIC8vIFRoZSBKU0FycmF5
QnVmZmVyOjpjcmVhdGUgZnVuY3Rpb24gd2lsbCByZWdpc3RlciB0aGUgd3JhcHBlciBpbiBmaW5p
c2hDcmVhdGlvbi4KLSAgICByZXR1cm4gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUt
PnZtKCksIGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYnVmZmVyLnNoYXJpbmdN
b2RlKCkpLCAmYnVmZmVyKTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFy
cmF5QnVmZmVyVmlldyYgdmlldykKLXsKLSAgICByZXR1cm4gdmlldy53cmFwKHN0YXRlLCBnbG9i
YWxPYmplY3QpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVy
KiBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBKU0M6OmpzTnVs
bCgpOwotICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICpidWZmZXIpOwotfQot
Ci1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3KiB2aWV3KQot
ewotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgcmV0
dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKnZpZXcpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIHB0cikKLXsKLSAgICByZXR1
cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+JiYgcHRyKQotewotICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VD4mIHZl
Y3RvcikKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpTQXJyYXkqIGFy
cmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3Jb
aV0pKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkp
OwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mIHZlY3RvcikKLXsK
LSAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29u
c3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXJyYXktPnB1dERpcmVj
dEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0uZ2V0KCkp
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwot
ICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZh
dGVOYW1lJiBwcml2YXRlTmFtZSkKLXsKLSAgICByZXR1cm4gSlNDOjpTeW1ib2w6OmNyZWF0ZShl
eGVjLT52bSgpLCBwcml2YXRlTmFtZS51aWQoKSk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUg
dG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2Jq
ZWN0KCZzdGF0ZSwgdmFsdWUsIGZhbHNlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB0b0pTKCZzdGF0ZSwgJmdsb2Jh
bE9iamVjdCwgdmFsdWUpLCBmYWxzZSk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0
ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlSXRl
cmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCBKU0M6OmpzVW5kZWZpbmVkKCksIHRydWUpOwotfQot
Ci1pbmxpbmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJy
YXlCdWZmZXJWaWV3KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0
byogd3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0PEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqPih2
bSwgdmFsdWUpOwotICAgIGlmICghd3JhcHBlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIHdyYXBwZXItPnBvc3NpYmx5U2hhcmVkSW1wbCgpOwotfQotCi1pbmxpbmUgUmVm
UHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byByZXN1bHQgPSB0b1Bvc3Np
Ymx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KHZtLCB2YWx1ZSk7Ci0gICAgaWYgKCFyZXN1bHQgfHwg
cmVzdWx0LT5pc1NoYXJlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1pbmxpbmUgUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hh
cmVkSW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpT
Qzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDhBZGFwdG9yPih2bSwg
dmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJl
ZEludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFwdG9yPih2bSwg
dmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJl
ZEludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFwdG9yPih2bSwg
dmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJl
ZFVpbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwg
dmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvUG9zc2li
bHlTaGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50
OENsYW1wZWRBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpVaW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWlu
dDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZp
ZXc8SlNDOjpVaW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6
RmxvYXQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBK
U0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5
cGVkVmlldzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRy
PEpTQzo6RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5h
dGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci0KLWlubGlu
ZSBSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0s
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRW
aWV3PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJ
bnQxNkFycmF5PiB0b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQx
NkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0
b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZt
LCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Vuc2hhcmVkVWlu
dDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRv
VW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0K
LWlubGluZSBSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xh
bXBlZEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6
dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNoYXJlZFVpbnQx
NkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9V
bnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0K
LWlubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5h
dGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBS
ZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYg
dm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlw
ZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8
SlNDOjpGbG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3
PEpTQzo6RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgSlNUPiBpbmxpbmUgVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBKU0M6OlZN
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93U2VxdWVu
Y2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0K
LSAgICBWZWN0b3I8UmVmPFQ+PiByZXN1bHQ7Ci0gICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRl
LCB2YWx1ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
Qzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoanNWYWx1ZS5pbmhlcml0cyh2bSwgSlNUOjppbmZv
KCkpKSB7Ci0gICAgICAgICAgICBhdXRvKiBvYmplY3QgPSBKU1Q6OnRvV3JhcHBlZCh2bSwganNW
YWx1ZSk7Ci0gICAgICAgICAgICBBU1NFUlQob2JqZWN0KTsKLSAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoKm9iamVjdCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhyb3dBcnJheUVs
ZW1lbnRUeXBlRXJyb3IoKnN0YXRlLCBzY29wZSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotaW5saW5lIFN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2wo
KSk7Ci0gICAgcmV0dXJuIHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFtZS51aWQoKSA6
IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7Ci19Ci0KLWlubGluZSBBdG9taWNTdHJpbmcgcHJv
cGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQot
ewotICAgIHJldHVybiBBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlO
YW1lLnVpZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci19Ci0KLXRlbXBsYXRlPEpT
Qzo6TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUp
Ci17Ci0gICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5jdGlvbjo6Y3Jl
YXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9w
ZXJ0eU5hbWUucHVibGljTmFtZSgpLCBuYXRpdmVGdW5jdGlvbikpOwotfQogCiBBTFdBWVNfSU5M
SU5FIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCiB7CkBAIC03OTgs
MjggKzEyNyw0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUKICAg
ICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQq
IEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBUJiBub2RlKQotewotICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0
ZSwgJm5vZGUpID8gJm5vZGUgOiBudWxscHRyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgVCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIFQqIG5vZGUpCi17Ci0gICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9O
b2RlKHN0YXRlLCBub2RlKSA/IG5vZGUgOiBudWxscHRyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0
eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb25PcjxUKj4mJiB2YWx1ZSkK
LXsKLSAgICBpZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5y
ZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGNoZWNrU2VjdXJpdHlGb3JOb2RlKHN0YXRl
LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9y
Tm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQmPiYmIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVh
c2VFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIHZh
bHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3Bw
CShyZXZpc2lvbiAyMTEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
RE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250
cm9sbGVyLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIKICNpbmNsdWRlICJK
U0RPTUdsb2JhbE9iamVjdFRhc2suaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgog
I2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgpAQCAtMjg2LDYgKzI4Nyw1NCBAQCBK
U0RPTVdpbmRvdyogdG9KU0RPTVdpbmRvdyhKU0M6OlZNJiB2bSwgCiAgICAgcmV0dXJuIDA7CiB9
CiAKK0RPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBj
bGFzcyBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgU3Rh
Y2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSkgewor
ICAgICAgICAgICAgICAgIG1faGFzU2tpcHBlZEZpcnN0RnJhbWUgPSB0cnVlOworICAgICAgICAg
ICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoYXV0byogY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCkpCisg
ICAgICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHZpc2l0b3ItPmNh
bGxlZSgpKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ2FsbGVlIGlzIG5vdCBhbiBvYmpl
Y3QgaWYgdGhlIGNhbGxlciBpcyBXZWIgQXNzZW1ibHkuCisgICAgICAgICAgICAgICAgLy8gRmln
dXJlIG91dCB3aGF0IHRvIGRvIGhlcmUuIFdlIGNhbiBwcm9iYWJseSBnZXQgdGhlIGdsb2JhbCBv
YmplY3QKKyAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSB0b3AtbW9zdCBXYXNtIEluc3RhbmNl
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzIxCisgICAgICAg
ICAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxlZSgpLT5pc09iamVjdCgpKQorICAgICAgICAgICAg
ICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxl
ZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
U3RhY2tWaXNpdG9yOjpEb25lOworICAgICAgICB9CisKKyAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0OyB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICBtdXRhYmxlIGJvb2wgbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSB7IGZh
bHNlIH07CisgICAgICAgIG11dGFibGUgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0IHsg
bnVsbHB0ciB9OworICAgIH07CisKKyAgICBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yIGl0
ZXI7CisgICAgZXhlYy0+aXRlcmF0ZShpdGVyKTsKKyAgICByZXR1cm4gaXRlci5nbG9iYWxPYmpl
Y3QoKSA/IGFzSlNET01XaW5kb3coaXRlci5nbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKSA6IGZp
cnN0RE9NV2luZG93KGV4ZWMpOworfQorCitET01XaW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOworfQorCitET01XaW5kb3cmIGZpcnN0RE9NV2luZG93
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT52bUVu
dHJ5R2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCk7Cit9CisKIHZvaWQgSlNET01XaW5kb3dCYXNl
OjpmaXJlRnJhbWVDbGVhcmVkV2F0Y2hwb2ludHNGb3JXaW5kb3coRE9NV2luZG93KiB3aW5kb3cp
CiB7CiAgICAgSlNDOjpWTSYgdm0gPSBjb21tb25WTSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHJldmlzaW9uIDIxMTM4NCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC05Nyw0ICs5Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBKU0RPTVdpbmRvdyog
dG9KU0RPTVdpbmRvdyhGcmFtZSosIERPTVdyYXBwZXJXb3JsZCYpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIEpTRE9NV2luZG93KiB0b0pTRE9NV2luZG93KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwog
CisgICAgRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBE
T01XaW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworICAgIERPTVdpbmRv
dyYgZmlyc3RET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjExMzg0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBA
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1
ZGUgIkhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiCiAj
aW5jbHVkZSAiSlNFdmVudC5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1
ZGUgIkpTSFRNTEF1ZGlvRWxlbWVudC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCShyZXZpc2lvbiAyMTEzODQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTUJpbmRpbmdTZWN1cml0eS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5o
IgogI2luY2x1ZGUgIkpTRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTSFRNTENvbGxlY3Rpb24uaCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXJDYWNo
ZS5jcHAJKHJldmlzaW9uIDIxMTM1MykJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcDoyMTEzNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdyYXBwZXJDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDM0IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTEsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2Vpbmln
IDxzYW1Ad2Via2l0Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgTWljaGFlbCBQcnVldHQg
PG1pY2hhZWxANjhrLm9yZz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKworI2luY2x1ZGUgIkNh
Y2hlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCisjaW5jbHVkZSAiRE9NQ29uc3Ry
dWN0b3JXaXRoRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uSGVhZGVy
cy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4
Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgIkpTRE9NUHJv
bWlzZS5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCisjaW5jbHVkZSAiSlNFeGNl
cHRpb25CYXNlLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDxieXRl
Y29kZS9Db2RlQmxvY2suaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+
CisjaW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNp
bmNsdWRlIDxydW50aW1lL0Vycm9ySGFuZGxpbmdTY29wZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
RXJyb3JJbnN0YW5jZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0
aW9uLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU1RBVElDX0FTU0VSVF9J
U19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yT2JqZWN0KTsKK1NUQVRJQ19B
U1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVu
dCk7CisKK3ZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpCit7CisgICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUp
OworfQorCitKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTdHJpbmcmIHMpCit7CisgICAgaWYgKHMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc051
bGwoKTsKKyAgICByZXR1cm4ganNPd25lZFN0cmluZyhleGVjLCBzKTsKK30KKworSlNWYWx1ZSBq
c1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQorewor
ICAgIGlmIChzLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBy
ZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcyk7Cit9CisKK0pTVmFsdWUganNTdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICByZXR1cm4ganNTdHJpbmdX
aXRoQ2FjaGUoZXhlYywgdXJsLnN0cmluZygpKTsKK30KKworSlNWYWx1ZSBqc1N0cmluZ09yVW5k
ZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCit7CisgICAgaWYgKHVybC5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzU3Ry
aW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3Ry
aW5nIHN0cmluZ1RvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlLCBTdHJpbmcmJiBzdHJpbmcpCit7CisgICAgaWYgKCFzdHJpbmcuY29udGFpbnNPbmx5
TGF0aW4xKCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KKworU3RyaW5n
IGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnRpZmllcikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSBpZGVu
dGlmaWVyLnN0cmluZygpOworICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3RhdGUsIHNj
b3BlLCBXVEZNb3ZlKHN0cmluZykpOworfQorCitTdHJpbmcgdmFsdWVUb0J5dGVTdHJpbmcoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmlu
ZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICByZXR1cm4gc3RyaW5nVG9CeXRlU3RyaW5nKHN0YXRl
LCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGhhc1Vu
cGFpcmVkU3Vycm9nYXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQoreworICAgIC8vIEZhc3QgcGF0aCBm
b3IgOC1iaXQgc3RyaW5nczsgdGhleSBjYW4ndCBoYXZlIGFueSBzdXJyb2dhdGVzLgorICAgIGlm
IChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGF1dG8g
Y29kZVBvaW50IDogc3RyaW5nLmNvZGVQb2ludHMoKSkgeworICAgICAgICBpZiAoVV9JU19TVVJS
T0dBVEUoY29kZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvVVNWU3RyaW5n
KFN0cmluZyYmIHN0cmluZykKK3sKKyAgICAvLyBGYXN0IHBhdGggZm9yIHRoZSBjYXNlIHdoZXJl
IHRoZXJlIGFyZSBubyB1bnBhaXJlZCBzdXJyb2dhdGVzLgorICAgIGlmICghaGFzVW5wYWlyZWRT
dXJyb2dhdGUoc3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIHN0cmluZzsKKworICAgIC8vIFNsb3cg
cGF0aDogaHR0cDovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tb2J0YWluLXVuaWNvZGUK
KyAgICAvLyBSZXBsYWNlcyB1bnBhaXJlZCBzdXJyb2dhdGVzIHdpdGggdGhlIHJlcGxhY2VtZW50
IGNoYXJhY3Rlci4KKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2
ZUNhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSk7CisgICAgU3RyaW5nVmlldyB2aWV3IHsgc3RyaW5n
IH07CisgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHZpZXcuY29kZVBvaW50cygpKSB7CisgICAg
ICAgIGlmIChVX0lTX1NVUlJPR0FURShjb2RlUG9pbnQpKQorICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChyZXBsYWNlbWVudENoYXJhY3Rlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoY29kZVBvaW50KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmlu
ZygpOworfQorCitTdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgU3RyaW5nIHN0cmluZyA9IGlkZW50aWZp
ZXIuc3RyaW5nKCk7CisgICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5n
KSk7Cit9CisKK1N0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9X
VEZTdHJpbmcoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
CisgICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK0pT
VmFsdWUganNEYXRlKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlKQoreworICAgIHJldHVy
biBEYXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOworfQorCitkb3VibGUgdmFsdWVUb0RhdGUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc051bWJl
cigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNOdW1iZXIoKTsKKyAgICBpZiAoIXZhbHVlLmlu
aGVyaXRzKGV4ZWMtPnZtKCksIERhdGVJbnN0YW5jZTo6aW5mbygpKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHZhbHVlLnRvT2JqZWN0KGV4ZWMpKS0+aW50ZXJuYWxO
dW1iZXIoKTsKK30KKwordm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGV4Y2VwdGlvblZhbHVlLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdBUElMb2NrKCkpOworICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTQzo6RXhjZXB0aW9uKj4odm0sIGV4Y2VwdGlvblZhbHVlKTsKKyAgICBpZiAoIWV4Y2Vw
dGlvbikgeworICAgICAgICBleGNlcHRpb24gPSB2bS5sYXN0RXhjZXB0aW9uKCk7CisgICAgICAg
IGlmICghZXhjZXB0aW9uKQorICAgICAgICAgICAgZXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246
OmNyZWF0ZShleGVjLT52bSgpLCBleGNlcHRpb25WYWx1ZSwgSlNDOjpFeGNlcHRpb246OkRvTm90
Q2FwdHVyZVN0YWNrKTsKKyAgICB9CisKKyAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0
aW9uLCBjYWNoZWRTY3JpcHQpOworfQorCitTdHJpbmcgcmV0cmlldmVFcnJvck1lc3NhZ2UoRXhl
Y1N0YXRlJiBzdGF0ZSwgVk0mIHZtLCBKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2F0Y2hTY29wZSYgY2F0
Y2hTY29wZSkKK3sKKyAgICBpZiAoYXV0byogZXhjZXB0aW9uQmFzZSA9IHRvRXhjZXB0aW9uQmFz
ZSh2bSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkJhc2UtPnRvU3RyaW5n
KCk7CisKKyAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE1MDg3PiBXZWIgSW5z
cGVjdG9yOiBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24gc2hvdWxkIG5vdCBldmFsdWF0ZSBKYXZh
U2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKKyAgICAvLyBJZiB0aGlzIGlzIGEgY3VzdG9tIGV4
Y2VwdGlvbiBvYmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5IGFuZCBnZXQgYSBuaWNl
IHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4KKyAgICBTdHJpbmcgZXJy
b3JNZXNzYWdlOworICAgIGlmIChhdXRvKiBlcnJvciA9IGpzRHluYW1pY0Rvd25jYXN0PEVycm9y
SW5zdGFuY2UqPih2bSwgZXhjZXB0aW9uKSkKKyAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3It
PnNhbml0aXplZFRvU3RyaW5nKCZzdGF0ZSk7CisgICAgZWxzZQorICAgICAgICBlcnJvck1lc3Nh
Z2UgPSBleGNlcHRpb24udG9XVEZTdHJpbmcoJnN0YXRlKTsKKworICAgIC8vIFdlIG5lZWQgdG8g
Y2xlYXIgYW55IG5ldyBleGNlcHRpb24gdGhhdCBtYXkgYmUgdGhyb3duIGluIHRoZSB0b1N0cmlu
ZygpIGNhbGwgYWJvdmUuCisgICAgLy8gcmVwb3J0RXhjZXB0aW9uKCkgaXMgbm90IHN1cHBvc2Vk
IHRvIGJlIG1ha2luZyBuZXcgZXhjZXB0aW9ucy4KKyAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgdm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIGVycm9yTWVz
c2FnZTsKK30KKwordm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0M6OkV4
Y2VwdGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCwgRXhjZXB0aW9u
RGV0YWlscyogZXhjZXB0aW9uRGV0YWlscykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgIFJFTEVBU0Vf
QVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGlmIChpc1Rl
cm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24odm0sIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVy
bjsKKworICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkpOworCisg
ICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFj
a0Zyb21FeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxT
dGFja1NpemVUb0NhcHR1cmUpKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgIHZt
LmNsZWFyTGFzdEV4Y2VwdGlvbigpOworCisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSk7CisgICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U0RPTVdpbmRvdyo+KHZtLCBnbG9iYWxPYmplY3QpKSB7CisgICAgICAgIGlmICghd2luZG93LT53
cmFwcGVkKCkuaXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaW50IGxpbmVOdW1iZXIgPSAwOworICAgIGludCBjb2x1bW5OdW1i
ZXIgPSAwOworICAgIFN0cmluZyBleGNlcHRpb25Tb3VyY2VVUkw7CisgICAgaWYgKGNvbnN0IFNj
cmlwdENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbFN0YWNrLT5maXJzdE5vbk5hdGl2ZUNhbGxG
cmFtZSgpKSB7CisgICAgICAgIGxpbmVOdW1iZXIgPSBjYWxsRnJhbWUtPmxpbmVOdW1iZXIoKTsK
KyAgICAgICAgY29sdW1uTnVtYmVyID0gY2FsbEZyYW1lLT5jb2x1bW5OdW1iZXIoKTsKKyAgICAg
ICAgZXhjZXB0aW9uU291cmNlVVJMID0gY2FsbEZyYW1lLT5zb3VyY2VVUkwoKTsKKyAgICB9CisK
KyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gcmV0cmlldmVFcnJvck1lc3NhZ2UoKmV4ZWMsIHZt
LCBleGNlcHRpb24tPnZhbHVlKCksIHNjb3BlKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKGVy
cm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBleGNlcHRpb25Tb3VyY2VVUkws
IGV4Y2VwdGlvbiwgY2FsbFN0YWNrLT5zaXplKCkgPyBjYWxsU3RhY2sgOiBudWxscHRyLCBjYWNo
ZWRTY3JpcHQpOworCisgICAgaWYgKGV4Y2VwdGlvbkRldGFpbHMpIHsKKyAgICAgICAgZXhjZXB0
aW9uRGV0YWlscy0+bWVzc2FnZSA9IGVycm9yTWVzc2FnZTsKKyAgICAgICAgZXhjZXB0aW9uRGV0
YWlscy0+bGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIGV4Y2VwdGlvbkRldGFpbHMt
PmNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJlcjsKKyAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+
c291cmNlVVJMID0gZXhjZXB0aW9uU291cmNlVVJMOworICAgIH0KK30KKwordm9pZCByZXBvcnRD
dXJyZW50RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBhdXRv
KiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOworICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOworfQorCitzdGF0aWMg
SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2Rl
IGVjLCBjb25zdCBTdHJpbmcqIG1lc3NhZ2UgPSBudWxscHRyKQoreworICAgIGlmICghZWMgfHwg
ZWMgPT0gRXhpc3RpbmdFeGNlcHRpb25FcnJvcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisKKyAgICAvLyBGSVhNRTogSGFuZGxlIG90aGVyIFdlYklETCBleGNlcHRpb24gdHlwZXMu
CisgICAgaWYgKGVjID09IFR5cGVFcnJvcikgeworICAgICAgICBpZiAoIW1lc3NhZ2UgfHwgbWVz
c2FnZS0+aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVj
KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAqbWVzc2FnZSk7CisgICAg
fQorCisgICAgaWYgKGVjID09IFJhbmdlRXJyb3IpIHsKKyAgICAgICAgaWYgKCFtZXNzYWdlIHx8
IG1lc3NhZ2UtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQmFkIHZhbHVlIikpOworICAgICAgICByZXR1cm4gY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCAqbWVzc2FnZSk7CisgICAgfQorCisgICAgaWYgKGVjID09IFN0YWNr
T3ZlcmZsb3dFcnJvcikKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihl
eGVjKTsKKworICAgIC8vIEZJWE1FOiBBbGwgY2FsbGVycyB0byBjcmVhdGVET01FeGNlcHRpb24g
bmVlZCB0byBwYXNzIGluIHRoZSBjb3JyZWN0IGdsb2JhbCBvYmplY3QuCisgICAgLy8gRm9yIG5v
dywgd2UncmUgZ29pbmcgdG8gYXNzdW1lIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LiBXaGljaCBp
cyB3cm9uZyBpbiBjYXNlcyBsaWtlIHRoaXM6CisgICAgLy8gZnJhbWVzWzBdLmRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQobnVsbCwgbnVsbCk7IC8vIHRocm93cyBhbiBleGNlcHRpb24gd2hpY2ggc2hv
dWxkIGhhdmUgdGhlIHN1YmZyYW1lJ3MgcHJvdG90eXBlcy4KKyAgICBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVj
KTsKKworICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisKKyAg
ICBDU3RyaW5nIG1lc3NhZ2VDU3RyaW5nOworICAgIGlmIChtZXNzYWdlKQorICAgICAgICBtZXNz
YWdlQ1N0cmluZyA9IG1lc3NhZ2UtPnV0ZjgoKTsKKyAgICBpZiAobWVzc2FnZSAmJiAhbWVzc2Fn
ZS0+aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEl0IGlzIHNhZmUgdG8gZG8gdGhpcyBiZWNhdXNl
IHRoZSBjaGFyKiBjb250ZW50cyBvZiB0aGUgQ1N0cmluZyBhcmUgY29waWVkIGludG8gYSBuZXcg
V1RGOjpTdHJpbmcgYmVmb3JlIHRoZSBDU3RyaW5nIGlzIGRlc3Ryb3llZC4KKyAgICAgICAgZGVz
Y3JpcHRpb24uZGVzY3JpcHRpb24gPSBtZXNzYWdlQ1N0cmluZy5kYXRhKCk7CisgICAgfQorCisg
ICAgSlNWYWx1ZSBlcnJvck9iamVjdDsKKyAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLnR5cGUpIHsK
KyAgICBjYXNlIERPTUNvcmVFeGNlcHRpb25UeXBlOgorI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorICAgIGNhc2UgSURCRGF0YWJhc2VFeGNlcHRpb25UeXBlOgorI2VuZGlmCisgICAgICAg
IGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIERPTUNvcmVFeGNlcHRpb246
OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVFeGNl
cHRpb25UeXBlOgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBGaWxlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTUUxFeGNlcHRpb25UeXBlOgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBTUUxFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFNWR0V4Y2VwdGlvblR5cGU6CisgICAgICAgIGVycm9yT2Jq
ZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFNWR0V4Y2VwdGlvbjo6Y3JlYXRlKGRlc2Ny
aXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWFBhdGhFeGNlcHRpb25UeXBlOgor
ICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBYUGF0aEV4Y2Vw
dGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAK
KyAgICBBU1NFUlQoZXJyb3JPYmplY3QpOworICAgIGFkZEVycm9ySW5mbyhleGVjLCBhc09iamVj
dChlcnJvck9iamVjdCksIHRydWUpOworICAgIHJldHVybiBlcnJvck9iamVjdDsKK30KKworSlNW
YWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVj
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgcmV0dXJuIGNyZWF0ZURPTUV4Y2VwdGlv
bihleGVjLCBlYywgJm1lc3NhZ2UpOworfQorCitKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCit7CisgICAgcmV0dXJuIGNy
ZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIGV4Y2VwdGlvbi5jb2RlKCksIGV4Y2VwdGlvbi5yZWxl
YXNlTWVzc2FnZSgpKTsKK30KKwordm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9u
JiYgZXhjZXB0aW9uKQoreworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7Cisg
ICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVET01FeGNlcHRpb24o
c3RhdGUsIFdURk1vdmUoZXhjZXB0aW9uKSkpOworfQorCitib29sIGhhc0l0ZXJhdG9yTWV0aG9k
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBKU1ZhbHVlIGFwcGx5
TWV0aG9kID0gb2JqZWN0LT5nZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZt
LnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC5pdGVy
YXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgY2FsbGFibGUiKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZmFsc2UpOworCisgICAgcmV0dXJuICFhcHBseU1ldGhvZC5pc1VuZGVmaW5l
ZCgpOworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1l
KEV4ZWNTdGF0ZSYgc3RhdGUsIEZyYW1lJiBmcmFtZSwgU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsICZm
cmFtZSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgbWVzc2FnZSA9IGZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFj
Y2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdp
bmRvdyhFeGVjU3RhdGUmIHN0YXRlLCBET01XaW5kb3cmIGdsb2JhbE9iamVjdCwgU3RyaW5nJiBt
ZXNzYWdlKQoreworICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9E
T01XaW5kb3coJnN0YXRlLCBnbG9iYWxPYmplY3QsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIG1lc3NhZ2UgPSBnbG9iYWxPYmplY3QuY3Jvc3NE
b21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSkpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiBm
cmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghZnJhbWUpCisgICAgICAg
IHJldHVybjsKKyAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPnByaW50RXJyb3JN
ZXNzYWdlKG1lc3NhZ2UpOworfQorCitTdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
bykKK3sKKyAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5z
dHJ1Y3R1cmVzKE5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgcmV0dXJuIHN0cnVjdHVyZXMuZ2V0
KGNsYXNzSW5mbykuZ2V0KCk7Cit9CisKK1N0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvKQoreworICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01h
cmtpbmcoZ2xvYmFsT2JqZWN0LnZtKCkuaGVhcCwgZ2xvYmFsT2JqZWN0LmdjTG9jaygpKTsKKyAg
ICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5zdHJ1Y3R1cmVz
KGxvY2tlcik7CisgICAgQVNTRVJUKCFzdHJ1Y3R1cmVzLmNvbnRhaW5zKGNsYXNzSW5mbykpOwor
ICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChjbGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+KGdsb2JhbE9iamVjdC52bSgpLCAmZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKS5pdGVyYXRv
ci0+dmFsdWUuZ2V0KCk7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQzMl90IGtNYXhJbnQzMiA9IDB4
N2ZmZmZmZmY7CitzdGF0aWMgY29uc3QgaW50MzJfdCBrTWluSW50MzIgPSAta01heEludDMyIC0g
MTsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBrTWF4VUludDMyID0gMHhmZmZmZmZmZlU7CitzdGF0
aWMgY29uc3QgaW50NjRfdCBrSlNNYXhJbnRlZ2VyID0gMHgyMDAwMDAwMDAwMDAwMExMIC0gMTsg
Ly8gMl41MyAtIDEsIGxhcmdlc3QgaW50ZWdlciBleGFjdGx5IHJlcHJlc2VudGFibGUgaW4gRUNN
QVNjcmlwdC4KKworc3RhdGljIFN0cmluZyByYW5nZUVycm9yU3RyaW5nKGRvdWJsZSB2YWx1ZSwg
ZG91YmxlIG1pbiwgZG91YmxlIG1heCkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiVmFsdWUg
IiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQodmFsdWUpLCAiIGlzIG91dHNpZGUg
dGhlIHJhbmdlIFsiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtaW4pLCAiLCAi
LCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtYXgpLCAiXSIpOworfQorCitzdGF0
aWMgZG91YmxlIGVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgeCwgZG91Ymxl
IG1pbmltdW0sIGRvdWJsZSBtYXhpbXVtKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHN0ZDo6
aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUsIHNjb3BlLCByYW5nZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIHggPSB0cnVuYyh4KTsKKyAgICBpZiAoeCA8IG1pbmlt
dW0gfHwgeCA+IG1heGltdW0pIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICByZXR1cm4geDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citz
dHJ1Y3QgSW50VHlwZUxpbWl0cyB7Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVM
aW1pdHM8aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0IGludDhfdCBtaW5WYWx1ZSA9IC0xMjg7
CisgICAgc3RhdGljIGNvbnN0IGludDhfdCBtYXhWYWx1ZSA9IDEyNzsKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAorfTsKKwordGVtcGxhdGUg
PD4KK3N0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgdWlu
dDhfdCBtYXhWYWx1ZSA9IDI1NTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZW
YWx1ZXMgPSAyNTY7IC8vIDJeOAorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBJbnRUeXBlTGlt
aXRzPGludDE2X3Q+IHsKKyAgICBzdGF0aWMgY29uc3Qgc2hvcnQgbWluVmFsdWUgPSAtMzI3Njg7
CisgICAgc3RhdGljIGNvbnN0IHNob3J0IG1heFZhbHVlID0gMzI3Njc7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKK307CisKK3RlbXBs
YXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50MTZfdD4geworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBzaG9ydCBtYXhWYWx1ZSA9IDY1NTM1OworICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Cit9OworCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KK3N0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJJbnQoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2lnbmVkPFQ+
Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVz
ZWQgZm9yIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOworCisgICAgdHlwZWRlZiBJbnRUeXBlTGlt
aXRzPFQ+IExpbWl0c1RyYWl0OworICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxy
ZWFkeSBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCisgICAgaWYg
KHZhbHVlLmlzSW50MzIoKSkgeworICAgICAgICBpbnQzMl90IGQgPSB2YWx1ZS5hc0ludDMyKCk7
CisgICAgICAgIGlmIChkID49IExpbWl0c1RyYWl0OjptaW5WYWx1ZSAmJiBkIDw9IExpbWl0c1Ry
YWl0OjptYXhWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKKyAg
ICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
KyAgICAgICAgICAgIHJldHVybiBkIDwgTGltaXRzVHJhaXQ6Om1pblZhbHVlID8gTGltaXRzVHJh
aXQ6Om1pblZhbHVlIDogTGltaXRzVHJhaXQ6Om1heFZhbHVlOworICAgICAgICB9CisgICAgICAg
IGQgJT0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VD4oZCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/IGQgLSBMaW1pdHNUcmFpdDo6bnVt
YmVyT2ZWYWx1ZXMgOiBkKTsKKyAgICB9CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisKKyAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdl
KHN0YXRlLCB4LCBMaW1pdHNUcmFpdDo6bWluVmFsdWUsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7
CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAg
ICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOworICAgIH0KKworICAg
IGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCisgICAgICAgIHJldHVy
biAwOworCisgICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7
CisgICAgeCA9IGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKTsKKworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUPih4ID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8geCAtIExpbWl0
c1RyYWl0OjpudW1iZXJPZlZhbHVlcyA6IHgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K3N0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorewor
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1
ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9y
IHVuc2lnbmVkIGludGVncmFsIHR5cGVzIik7CisKKyAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8
VD4gTGltaXRzVHJhaXQ7CisgICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5
IGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgorICAgIGlmICh2
YWx1ZS5pc1VJbnQzMigpKSB7CisgICAgICAgIHVpbnQzMl90IGQgPSB2YWx1ZS5hc1VJbnQzMigp
OworICAgICAgICBpZiAoZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
eworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAg
ICAgcmV0dXJuIExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCAwKTsKKworICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Cisg
ICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIExpbWl0c1RyYWl0OjptYXhW
YWx1ZSk7CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgor
ICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOworICAgIH0K
KworICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCisgICAgICAg
IHJldHVybiAwOworCisgICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFi
cyh4KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51
bWJlck9mVmFsdWVzKSk7Cit9CisKK2ludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8
aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlKTsKK30KKwordWludDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1
aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlKTsKK30KKworaW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3Rh
dGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKwor
dWludDhfdCB0b1VJbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKKy8vIGh0dHA6Ly93d3cu
dzMub3JnL1RSL1dlYklETC8jZXMtYnl0ZQoraW50OF90IHRvSW50OChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0
ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKK30KKwor
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1vY3RldAordWludDhfdCB0b1VJbnQ4
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxl
clVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCk7Cit9CisKK2ludDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZf
dD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZSk7Cit9CisKK3VpbnQxNl90IHRvVUludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+
KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2UpOworfQorCitpbnQxNl90IHRvSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKwordWludDE2X3Qg
dG9VSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJl
dHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9X
ZWJJREwvI2VzLXNob3J0CitpbnQxNl90IHRvSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQorCisvLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLXNob3J0Cit1aW50MTZfdCB0b1VJ
bnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1Nt
YWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNl
cy1sb25nCitpbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisg
ICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisgICAg
cmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwga01pbkludDMyLCBrTWF4SW50MzIpOworfQor
CitpbnQzMl90IHRvSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMy
KCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgcmV0dXJu
IHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxpbnQzMl90Pih4KTsKK30KKwordWludDMyX3Qg
dG9VSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKwor
ICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjpp
c25hbih4KSA/IDAgOiBjbGFtcFRvPHVpbnQzMl90Pih4KTsKK30KKworLy8gaHR0cDovL3d3dy53
My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nCit1aW50MzJfdCB0b1VJbnQzMkVuZm9y
Y2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQz
MigpOworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUs
IHgsIDAsIGtNYXhVSW50MzIpOworfQorCitpbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
ZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIC1rSlNNYXhJ
bnRlZ2VyLCBrSlNNYXhJbnRlZ2VyKTsKK30KKwordWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFu
Z2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAs
IGtKU01heEludGVnZXIpOworfQorCitpbnQ2NF90IHRvSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PGlu
dDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAta0pTTWF4SW50ZWdl
ciksIGtKU01heEludGVnZXIpKTsKK30KKwordWludDY0X3QgdG9VSW50NjRDbGFtcChFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50
b051bWJlcigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgMCksIGtK
U01heEludGVnZXIpKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1s
b25nLWxvbmcKK2ludDY0X3QgdG9JbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKworICAgIC8vIE1h
cCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1ZXMgbW9kdWxv
IDJeNjQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG47CisgICAgZG91YmxlVG9JbnRlZ2VyKHgs
IG4pOworICAgIHJldHVybiBuOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwv
I2VzLXVuc2lnbmVkLWxvbmctbG9uZwordWludDY0X3QgdG9VSW50NjQoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7CisKKyAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5p
dGUgdmFsdWVzIG1vZHVsbyAyXjY0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOworICAgIGRv
dWJsZVRvSW50ZWdlcih4LCBuKTsKKyAgICByZXR1cm4gbjsKK30KKworY2xhc3MgR2V0Q2FsbGVy
R2xvYmFsT2JqZWN0RnVuY3RvciB7CitwdWJsaWM6CisgICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0
RnVuY3RvcigpID0gZGVmYXVsdDsKKworICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9y
KCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2hh
c1NraXBwZWRGaXJzdEZyYW1lKSB7CisgICAgICAgICAgICBtX2hhc1NraXBwZWRGaXJzdEZyYW1l
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8qIGNvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9j
aygpKQorICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdG9yLT5jYWxsZWUo
KSk7CisgICAgICAgICAgICAvLyBGSVhNRTogQ2FsbGVlIGlzIG5vdCBhbiBvYmplY3QgaWYgdGhl
IGNhbGxlciBpcyBXZWIgQXNzZW1ibHkuCisgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQg
dG8gZG8gaGVyZS4gV2UgY2FuIHByb2JhYmx5IGdldCB0aGUgZ2xvYmFsIG9iamVjdAorICAgICAg
ICAgICAgLy8gZnJvbSB0aGUgdG9wLW1vc3QgV2FzbSBJbnN0YW5jZS4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcyMQorICAgICAgICAgICAgaWYgKHZpc2l0b3It
PmNhbGxlZSgpLT5pc09iamVjdCgpKQorICAgICAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0g
anNDYXN0PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOworICAgIH0KKworICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9i
amVjdDsgfQorCitwcml2YXRlOgorICAgIG11dGFibGUgYm9vbCBtX2hhc1NraXBwZWRGaXJzdEZy
YW1lIHsgZmFsc2UgfTsKKyAgICBtdXRhYmxlIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVj
dCB7IG51bGxwdHIgfTsKK307CisKK0RPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yIGl0ZXI7CisgICAg
ZXhlYy0+aXRlcmF0ZShpdGVyKTsKKyAgICByZXR1cm4gaXRlci5nbG9iYWxPYmplY3QoKSA/IGFz
SlNET01XaW5kb3coaXRlci5nbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKSA6IGZpcnN0RE9NV2lu
ZG93KGV4ZWMpOworfQorCitET01XaW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKS0+d3JhcHBlZCgpOworfQorCitET01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT52bUVudHJ5R2xvYmFs
T2JqZWN0KCkpLT53cmFwcGVkKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjYW5BY2Nlc3NE
b2N1bWVudChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERvY3VtZW50KiB0YXJnZXREb2N1bWVudCwg
U2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQoreworICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIGlmICghdGFyZ2V0RG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IERPTVdpbmRvdyYgYWN0aXZlID0gYWN0aXZlRE9NV2luZG93KHN0YXRlKTsKKworICAgIGlmIChh
Y3RpdmUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5jYW5BY2Nlc3ModGFyZ2V0RG9jdW1l
bnQtPnNlY3VyaXR5T3JpZ2luKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHN3aXRj
aCAocmVwb3J0aW5nT3B0aW9uKSB7CisgICAgY2FzZSBUaHJvd1NlY3VyaXR5RXJyb3I6CisgICAg
ICAgIHRocm93U2VjdXJpdHlFcnJvcigqc3RhdGUsIHNjb3BlLCB0YXJnZXREb2N1bWVudC0+ZG9t
V2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIExvZ1NlY3VyaXR5RXJyb3I6CisgICAgICAgIHByaW50RXJyb3JN
ZXNzYWdlRm9yRnJhbWUodGFyZ2V0RG9jdW1lbnQtPmZyYW1lKCksIHRhcmdldERvY3VtZW50LT5k
b21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yOgorICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
RE9NV2luZG93JiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlv
bikKK3sKKyAgICByZXR1cm4gY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC5kb2N1bWVu
dCgpLCByZXBvcnRpbmdPcHRpb24pOworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxk
QWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRnJhbWUqIHRhcmdldCwg
U2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQoreworICAgIHJldHVybiB0
YXJnZXQgJiYgY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC0+ZG9jdW1lbnQoKSwgcmVw
b3J0aW5nT3B0aW9uKTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9Ob2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgTm9kZSogdGFyZ2V0KQoreworICAgIHJl
dHVybiAhdGFyZ2V0IHx8IGNhbkFjY2Vzc0RvY3VtZW50KCZzdGF0ZSwgJnRhcmdldC0+ZG9jdW1l
bnQoKSwgTG9nU2VjdXJpdHlFcnJvcik7Cit9CisgICAgCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
dGhyb3dUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZCBh
cHBlbmRBcmd1bWVudE11c3RCZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCB1bnNpZ25lZCBhcmd1
bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGludGVyZmFj
ZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIkFyZ3VtZW50ICIpOworICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGFyZ3VtZW50SW5k
ZXggKyAxKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAoJyIpOworICAgIGJ1aWxkZXIu
YXBwZW5kKGFyZ3VtZW50TmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCInKSB0byAi
KTsKKyAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgeworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoInRoZSAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7CisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGNvbnN0cnVjdG9yIik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCcuJyk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZ1bmN0aW9uTmFtZSk7CisgICAg
fQorICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG11c3QgYmUgIik7Cit9CisKK0pTQzo6RW5j
b2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFt
ZSkKK3sKKyAgICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0
YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2
ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3Bl
cnR5ICciLCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VOYW1lLCAiIG9i
amVjdC4iKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30K
KyAgICAKK3ZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFt
ZSkKK3sKKyAgICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0
YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2
ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gc2V0IHByb3BlcnR5
ICciLCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VOYW1lLCAiIG9iamVj
dC4iKSk7Cit9CisKK3ZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhj
ZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpKTsKK30KKwordm9pZCB0aHJvd05vdFN1
cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsKKyAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKKyAgICB0aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVE
X0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsKK30KKwordm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hh
ciogbWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBTdHJp
bmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNj
b3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTlZBTElEX1NUQVRFX0VSUiwgJm1lc3Nh
Z2VTdHJpbmcpKTsKK30KKwordm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7
CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0
YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU0VDVVJJVFlfRVJSLCBtZXNz
YWdlKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1F
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2ln
bmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciog
ZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNo
YXIqIGV4cGVjdGVkVmFsdWVzKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBh
cHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUs
IGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKKyAgICBidWlsZGVyLmFwcGVu
ZExpdGVyYWwoIm9uZSBvZjogIik7CisgICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRWYWx1ZXMp
OworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9T
dHJpbmcoKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1
bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwg
YXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUp
OworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYSBmdW5jdGlvbiIpOworICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Cit9CisK
K0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgs
IGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkK
K3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYXBwZW5kQXJndW1lbnRNdXN0QmUo
YnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5h
bWUsIGZ1bmN0aW9uTmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJhbiBpbnN0YW5j
ZSBvZiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFR5cGUpOworICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Cit9CisK
K3ZvaWQgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIEFycmF5IGVsZW1lbnQgdHlwZSIpKTsKK30KKwordm9p
ZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKK3sKKyAgICB0aHJvd1R5cGVF
cnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLics
IGF0dHJpYnV0ZU5hbWUsICIgYXR0cmlidXRlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIiwgZXhw
ZWN0ZWRUeXBlKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJl
clR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUs
IGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25z
dCBjaGFyKiBleHBlY3RlZFR5cGUpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiTWVtYmVyICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGRp
Y3Rpb25hcnlOYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnLicpOworICAgIGJ1aWxkZXIuYXBw
ZW5kKG1lbWJlck5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGlzIHJlcXVpcmVk
IGFuZCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVj
dGVkVHlwZSk7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVp
bGRlci50b1N0cmluZygpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVj
dG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1l
KQoreworICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoJnN0YXRlLCBzY29wZSwgY3JlYXRlUmVmZXJl
bmNlRXJyb3IoJnN0YXRlLCBtYWtlU3RyaW5nKGludGVyZmFjZU5hbWUsICIgY29uc3RydWN0b3Ig
YXNzb2NpYXRlZCBleGVjdXRpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpKSk7Cit9CisKK3Zv
aWQgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpCit7CisgICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIlZhbHVlIGlzIG5vdCBhIHNlcXVlbmNlIikpOworfQorCit2b2lkIHRocm93Tm9u
RmluaXRlVHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
Cit7CisgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJUaGUg
cHJvdmlkZWQgdmFsdWUgaXMgbm9uLWZpbml0ZSIpKTsKK30KKworU3RyaW5nIG1ha2VHZXR0ZXJU
eXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUpCit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VO
YW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgZ2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5z
dGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRo
cm93R2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRl
TmFtZSkKK3sKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBtYWtl
R2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7Cit9
CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3Io
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBhdHRyaWJ1dGVOYW1lKQoreworICAgIHJldHVybiBjcmVhdGVSZWplY3RlZFByb21pc2VX
aXRoVHlwZUVycm9yKHN0YXRlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VO
YW1lLCBhdHRyaWJ1dGVOYW1lKSk7Cit9CisKK2Jvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBp
bnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQoreworICAgIHRocm93VHlw
ZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcu
JywgYXR0cmlidXRlTmFtZSwgIiBzZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBpbnN0YW5jZXMg
b2YgIiwgaW50ZXJmYWNlTmFtZSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIG1h
a2VUaGlzVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUpCit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNhbiBvbmx5IGNh
bGwgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBmdW5jdGlvbk5hbWUsICIgb24gaW5zdGFuY2VzIG9m
ICIsIGludGVyZmFjZU5hbWUpOworfQorCitFbmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7CisgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdl
KGludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVl
IHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmIHByb21pc2Us
IGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCit7Cisg
ICAgcHJvbWlzZS5yZWplY3QoVHlwZUVycm9yLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50
ZXJmYWNlTmFtZSwgbWV0aG9kTmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhU
aGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlUmVqZWN0
ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGlu
dGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKK30KKwordm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3Vy
cmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QmIHRoaXNP
YmplY3QsIEpTQzo6SlNGdW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAgSlNDOjpDYWxsRGF0YSBj
YWxsRGF0YTsKKyAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YSgm
ZnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5v
bmUpOworCisgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICBKU0M6
OmNhbGwoJnN0YXRlLCAmZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJnRoaXNPYmplY3Qs
IGFyZ3VtZW50cyk7Cit9CisKK3ZvaWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxET01Db25zdHJ1Y3RvckpTQnVpbHRp
bk9iamVjdCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsK
K30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFRocm93VHlwZUVy
cm9yKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyBvcGVy
YXRvciIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKK30KKworQ2Fs
bFR5cGUgRE9NQ29uc3RydWN0b3JPYmplY3Q6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRh
JiBjYWxsRGF0YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsVGhyb3dU
eXBlRXJyb3I7CisgICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0OworfQorCit2b2lkIHRocm93RE9N
U3ludGF4RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9u
KCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNZTlRBWF9FUlIpKTsK
K30KKwordm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
KyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0
YXRlLCBEQVRBX0NMT05FX0VSUikpOworfQorCit2b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUs
IGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElOREVYX1NJWkVfRVJSKSk7Cit9CisKK3ZvaWQg
dGhyb3dUeXBlTWlzbWF0Y2hFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhy
b3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgVFlQ
RV9NSVNNQVRDSF9FUlIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdyYXBwZXJDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuY3BwCShyZXZpc2lvbiAyMTEzNTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXJDYWNoZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwLDM3NCArMjAsMTIgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0KLSNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKLSNp
bmNsdWRlICJDb21tb25WTS5oIgotI2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50
LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVE
ZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkhlYWRlcnMuaCIKLSNpbmNsdWRlICJF
eGNlcHRpb25JbnRlcmZhY2VzLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1M
UGFyc2VySWRpb21zLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNs
dWRlICJKU0RPTUNvbnZlcnQuaCIKLSNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKLSNpbmNsdWRl
ICJKU0RPTVdpbmRvd0N1c3RvbS5oIgotI2luY2x1ZGUgIkpTRXhjZXB0aW9uQmFzZS5oIgotI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSA8Ynl0ZWNvZGUvQ29kZUJsb2NrLmg+
Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5oPgotI2luY2x1ZGUgPGluc3Bl
Y3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9EYXRlSW5z
dGFuY2UuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9F
cnJvckhhbmRsaW5nU2NvcGUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9ySW5zdGFuY2UuaD4K
LSNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbi5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0
aW9uSGVscGVycy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgotI2luY2x1ZGUg
PHN0ZGFyZy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3Vu
aWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
U1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yT2Jq
ZWN0KTsKLVNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1
Y3RvcldpdGhEb2N1bWVudCk7Ci0KLXZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWlj
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0
eShwcm9wZXJ0eU5hbWUpOwotfQotCi1KU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgaWYgKHMuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybiBqc051bGwoKTsKLSAgICByZXR1cm4ganNPd25lZFN0cmluZyhleGVjLCBzKTsK
LX0KLQotSlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
U3RyaW5nJiBzKQotewotICAgIGlmIChzLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcyk7Ci19Ci0KLUpT
VmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKLXsKLSAgICBy
ZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdXJsLnN0cmluZygpKTsKLX0KLQotSlNWYWx1
ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCi17
Ci0gICAgaWYgKHVybC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlLCBTdHJpbmcmJiBzdHJpbmcpCi17Ci0gICAgaWYgKCFzdHJp
bmcuY29udGFpbnNPbmx5TGF0aW4xKCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0cmlu
ZzsKLX0KLQotU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIFN0cmlu
ZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOwotICAgIHJldHVybiBzdHJpbmdUb0J5dGVT
dHJpbmcoc3RhdGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOwotfQotCi1TdHJpbmcgdmFsdWVU
b0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICByZXR1cm4gc3RyaW5nVG9C
eXRlU3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotc3RhdGljIGlu
bGluZSBib29sIGhhc1VucGFpcmVkU3Vycm9nYXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQotewotICAg
IC8vIEZhc3QgcGF0aCBmb3IgOC1iaXQgc3RyaW5nczsgdGhleSBjYW4ndCBoYXZlIGFueSBzdXJy
b2dhdGVzLgotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogc3RyaW5nLmNvZGVQb2ludHMoKSkgewotICAgICAg
ICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHN0
cmluZ1RvVVNWU3RyaW5nKFN0cmluZyYmIHN0cmluZykKLXsKLSAgICAvLyBGYXN0IHBhdGggZm9y
IHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBubyB1bnBhaXJlZCBzdXJyb2dhdGVzLgotICAgIGlm
ICghaGFzVW5wYWlyZWRTdXJyb2dhdGUoc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIHN0cmluZzsK
LQotICAgIC8vIFNsb3cgcGF0aDogaHR0cDovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4t
b2J0YWluLXVuaWNvZGUKLSAgICAvLyBSZXBsYWNlcyB1bnBhaXJlZCBzdXJyb2dhdGVzIHdpdGgg
dGhlIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4KLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAg
ICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nVmll
dyB2aWV3IHsgc3RyaW5nIH07Ci0gICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHZpZXcuY29kZVBv
aW50cygpKSB7Ci0gICAgICAgIGlmIChVX0lTX1NVUlJPR0FURShjb2RlUG9pbnQpKQotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVudENoYXJhY3Rlcik7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29kZVBvaW50KTsKLSAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdC50b1N0cmluZygpOwotfQotCi1TdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEV4
ZWNTdGF0ZSYsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCi17Ci0gICAgU3RyaW5nIHN0
cmluZyA9IGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5n
KFdURk1vdmUoc3RyaW5nKSk7Ci19Ci0KLVN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBTdHJpbmcgc3Ry
aW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwotCi0gICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3Ry
aW5nKSk7Ci19Ci0KLUpTVmFsdWUganNEYXRlKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVl
KQotewotICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOwotfQotCi1kb3Vi
bGUgdmFsdWVUb0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNOdW1iZXIoKTsKLSAg
ICBpZiAoIXZhbHVlLmluaGVyaXRzKGV4ZWMtPnZtKCksIERhdGVJbnN0YW5jZTo6aW5mbygpKSkK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHZhbHVlLnRvT2JqZWN0KGV4
ZWMpKS0+aW50ZXJuYWxOdW1iZXIoKTsKLX0KLQotdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNj
cmlwdCkKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKHZt
LmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIGF1dG8qIGV4Y2VwdGlvbiA9
IGpzRHluYW1pY0Rvd25jYXN0PEpTQzo6RXhjZXB0aW9uKj4odm0sIGV4Y2VwdGlvblZhbHVlKTsK
LSAgICBpZiAoIWV4Y2VwdGlvbikgewotICAgICAgICBleGNlcHRpb24gPSB2bS5sYXN0RXhjZXB0
aW9uKCk7Ci0gICAgICAgIGlmICghZXhjZXB0aW9uKQotICAgICAgICAgICAgZXhjZXB0aW9uID0g
SlNDOjpFeGNlcHRpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGNlcHRpb25WYWx1ZSwgSlNDOjpF
eGNlcHRpb246OkRvTm90Q2FwdHVyZVN0YWNrKTsKLSAgICB9Ci0KLSAgICByZXBvcnRFeGNlcHRp
b24oZXhlYywgZXhjZXB0aW9uLCBjYWNoZWRTY3JpcHQpOwotfQotCi1TdHJpbmcgcmV0cmlldmVF
cnJvck1lc3NhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgVk0mIHZtLCBKU1ZhbHVlIGV4Y2VwdGlvbiwg
Q2F0Y2hTY29wZSYgY2F0Y2hTY29wZSkKLXsKLSAgICBpZiAoYXV0byogZXhjZXB0aW9uQmFzZSA9
IHRvRXhjZXB0aW9uQmFzZSh2bSwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlv
bkJhc2UtPnRvU3RyaW5nKCk7Ci0KLSAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2Iv
MTE1MDg3PiBXZWIgSW5zcGVjdG9yOiBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24gc2hvdWxkIG5v
dCBldmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKLSAgICAvLyBJZiB0aGlz
IGlzIGEgY3VzdG9tIGV4Y2VwdGlvbiBvYmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5
IGFuZCBnZXQgYSBuaWNlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4K
LSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlmIChhdXRvKiBlcnJvciA9IGpzRHluYW1p
Y0Rvd25jYXN0PEVycm9ySW5zdGFuY2UqPih2bSwgZXhjZXB0aW9uKSkKLSAgICAgICAgZXJyb3JN
ZXNzYWdlID0gZXJyb3ItPnNhbml0aXplZFRvU3RyaW5nKCZzdGF0ZSk7Ci0gICAgZWxzZQotICAg
ICAgICBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb24udG9XVEZTdHJpbmcoJnN0YXRlKTsKLQotICAg
IC8vIFdlIG5lZWQgdG8gY2xlYXIgYW55IG5ldyBleGNlcHRpb24gdGhhdCBtYXkgYmUgdGhyb3du
IGluIHRoZSB0b1N0cmluZygpIGNhbGwgYWJvdmUuCi0gICAgLy8gcmVwb3J0RXhjZXB0aW9uKCkg
aXMgbm90IHN1cHBvc2VkIHRvIGJlIG1ha2luZyBuZXcgZXhjZXB0aW9ucy4KLSAgICBjYXRjaFNj
b3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgdm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7Ci0gICAg
cmV0dXJuIGVycm9yTWVzc2FnZTsKLX0KLQotdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRl
KiBleGVjLCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNj
cmlwdCwgRXhjZXB0aW9uRGV0YWlscyogZXhjZXB0aW9uRGV0YWlscykKLXsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsK
LQotICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkp
OwotICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24odm0sIGV4Y2VwdGlvbikp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4
ZWMtPnZtKCkpOwotCi0gICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0
ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBTY3JpcHRDYWxs
U3RhY2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUpKTsKLSAgICBzY29wZS5jbGVhckV4Y2Vw
dGlvbigpOwotICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOwotCi0gICAgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSk7Ci0gICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cgPSBqc0R5
bmFtaWNEb3duY2FzdDxKU0RPTVdpbmRvdyo+KHZtLCBnbG9iYWxPYmplY3QpKSB7Ci0gICAgICAg
IGlmICghd2luZG93LT53cmFwcGVkKCkuaXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAg
IGludCBjb2x1bW5OdW1iZXIgPSAwOwotICAgIFN0cmluZyBleGNlcHRpb25Tb3VyY2VVUkw7Ci0g
ICAgaWYgKGNvbnN0IFNjcmlwdENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbFN0YWNrLT5maXJz
dE5vbk5hdGl2ZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIGxpbmVOdW1iZXIgPSBjYWxsRnJhbWUt
PmxpbmVOdW1iZXIoKTsKLSAgICAgICAgY29sdW1uTnVtYmVyID0gY2FsbEZyYW1lLT5jb2x1bW5O
dW1iZXIoKTsKLSAgICAgICAgZXhjZXB0aW9uU291cmNlVVJMID0gY2FsbEZyYW1lLT5zb3VyY2VV
UkwoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gcmV0cmlldmVFcnJvck1l
c3NhZ2UoKmV4ZWMsIHZtLCBleGNlcHRpb24tPnZhbHVlKCksIHNjb3BlKTsKLSAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cmVw
b3J0RXhjZXB0aW9uKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBleGNl
cHRpb25Tb3VyY2VVUkwsIGV4Y2VwdGlvbiwgY2FsbFN0YWNrLT5zaXplKCkgPyBjYWxsU3RhY2sg
OiBudWxscHRyLCBjYWNoZWRTY3JpcHQpOwotCi0gICAgaWYgKGV4Y2VwdGlvbkRldGFpbHMpIHsK
LSAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+bWVzc2FnZSA9IGVycm9yTWVzc2FnZTsKLSAgICAg
ICAgZXhjZXB0aW9uRGV0YWlscy0+bGluZU51bWJlciA9IGxpbmVOdW1iZXI7Ci0gICAgICAgIGV4
Y2VwdGlvbkRldGFpbHMtPmNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJlcjsKLSAgICAgICAgZXhj
ZXB0aW9uRGV0YWlscy0+c291cmNlVVJMID0gZXhjZXB0aW9uU291cmNlVVJMOwotICAgIH0KLX0K
LQotdm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKLSAgICBhdXRvKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKLSAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24p
OwotfQotCi1zdGF0aWMgSlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVj
LCBFeGNlcHRpb25Db2RlIGVjLCBjb25zdCBTdHJpbmcqIG1lc3NhZ2UgPSBudWxscHRyKQotewot
ICAgIGlmICghZWMgfHwgZWMgPT0gRXhpc3RpbmdFeGNlcHRpb25FcnJvcikKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBGSVhNRTogSGFuZGxlIG90aGVyIFdlYklETCBl
eGNlcHRpb24gdHlwZXMuCi0gICAgaWYgKGVjID09IFR5cGVFcnJvcikgewotICAgICAgICBpZiAo
IW1lc3NhZ2UgfHwgbWVzc2FnZS0+aXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZVR5cGVFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAq
bWVzc2FnZSk7Ci0gICAgfQotCi0gICAgaWYgKGVjID09IFJhbmdlRXJyb3IpIHsKLSAgICAgICAg
aWYgKCFtZXNzYWdlIHx8IG1lc3NhZ2UtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBj
cmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQmFkIHZhbHVlIikpOwotICAgICAg
ICByZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAqbWVzc2FnZSk7Ci0gICAgfQotCi0gICAg
aWYgKGVjID09IFN0YWNrT3ZlcmZsb3dFcnJvcikKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YWNr
T3ZlcmZsb3dFcnJvcihleGVjKTsKLQotICAgIC8vIEZJWE1FOiBBbGwgY2FsbGVycyB0byBjcmVh
dGVET01FeGNlcHRpb24gbmVlZCB0byBwYXNzIGluIHRoZSBjb3JyZWN0IGdsb2JhbCBvYmplY3Qu
Ci0gICAgLy8gRm9yIG5vdywgd2UncmUgZ29pbmcgdG8gYXNzdW1lIHRoZSBsZXhpY2FsR2xvYmFs
T2JqZWN0LiBXaGljaCBpcyB3cm9uZyBpbiBjYXNlcyBsaWtlIHRoaXM6Ci0gICAgLy8gZnJhbWVz
WzBdLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobnVsbCwgbnVsbCk7IC8vIHRocm93cyBhbiBleGNl
cHRpb24gd2hpY2ggc2hvdWxkIGhhdmUgdGhlIHN1YmZyYW1lJ3MgcHJvdG90eXBlcy4KLSAgICBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZv
clByb3RvdHlwZShleGVjKTsKLQotICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlw
dGlvbihlYyk7Ci0KLSAgICBDU3RyaW5nIG1lc3NhZ2VDU3RyaW5nOwotICAgIGlmIChtZXNzYWdl
KQotICAgICAgICBtZXNzYWdlQ1N0cmluZyA9IG1lc3NhZ2UtPnV0ZjgoKTsKLSAgICBpZiAobWVz
c2FnZSAmJiAhbWVzc2FnZS0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEl0IGlzIHNhZmUgdG8g
ZG8gdGhpcyBiZWNhdXNlIHRoZSBjaGFyKiBjb250ZW50cyBvZiB0aGUgQ1N0cmluZyBhcmUgY29w
aWVkIGludG8gYSBuZXcgV1RGOjpTdHJpbmcgYmVmb3JlIHRoZSBDU3RyaW5nIGlzIGRlc3Ryb3ll
ZC4KLSAgICAgICAgZGVzY3JpcHRpb24uZGVzY3JpcHRpb24gPSBtZXNzYWdlQ1N0cmluZy5kYXRh
KCk7Ci0gICAgfQotCi0gICAgSlNWYWx1ZSBlcnJvck9iamVjdDsKLSAgICBzd2l0Y2ggKGRlc2Ny
aXB0aW9uLnR5cGUpIHsKLSAgICBjYXNlIERPTUNvcmVFeGNlcHRpb25UeXBlOgotI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotICAgIGNhc2UgSURCRGF0YWJhc2VFeGNlcHRpb25UeXBlOgot
I2VuZGlmCi0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIERP
TUNvcmVFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEZpbGVFeGNlcHRpb25UeXBlOgotICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBGaWxlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTUUxFeGNlcHRpb25UeXBlOgotICAgICAgICBlcnJvck9i
amVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTUUxFeGNlcHRpb246OmNyZWF0ZShkZXNj
cmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR0V4Y2VwdGlvblR5cGU6Ci0g
ICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFNWR0V4Y2VwdGlv
bjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgWFBhdGhF
eGNlcHRpb25UeXBlOgotICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBYUGF0aEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoZXJyb3JPYmplY3QpOwotICAgIGFkZEVycm9ySW5m
byhleGVjLCBhc09iamVjdChlcnJvck9iamVjdCksIHRydWUpOwotICAgIHJldHVybiBlcnJvck9i
amVjdDsKLX0KLQotSlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBF
eGNlcHRpb25Db2RlIGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIGNy
ZWF0ZURPTUV4Y2VwdGlvbihleGVjLCBlYywgJm1lc3NhZ2UpOwotfQotCi1KU1ZhbHVlIGNyZWF0
ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCi17
Ci0gICAgcmV0dXJuIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIGV4Y2VwdGlvbi5jb2RlKCks
IGV4Y2VwdGlvbi5yZWxlYXNlTWVzc2FnZSgpKTsKLX0KLQotdm9pZCBwcm9wYWdhdGVFeGNlcHRp
b25TbG93UGF0aChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dT
Y29wZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQotewotICAgIEFTU0VSVCghdGhyb3dTY29wZS5l
eGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBjcmVh
dGVET01FeGNlcHRpb24oc3RhdGUsIFdURk1vdmUoZXhjZXB0aW9uKSkpOwotfQotCi1ib29sIGhh
c0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotewotICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZh
bHVlKTsKLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZTsKLSAg
ICBKU1ZhbHVlIGFwcGx5TWV0aG9kID0gb2JqZWN0LT5nZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0
YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBBU0NJSUxpdGVy
YWwoIlN5bWJvbC5pdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotCi0gICAgcmV0dXJuICFhcHBseU1l
dGhvZC5pc1VuZGVmaW5lZCgpOwotfQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxs
b3dBY2Nlc3NUb0ZyYW1lKEV4ZWNTdGF0ZSYgc3RhdGUsIEZyYW1lJiBmcmFtZSwgU3RyaW5nJiBt
ZXNzYWdlKQotewotICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9G
cmFtZSgmc3RhdGUsICZmcmFtZSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgbWVzc2FnZSA9IGZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygp
LT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxs
b3dBY2Nlc3NUb0RPTVdpbmRvdyhFeGVjU3RhdGUmIHN0YXRlLCBET01XaW5kb3cmIGdsb2JhbE9i
amVjdCwgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3Vs
ZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRlLCBnbG9iYWxPYmplY3QsIERvTm90UmVwb3J0
U2VjdXJpdHlFcnJvcikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIG1lc3NhZ2UgPSBnbG9i
YWxPYmplY3QuY3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZz
dGF0ZSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBwcmludEVycm9yTWVzc2FnZUZv
ckZyYW1lKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93
KCktPnByaW50RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOwotfQotCiBTdHJ1Y3R1cmUqIGdldENhY2hl
ZERPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mbykKIHsKICAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9
IGdsb2JhbE9iamVjdC5zdHJ1Y3R1cmVzKE5vTG9ja2luZ05lY2Vzc2FyeSk7CkBAIC00MDIsNjMz
ICs0MCw0IEBAIFN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWwKICAgICBy
ZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPihn
bG9iYWxPYmplY3Qudm0oKSwgJmdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSkuaXRlcmF0b3ItPnZh
bHVlLmdldCgpOwogfQogCi1zdGF0aWMgY29uc3QgaW50MzJfdCBrTWF4SW50MzIgPSAweDdmZmZm
ZmZmOwotc3RhdGljIGNvbnN0IGludDMyX3Qga01pbkludDMyID0gLWtNYXhJbnQzMiAtIDE7Ci1z
dGF0aWMgY29uc3QgdWludDMyX3Qga01heFVJbnQzMiA9IDB4ZmZmZmZmZmZVOwotc3RhdGljIGNv
bnN0IGludDY0X3Qga0pTTWF4SW50ZWdlciA9IDB4MjAwMDAwMDAwMDAwMDBMTCAtIDE7IC8vIDJe
NTMgLSAxLCBsYXJnZXN0IGludGVnZXIgZXhhY3RseSByZXByZXNlbnRhYmxlIGluIEVDTUFTY3Jp
cHQuCi0KLXN0YXRpYyBTdHJpbmcgcmFuZ2VFcnJvclN0cmluZyhkb3VibGUgdmFsdWUsIGRvdWJs
ZSBtaW4sIGRvdWJsZSBtYXgpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIlZhbHVlICIsIFN0
cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHZhbHVlKSwgIiBpcyBvdXRzaWRlIHRoZSBy
YW5nZSBbIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWluKSwgIiwgIiwgU3Ry
aW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWF4KSwgIl0iKTsKLX0KLQotc3RhdGljIGRv
dWJsZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHgsIGRvdWJsZSBtaW5p
bXVtLCBkb3VibGUgbWF4aW11bSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmIChzdGQ6OmlzbmFu
KHgpIHx8IHN0ZDo6aXNpbmYoeCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSk7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICB4ID0gdHJ1bmMoeCk7Ci0gICAgaWYgKHggPCBtaW5pbXVtIHx8
IHggPiBtYXhpbXVtKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIHJh
bmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0
IEludFR5cGVMaW1pdHMgewotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRz
PGludDhfdD4gewotICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWluVmFsdWUgPSAtMTI4OwotICAg
IHN0YXRpYyBjb25zdCBpbnQ4X3QgbWF4VmFsdWUgPSAxMjc7Ci0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKLX07Ci0KLXRlbXBsYXRlIDw+Ci1z
dHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50OF90PiB7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qg
bWF4VmFsdWUgPSAyNTU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVz
ID0gMjU2OyAvLyAyXjgKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czxp
bnQxNl90PiB7Ci0gICAgc3RhdGljIGNvbnN0IHNob3J0IG1pblZhbHVlID0gLTMyNzY4OwotICAg
IHN0YXRpYyBjb25zdCBzaG9ydCBtYXhWYWx1ZSA9IDMyNzY3OwotICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Ci19OwotCi10ZW1wbGF0ZSA8
Pgotc3RydWN0IEludFR5cGVMaW1pdHM8dWludDE2X3Q+IHsKLSAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgc2hvcnQgbWF4VmFsdWUgPSA2NTUzNTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci1zdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQot
ewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NpZ25lZDxUPjo6dmFs
dWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBiZSB1c2VkIGZv
ciBzaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKLQotICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxU
PiBMaW1pdHNUcmFpdDsKLSAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkg
YSAzMi1iaXQgc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgotICAgIGlmICh2YWx1
ZS5pc0ludDMyKCkpIHsKLSAgICAgICAgaW50MzJfdCBkID0gdmFsdWUuYXNJbnQzMigpOwotICAg
ICAgICBpZiAoZCA+PSBMaW1pdHNUcmFpdDo6bWluVmFsdWUgJiYgZCA8PSBMaW1pdHNUcmFpdDo6
bWF4VmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7Ci0gICAgICAg
IHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAg
ICAgICAgICByZXR1cm4gZCA8IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA/IExpbWl0c1RyYWl0Ojpt
aW5WYWx1ZSA6IExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKLSAgICAgICAgfQotICAgICAgICBkICU9
IExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlczsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KGQgPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyBkIC0gTGltaXRzVHJhaXQ6Om51bWJlck9m
VmFsdWVzIDogZCk7Ci0gICAgfQotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotCi0gICAgc3dpdGNoIChj
b25maWd1cmF0aW9uKSB7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0
ZSwgeCwgTGltaXRzVHJhaXQ6Om1pblZhbHVlLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOwotICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgcmV0
dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsKLSAgICB9Ci0KLSAgICBpZiAo
c3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6IGZsb29yKGZhYnMoeCkpOwotICAg
IHggPSBmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyk7Ci0KLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VD4oeCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/IHggLSBMaW1pdHNUcmFp
dDo6bnVtYmVyT2ZWYWx1ZXMgOiB4KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdGF0
aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICBW
TSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUgJiYg
c3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBiZSB1c2VkIGZvciB1bnNp
Z25lZCBpbnRlZ3JhbCB0eXBlcyIpOwotCi0gICAgdHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExp
bWl0c1RyYWl0OwotICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMy
LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KLSAgICBpZiAodmFsdWUu
aXNVSW50MzIoKSkgewotICAgICAgICB1aW50MzJfdCBkID0gdmFsdWUuYXNVSW50MzIoKTsKLSAg
ICAgICAgaWYgKGQgPD0gTGltaXRzVHJhaXQ6Om1heFZhbHVlKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQ+KGQpOwotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJl
dHVybiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBkb3Vi
bGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgMCk7Ci0KLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAg
ICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUp
OwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6IGZsb29yKGZhYnMoeCkp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJP
ZlZhbHVlcykpOwotfQotCi1pbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhf
dD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZSk7Ci19Ci0KLXVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhf
dD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZSk7Ci19Ci0KLWludDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Ci19Ci0KLXVpbnQ4
X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9y
Zy9UUi9XZWJJREwvI2VzLWJ5dGUKLWludDhfdCB0b0ludDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLS8vIGh0
dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtb2N0ZXQKLXVpbnQ4X3QgdG9VSW50OChFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50
PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpOwotfQotCi1pbnQxNl90IHRvSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0
YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2Up
OwotfQotCi11aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0
ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsK
LX0KLQotaW50MTZfdCB0b0ludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Ci19Ci0KLXVpbnQxNl90IHRvVUlu
dDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
dG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURM
LyNlcy1zaG9ydAotaW50MTZfdCB0b0ludDE2KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1zaG9ydAotdWludDE2X3QgdG9VSW50MTYo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVy
VUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtbG9u
ZwotaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAg
ICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVy
biBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIGtNaW5JbnQzMiwga01heEludDMyKTsKLX0KLQotaW50
MzJfdCB0b0ludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwot
Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6
OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88aW50MzJfdD4oeCk7Ci19Ci0KLXVpbnQzMl90IHRvVUlu
dDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUuaXNVSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICBk
b3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6aXNuYW4o
eCkgPyAwIDogY2xhbXBUbzx1aW50MzJfdD4oeCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3Jn
L1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9uZwotdWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFu
Z2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0
ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAg
IGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsK
LQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAw
LCBrTWF4VUludDMyKTsKLX0KLQotaW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGRvdWJs
ZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAta0pTTWF4SW50ZWdl
ciwga0pTTWF4SW50ZWdlcik7Ci19Ci0KLXVpbnQ2NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0
ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAg
IGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrSlNN
YXhJbnRlZ2VyKTsKLX0KLQotaW50NjRfdCB0b0ludDY0Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0
YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ2NF90
PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgLWtKU01heEludGVnZXIpLCBr
SlNNYXhJbnRlZ2VyKSk7Ci19Ci0KLXVpbnQ2NF90IHRvVUludDY0Q2xhbXAoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1i
ZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0aWNfY2FzdDx1
aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+KHgsIDApLCBrSlNNYXhJ
bnRlZ2VyKSk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtbG9uZy1s
b25nCi1pbnQ2NF90IHRvSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0KLSAgICAvLyBNYXAgTmFO
cyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0
LgotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOwotICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsK
LSAgICByZXR1cm4gbjsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11
bnNpZ25lZC1sb25nLWxvbmcKLXVpbnQ2NF90IHRvVUludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwot
Ci0gICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZh
bHVlcyBtb2R1bG8gMl42NC4KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbjsKLSAgICBkb3VibGVU
b0ludGVnZXIoeCwgbik7Ci0gICAgcmV0dXJuIG47Ci19Ci0KLWNsYXNzIEdldENhbGxlckdsb2Jh
bE9iamVjdEZ1bmN0b3IgewotcHVibGljOgotICAgIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0
b3IoKSA9IGRlZmF1bHQ7Ci0KLSAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0
YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghbV9oYXNTa2lw
cGVkRmlyc3RGcmFtZSkgewotICAgICAgICAgICAgbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSA9IHRy
dWU7Ci0gICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChhdXRvKiBjb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKSkK
LSAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQodmlzaXRvci0+Y2FsbGVlKCkpOwot
ICAgICAgICAgICAgLy8gRklYTUU6IENhbGxlZSBpcyBub3QgYW4gb2JqZWN0IGlmIHRoZSBjYWxs
ZXIgaXMgV2ViIEFzc2VtYmx5LgotICAgICAgICAgICAgLy8gRmlndXJlIG91dCB3aGF0IHRvIGRv
IGhlcmUuIFdlIGNhbiBwcm9iYWJseSBnZXQgdGhlIGdsb2JhbCBvYmplY3QKLSAgICAgICAgICAg
IC8vIGZyb20gdGhlIHRvcC1tb3N0IFdhc20gSW5zdGFuY2UuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MjEKLSAgICAgICAgICAgIGlmICh2aXNpdG9yLT5jYWxs
ZWUoKS0+aXNPYmplY3QoKSkKLSAgICAgICAgICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGpzQ2Fz
dDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKLSAgICB9Ci0KLSAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3Q7
IH0KLQotcHJpdmF0ZToKLSAgICBtdXRhYmxlIGJvb2wgbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSB7
IGZhbHNlIH07Ci0gICAgbXV0YWJsZSBKU0dsb2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3QgeyBu
dWxscHRyIH07Ci19OwotCi1ET01XaW5kb3cmIGNhbGxlckRPTVdpbmRvdyhFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvciBpdGVyOwotICAgIGV4ZWMt
Pml0ZXJhdGUoaXRlcik7Ci0gICAgcmV0dXJuIGl0ZXIuZ2xvYmFsT2JqZWN0KCkgPyBhc0pTRE9N
V2luZG93KGl0ZXIuZ2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCkgOiBmaXJzdERPTVdpbmRvdyhl
eGVjKTsKLX0KLQotRE9NV2luZG93JiBhY3RpdmVET01XaW5kb3coRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkt
PndyYXBwZWQoKTsKLX0KLQotRE9NV2luZG93JiBmaXJzdERPTVdpbmRvdyhFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVj
dCgpKS0+d3JhcHBlZCgpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY2FuQWNjZXNzRG9jdW1l
bnQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEb2N1bWVudCogdGFyZ2V0RG9jdW1lbnQsIFNlY3Vy
aXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKLXsKLSAgICBWTSYgdm0gPSBzdGF0
ZS0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICBpZiAoIXRhcmdldERvY3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBET01X
aW5kb3cmIGFjdGl2ZSA9IGFjdGl2ZURPTVdpbmRvdyhzdGF0ZSk7Ci0KLSAgICBpZiAoYWN0aXZl
LmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkuY2FuQWNjZXNzKHRhcmdldERvY3VtZW50LT5z
ZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBzd2l0Y2ggKHJl
cG9ydGluZ09wdGlvbikgewotICAgIGNhc2UgVGhyb3dTZWN1cml0eUVycm9yOgotICAgICAgICB0
aHJvd1NlY3VyaXR5RXJyb3IoKnN0YXRlLCBzY29wZSwgdGFyZ2V0RG9jdW1lbnQtPmRvbVdpbmRv
dygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmUpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBMb2dTZWN1cml0eUVycm9yOgotICAgICAgICBwcmludEVycm9yTWVzc2Fn
ZUZvckZyYW1lKHRhcmdldERvY3VtZW50LT5mcmFtZSgpLCB0YXJnZXREb2N1bWVudC0+ZG9tV2lu
ZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZSkpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcjoKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6
c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERPTVdp
bmRvdyYgdGFyZ2V0LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCi17
Ci0gICAgcmV0dXJuIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJnZXQuZG9jdW1lbnQoKSwg
cmVwb3J0aW5nT3B0aW9uKTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93
QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEZyYW1lKiB0YXJnZXQsIFNlY3Vy
aXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKLXsKLSAgICByZXR1cm4gdGFyZ2V0
ICYmIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJnZXQtPmRvY3VtZW50KCksIHJlcG9ydGlu
Z09wdGlvbik7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1Rv
Tm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIE5vZGUqIHRhcmdldCkKLXsKLSAgICByZXR1cm4g
IXRhcmdldCB8fCBjYW5BY2Nlc3NEb2N1bWVudCgmc3RhdGUsICZ0YXJnZXQtPmRvY3VtZW50KCks
IExvZ1NlY3VyaXR5RXJyb3IpOwotfQotICAgIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIHRocm93
VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoJnN0YXRlLCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKLX0KLQotc3RhdGljIHZvaWQgYXBwZW5k
QXJndW1lbnRNdXN0QmUoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgdW5zaWduZWQgYXJndW1lbnRJ
bmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1l
LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJBcmd1bWVudCAiKTsKLSAgICBidWlsZGVyLmFwcGVuZE51bWJlcihhcmd1bWVudEluZGV4ICsg
MSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgKCciKTsKLSAgICBidWlsZGVyLmFwcGVu
ZChhcmd1bWVudE5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJykgdG8gIik7Ci0g
ICAgaWYgKCFmdW5jdGlvbk5hbWUpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ0
aGUgIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5hbWUpOwotICAgICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiBjb25zdHJ1Y3RvciIpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5hbWUpOwotICAgICAgICBidWlsZGVyLmFwcGVu
ZCgnLicpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChmdW5jdGlvbk5hbWUpOwotICAgIH0KLSAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBtdXN0IGJlICIpOwotfQotCi1KU0M6OkVuY29kZWRK
U1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17
Ci0gICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgY29u
dGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpF
cnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAn
IiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNlTmFtZSwgIiBvYmplY3Qu
IikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0gICAg
Ci12b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17
Ci0gICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgY29u
dGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpF
cnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIHNldCBwcm9wZXJ0eSAnIiwg
YXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNlTmFtZSwgIiBvYmplY3QuIikp
OwotfQotCi12b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlv
bigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSKSk7Ci19Ci0KLXZvaWQgdGhyb3dOb3RTdXBwb3J0
ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNv
bnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0g
ICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0
YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIs
ICZtZXNzYWdlU3RyaW5nKSk7Ci19Ci0KLXZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1l
c3NhZ2UpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgU3RyaW5nIG1l
c3NhZ2VTdHJpbmcobWVzc2FnZSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwg
Y3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5WQUxJRF9TVEFURV9FUlIsICZtZXNzYWdlU3Ry
aW5nKSk7Ci19Ci0KLXZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNFQ1VSSVRZX0VSUiwgbWVzc2FnZSkp
OwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3Io
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBh
cmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0
aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBl
eHBlY3RlZFZhbHVlcykKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBwZW5k
QXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBmdW5j
dGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJvbmUgb2Y6ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVmFsdWVzKTsKLSAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5n
KCkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlv
bkVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5z
aWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFy
KiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgU3RyaW5n
QnVpbGRlciBidWlsZGVyOwotICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3Vt
ZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgaW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKLSAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImEgZnVuY3Rpb24iKTsKLSAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOwotfQotCi1KU0M6
OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25z
dCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCi17Ci0g
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxk
ZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBm
dW5jdGlvbk5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYW4gaW5zdGFuY2Ugb2Yg
Iik7Ci0gICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRUeXBlKTsKLSAgICByZXR1cm4gdGhyb3dW
TVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOwotfQotCi12b2lk
IHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiSW52YWxpZCBBcnJheSBlbGVtZW50IHR5cGUiKSk7Ci19Ci0KLXZvaWQgdGhy
b3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCi17Ci0gICAgdGhyb3dUeXBlRXJyb3Io
c3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRy
aWJ1dGVOYW1lLCAiIGF0dHJpYnV0ZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICIsIGV4cGVjdGVk
VHlwZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25z
dCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hh
ciogZXhwZWN0ZWRUeXBlKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIk1lbWJlciAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChkaWN0aW9u
YXJ5TmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJy4nKTsKLSAgICBidWlsZGVyLmFwcGVuZCht
ZW1iZXJOYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBpcyByZXF1aXJlZCBhbmQg
bXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFR5
cGUpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIu
dG9TdHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSkKLXsK
LSAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVy
cm9yKCZzdGF0ZSwgbWFrZVN0cmluZyhpbnRlcmZhY2VOYW1lLCAiIGNvbnN0cnVjdG9yIGFzc29j
aWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKSkpOwotfQotCi12b2lkIHRo
cm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKQotewotICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRl
cmFsKCJWYWx1ZSBpcyBub3QgYSBzZXF1ZW5jZSIpKTsKLX0KLQotdm9pZCB0aHJvd05vbkZpbml0
ZVR5cGVFcnJvcihFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewot
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIHByb3Zp
ZGVkIHZhbHVlIGlzIG5vbi1maW5pdGUiKSk7Ci19Ci0KLVN0cmluZyBtYWtlR2V0dGVyVHlwZUVy
cm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwg
Jy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGdldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNl
cyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dl
dHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUp
Ci17Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgbWFrZUdldHRl
clR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgYXR0cmlidXRlTmFtZSkpOwotfQotCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5
cGVFcnJvcihzdGF0ZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwg
YXR0cmlidXRlTmFtZSkpOwotfQotCi1ib29sIHRocm93U2V0dGVyVHlwZUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICB0aHJvd1R5cGVFcnJv
cihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0
dHJpYnV0ZU5hbWUsICIgc2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9mICIs
IGludGVyZmFjZU5hbWUpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVN0cmluZyBtYWtlVGhp
c1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lKQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJDYW4gb25seSBjYWxsICIs
IGludGVyZmFjZU5hbWUsICcuJywgZnVuY3Rpb25OYW1lLCAiIG9uIGluc3RhbmNlcyBvZiAiLCBp
bnRlcmZhY2VOYW1lKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgdGhyb3dUaGlzVHlwZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQotewotICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRl
cmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWpl
Y3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiBwcm9taXNlLCBjb25z
dCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lKQotewotICAgIHBy
b21pc2UucmVqZWN0KFR5cGVFcnJvciwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFj
ZU5hbWUsIG1ldGhvZE5hbWUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5
cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJv
bWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZh
Y2VOYW1lLCBtZXRob2ROYW1lKSk7Ci19Ci0KLXZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRB
cmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0
LCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQotewotICAgIEpTQzo6Q2FsbERhdGEgY2FsbERh
dGE7Ci0gICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoJmZ1bmN0
aW9uLCBjYWxsRGF0YSk7Ci0gICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsK
LQotICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgSlNDOjpjYWxs
KCZzdGF0ZSwgJmZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1
bWVudHMpOwotfQotCi12b2lkIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojp2aXNpdENo
aWxkcmVuKEpTQzo6SlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewot
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmpl
Y3QqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luaXRpYWxpemVGdW5jdGlvbik7Ci19Ci0K
LXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJvcihF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgdGhyb3dUeXBlRXJyb3IoZXhlYywg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldycgb3BlcmF0b3Ii
KSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci19Ci0KLUNhbGxUeXBl
IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2Fs
bERhdGEpCi17Ci0gICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbFRocm93VHlwZUVy
cm9yOwotICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsKLX0KLQotdm9pZCB0aHJvd0RPTVN5bnRh
eEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsK
LSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3Rh
dGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTWU5UQVhfRVJSKSk7Ci19Ci0K
LXZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAg
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwg
REFUQV9DTE9ORV9FUlIpKTsKLX0KLQotdm9pZCB0aHJvd0luZGV4U2l6ZUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICBBU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVh
dGVET01FeGNlcHRpb24oJnN0YXRlLCBJTkRFWF9TSVpFX0VSUikpOwotfQotCi12b2lkIHRocm93
VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhj
ZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFRZUEVfTUlT
TUFUQ0hfRVJSKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuaAkocmV2aXNpb24gMjEx
MzUzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoyMTEz
NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXJDYWNoZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODI1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5
OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAy
MDAzLTIwMDYsIDIwMDgtMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQu
b3JnPgorICogIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4
ay5vcmc+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0Lmgi
CisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNEeW5hbWljRG93bmNhc3Qu
aCIKKyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKKyNpbmNsdWRlICJTY3JpcHRXcmFwcGFi
bGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCisj
aW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CisjaW5jbHVk
ZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KKyNp
bmNsdWRlIDxoZWFwL1dlYWtJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9BdXhpbGlhcnlC
YXJyaWVySW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNDSlNWYWx1ZUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ2VsbElubGluZXMuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
SlNUeXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CisjaW5jbHVkZSA8
cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJl
SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNs
dWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGltZS9Xcml0ZUJhcnJp
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
Ky8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgZmlsZSBhIGxvdCBlYXNpZXIgdG8gcmVhZCBi
eSBwdXR0aW5nIGFsbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXQgdGhlIHRvcCwKKy8vIGFuZCBm
dW5jdGlvbiBkZWZpbml0aW9ucyBiZWxvdywgZXZlbiBmb3IgdGVtcGxhdGUgYW5kIGlubGluZSBm
dW5jdGlvbnMuCisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgSlNGdW5jdGlvbjsKK30KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRTY3JpcHQ7CitjbGFzcyBEZWZlcnJlZFBy
b21pc2U7CitjbGFzcyBET01XaW5kb3c7CitjbGFzcyBGcmFtZTsKK2NsYXNzIFVSTDsKK2NsYXNz
IE5vZGU7CisKK3N0cnVjdCBFeGNlcHRpb25EZXRhaWxzIHsKKyAgICBTdHJpbmcgbWVzc2FnZTsK
KyAgICBpbnQgbGluZU51bWJlciB7IDAgfTsKKyAgICBpbnQgY29sdW1uTnVtYmVyIHsgMCB9Owor
ICAgIFN0cmluZyBzb3VyY2VVUkw7Cit9OworCisvLyBCYXNlIGNsYXNzIGZvciBhbGwgY29uc3Ry
dWN0b3Igb2JqZWN0cyBpbiB0aGUgSlNDIGJpbmRpbmdzLgorY2xhc3MgRE9NQ29uc3RydWN0b3JP
YmplY3QgOiBwdWJsaWMgSlNET01PYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNET01P
YmplY3QgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpJ
bXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91bGRDYWxsR2V0Q2Fs
bERhdGE7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpW
TSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworCitwcm90ZWN0ZWQ6Cisg
ICAgRE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVj
dCYpOworCisgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKKyAg
ICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBKU0M6OkNhbGxEYXRh
Jik7Cit9OworCitjbGFzcyBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCA6IHB1YmxpYyBE
T01Db25zdHJ1Y3Rvck9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rv
ck9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5P
YmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisKKyAg
ICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOworICAgIHZvaWQgc2V0SW5p
dGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKKworcHJpdmF0ZToK
KyAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6ZUZ1bmN0
aW9uOworfTsKKworRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsK
K0RPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CitET01XaW5kb3cm
IGZpcnN0RE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6
RW5jb2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7
CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0
ZU5hbWUpOworCit2b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK1dFQkNPUkVfRVhQT1JU
IGJvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1l
KTsKKwordm9pZCB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93RE9NU3ludGF4RXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsgLy8gTm90IHRoZSBzYW1lIGFzIGEgSmF2YVNjcmlw
dCBzeW50YXggZXJyb3IuCit2b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworV0VCQ09S
RV9FWFBPUlQgdm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKK3Zv
aWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgdGhyb3dTZXF1ZW5j
ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJv
d1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7CisK
K1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVu
dW1FcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3Vt
ZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25J
bnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVj
dGVkVmFsdWVzKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0
aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1
bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9u
SW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKK1dFQkNPUkVfRVhQT1JU
IEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIq
IGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7CitXRUJDT1JFX0VY
UE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBj
b25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRV
bmF2YWlsYWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSk7CisKK1N0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2Fn
ZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsK
K1N0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5j
b2RlZEpTVmFsdWUgdGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dUaGlzVHlw
ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKKworV0VCQ09SRV9FWFBPUlQg
SlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJp
YnV0ZU5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9t
aXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiwgY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6
OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5h
bWUpOworCitXRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0
dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKK1dFQkNPUkVf
RVhQT1JUIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVj
dCYsIEpTQzo6U3RydWN0dXJlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3RydWN0dXJlKEpT
Qzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNs
YXNzPiBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNT
dGF0ZSopOwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTT2JqZWN0KiBn
ZXRET01Qcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKwordm9pZCBj
YWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNP
YmplY3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYpOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBKU0NsYXNzPiBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9i
amVjdCYpOworCitKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJX
b3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKK3ZvaWQqIHdyYXBwZXJLZXkoSlNDOjpBcnJheUJ1
ZmZlciopOworCitKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVy
V29ybGQmLCB2b2lkKik7CitKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01X
cmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqKTsKK0pTQzo6SlNBcnJheUJ1ZmZlciogZ2V0
SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKik7
CisKK2Jvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwg
SlNET01PYmplY3QqLCBKU0M6OldlYWtIYW5kbGVPd25lciopOworYm9vbCBzZXRJbmxpbmVDYWNo
ZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9NT2JqZWN0
KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKTsKK2Jvb2wgc2V0
SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKiwg
SlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBl
ck93bmVyKTsKKworYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxk
Jiwgdm9pZCosIEpTRE9NT2JqZWN0Kik7Citib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3JhcHBlcik7
Citib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFy
cmF5QnVmZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkJiwgRE9NQ2xhc3MmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUg
SlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBS
ZWY8RE9NQ2xhc3M+JiBvYmplY3QpIHsgcmV0dXJuIGdldENhY2hlZFdyYXBwZXIod29ybGQsIG9i
amVjdC5nZXQoKSk7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFw
cGVyQ2xhc3M+IHZvaWQgY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNzKiwg
V3JhcHBlckNsYXNzKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3Jh
cHBlckNsYXNzPiB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNz
KiwgV3JhcHBlckNsYXNzKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUg
VD4gYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpIC0+IHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0
eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xh
c3MqPjo6dHlwZTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBhdXRv
IGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6
dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNWYWx1ZSB3cmFwKEpT
Qzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBET01DbGFzcyYpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0NsYXNzJiBjYXN0VGhpc1ZhbHVlKEpTQzo6RXhlY1N0YXRl
Jik7CisKK3ZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJik7CisKK2Nv
bnN0IEpTQzo6SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKEpTQzo6Vk0mLCBj
b25zdCBKU0M6Okhhc2hUYWJsZSYgc3RhdGljVGFibGUpOworCitTdHJpbmcgcmV0cmlldmVFcnJv
ck1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlv
biwgSlNDOjpDYXRjaFNjb3BlJik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNjcmlwdCog
PSBudWxscHRyKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0ciwgRXhjZXB0
aW9uRGV0YWlscyogPSBudWxscHRyKTsKK3ZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihKU0M6
OkV4ZWNTdGF0ZSopOworCitKU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpTQzo6RXhl
Y1N0YXRlJiwgRXhjZXB0aW9uJiYpOworSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUsIGNvbnN0IFN0cmluZyYpOworCisvLyBDb252
ZXJ0IGEgRE9NIGltcGxlbWVudGF0aW9uIGV4Y2VwdGlvbiBpbnRvIGEgSmF2YVNjcmlwdCBleGNl
cHRpb24gaW4gdGhlIGV4ZWN1dGlvbiBzdGF0ZS4KK3ZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOworV0VCQ09SRV9F
WFBPUlQgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKKworSlNDOjpKU1ZhbHVlIGpzU3RyaW5nKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgVVJMJik7IC8vIGVtcHR5IGlmIHRoZSBVUkwgaXMgbnVsbAor
CitKU0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IFN0cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCitKU0M6OkpTVmFs
dWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFVSTCYpOyAvLyB1
bmRlZmluZWQgaWYgdGhlIFVSTCBpcyBudWxsCisKKy8vIFNlZSBKYXZhU2NyaXB0Q29yZSBmb3Ig
ZXhwbGFuYXRpb246IFNob3VsZCBiZSB1c2VkIGZvciBhbnkgc3RyaW5nIHRoYXQgaXMgYWxyZWFk
eSBvd25lZCBieSBhbm90aGVyCisvLyBvYmplY3QsIHRvIGxldCB0aGUgZW5naW5lIGtub3cgdGhh
dCBjb2xsZWN0aW5nIHRoZSBKU1N0cmluZyB3cmFwcGVyIGlzIHVubGlrZWx5IHRvIHNhdmUgbWVt
b3J5LgorSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBTdHJpbmcmKTsKKworU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVy
dHlOYW1lKTsKKworQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6
UHJvcGVydHlOYW1lKTsKKworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVT
dHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK1dFQkNPUkVf
RVhQT1JUIFN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEpTQzo6
RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CitXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgdmFsdWVUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK2lu
dDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUsIEpTQzo6RXhlY1N0YXRlKiwgYm9v
bCYgb2theSk7CisKKy8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbnZlcnQgdmFsdWVzIHRv
IGludGVnZXJzIGFzIHBlciB0aGUgV2ViSURMIHNwZWNpZmljYXRpb24uCisvLyBUaGUgY29udmVy
c2lvbiBmYWlscyBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIG51bWJlciBv
ciwgaWYgRW5mb3JjZVJhbmdlIGlzIHNwZWNpZmllZCwKKy8vIHRoZSB2YWx1ZSBpcyBvdXRzaWRl
IHRoZSByYW5nZSBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlciB0eXBlLgorCitXRUJDT1JFX0VY
UE9SVCBpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZF
bmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBP
UlQgdWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQzMl90IHRvVUlu
dDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVf
RVhQT1JUIGludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK1dFQkNPUkVfRVhQT1JUIGludDhfdCB0
b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9S
VCB1aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitX
RUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkNsYW1wKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDMyX3QgdG9JbnQzMkNs
YW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQz
Ml90IHRvVUludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09S
RV9FWFBPUlQgaW50NjRfdCB0b0ludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOworV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRDbGFtcChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK1dFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDgoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDE2X3Qg
dG9JbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1
aW50MTZfdCB0b1VJbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JF
X0VYUE9SVCBpbnQ2NF90IHRvSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
V0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOworCitKU0M6OkpTVmFsdWUganNEYXRlKEpTQzo6RXhlY1N0YXRlKiwgZG91YmxlIHZh
bHVlKTsKKworLy8gTmFOIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gYSBkYXRl
LgorZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKKwor
Ly8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBl
ciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCitKU0M6OkpTT2JqZWN0KiB0b0pT
U2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgp
OworCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgSlNDOjpBcnJheUJ1ZmZlciYpOworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcmKTsKK0pTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5
QnVmZmVyKik7CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyopOwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJl
ZjxUPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWZQdHI8VD4mJik7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgVmVjdG9yPFQ+Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgVmVjdG9y
PFJlZlB0cjxUPj4mKTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJik7CisKK0pTQzo6SlNWYWx1ZSB0
b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNW
YWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUJik7CitKU0M6OkpTVmFs
dWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJik7CisKK1JlZlB0cjxKU0M6OkFycmF5
QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlND
OjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDhB
cnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRv
UG9zc2libHlTaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRy
PEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYsIEpT
Qzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWlu
dDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBl
ZEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQx
NkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+
IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1Jl
ZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJBcnJheShKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9Qb3NzaWJs
eVNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKworUmVmUHRyPEpT
Qzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mLCBK
U0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVkSW50OEFycmF5
KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9VbnNo
YXJlZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQz
MkFycmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1Jl
ZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6
OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5zaGFyZWRVaW50
OENsYW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQx
NkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitS
ZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mLCBK
U0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVkRmxvYXQz
MkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5
PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1R5cGU+IFZlY3RvcjxSZWY8VD4+IHRvUmVmTmF0
aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQg
Ym9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisK
K2VudW0gU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3Is
IExvZ1NlY3VyaXR5RXJyb3IsIFRocm93U2VjdXJpdHlFcnJvciB9OworbmFtZXNwYWNlIEJpbmRp
bmdTZWN1cml0eSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hlY2tTZWN1cml0eUZv
ck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCog
Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUKik7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhl
Y1N0YXRlJiwgRXhjZXB0aW9uT3I8VCo+JiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEV4
Y2VwdGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2Vw
dGlvbk9yPFQmPiYmKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlND
OjpFeGVjU3RhdGUqLCBET01XaW5kb3cmLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9IExvZ1Nl
Y3VyaXR5RXJyb3IpOworICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6
OkV4ZWNTdGF0ZSYsIERPTVdpbmRvdyYsIFN0cmluZyYgbWVzc2FnZSk7CisgICAgYm9vbCBzaG91
bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSosIFNlY3VyaXR5UmVw
b3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7CisgICAgYm9vbCBzaG91bGRBbGxvd0Fj
Y2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUmLCBGcmFtZSYsIFN0cmluZyYgbWVzc2FnZSk7Cisg
ICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIE5vZGUqKTsK
K307CisKK3ZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSk7CisKK1N0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5
TmFtZSk7CitBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9w
ZXJ0eU5hbWUpOworCit0ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3RoPiBK
U0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworCitl
bnVtIGNsYXNzIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHsgVGhyb3csIFJldHVybkVhcmx5LCBS
ZWplY3RQcm9taXNlLCBBc3NlcnQgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4KK3N0
cnVjdCBCaW5kaW5nQ2FsbGVyIHsKKyAgICB1c2luZyBBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiA9
IGJvb2woSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlRocm93
U2NvcGUmKTsKKyAgICB1c2luZyBBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiA9IEpTQzo6SlNWYWx1
ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICB1c2lu
ZyBPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVj
U3RhdGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNpbmcgUHJvbWlzZU9w
ZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQ2xhc3MqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93U2NvcGUmKTsK
KworICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisgICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RGb3JPcGVyYXRp
b24oSlNDOjpFeGVjU3RhdGUmKTsKKworICAgIHRlbXBsYXRlPFByb21pc2VPcGVyYXRpb25DYWxs
ZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3Vs
ZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2U+CisgICAgc3Rh
dGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbFByb21pc2VPcGVyYXRpb24oSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNvbnN0IGNoYXIqIG9w
ZXJhdGlvbk5hbWUpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhdGUpOworICAgICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAg
YXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsKKyAgICAgICAgaWYg
KHNob3VsZFRocm93ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5MSUtF
TFkoIXRoaXNPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoVGhp
c1R5cGVFcnJvcihwcm9taXNlLmdldCgpLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3Bl
cmF0aW9uTmFtZSk7CisgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKKyAgICAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZvKCkpOworICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2Rl
IHRvIHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KKyAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhpc09iamVjdCwgV1RGTW92ZShwcm9taXNlKSwg
dGhyb3dTY29wZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8T3BlcmF0aW9uQ2FsbGVyRnVuY3Rp
b24gb3BlcmF0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBjYWxsT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgY2hhciog
b3BlcmF0aW9uTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7CisgICAgICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3RhdGUpOworICAgICAgICBp
ZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCAmJiBVTkxJ
S0VMWSghdGhpc09iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93
VGhpc1R5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NO
YW1lLCBvcGVyYXRpb25OYW1lKTsKKyAgICAgICAgICAgIC8vIEZvciBjdXN0b20gcHJvbWlzZS1y
ZXR1cm5pbmcgb3BlcmF0aW9ucworICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRo
VGhpc1R5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRp
b25OYW1lKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7CisgICAgICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygpKTsK
KyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5lcmF0
ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNPYmplY3QuCisgICAg
ICAgIHJldHVybiBvcGVyYXRpb25DYWxsZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUp
OworICAgIH0KKworICAgIHRlbXBsYXRlPEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9uIHNldHRlciwg
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6VGhyb3c+CisgICAgc3RhdGljIGJvb2wgc2V0QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHN0YXRlKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9y
QXR0cmlidXRlKCpzdGF0ZSwgdGhpc1ZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF0aGlz
T2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3I6OlRocm93KSA/IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dT
Y29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpIDogZmFsc2U7
CisgICAgICAgIHJldHVybiBzZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgSlNDOjpKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdGhyb3dTY29wZSk7CisgICAgfQorCisgICAgdGVtcGxh
dGU8QXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
ciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0
aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBhdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7CisgICAgICAgIGlmIChV
TkxJS0VMWSghdGhpc09iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5j
bGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlKQorICAgICAgICAgICAgICAg
IHJldHVybiByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6
OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBK
U0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzVW5kZWZpbmVkKCkpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVj
dCwgdGhyb3dTY29wZSkpOworICAgIH0KK307CisKKy8vIEV4Y2VwdGlvbk9yIGhhbmRsaW5nLgor
dm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBFeGNlcHRpb25Pcjx2b2lkPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2Nv
cGUmLCBFeGNlcHRpb25PcjxUPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBK
U0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKTsKKworLy8gSW5saW5lIGZ1
bmN0aW9ucyBhbmQgdGVtcGxhdGUgZGVmaW5pdGlvbnMuCisKK2lubGluZSBKU0M6OlN0cnVjdHVy
ZSogRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQor
eworICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKK30KKworaW5saW5lIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpET01Db25zdHJ1Y3Rv
ck9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQorICAgIDogSlNET01PYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7
Cit9CisKK2lubGluZSBTdHJpbmcgRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNsYXNzTmFtZShjb25z
dCBKU09iamVjdCopCit7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRnVuY3Rpb24iKTsKK30K
KworaW5saW5lIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0OjpET01Db25zdHJ1Y3RvckpT
QnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQorICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBn
bG9iYWxPYmplY3QpCit7Cit9CisKK2lubGluZSBKU0M6OkpTRnVuY3Rpb24qIERPTUNvbnN0cnVj
dG9ySlNCdWlsdGluT2JqZWN0Ojppbml0aWFsaXplRnVuY3Rpb24oKQoreworICAgIHJldHVybiBt
X2luaXRpYWxpemVGdW5jdGlvbi5nZXQoKTsKK30KKworaW5saW5lIHZvaWQgRE9NQ29uc3RydWN0
b3JKU0J1aWx0aW5PYmplY3Q6OnNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiB2bSwgSlND
OjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBtX2luaXRpYWxpemVGdW5jdGlvbi5zZXQo
dm0sIHRoaXMsICZmdW5jdGlvbik7Cit9CisKK2lubGluZSBKU0RPTUdsb2JhbE9iamVjdCogZGVw
cmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICAvLyBGSVhNRTogQ2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2luZyB0
aGUgZ2xvYmFsIG9iamVjdAorICAgIC8vIGZyb20gd2hpY2ggdGhlIG9iamVjdCBpcyBiZWluZyBj
cmVhdGVkLCBpbnN0ZWFkIG9mIGFzc3VtaW5nIHRoZSBsZXhpY2FsIG9uZS4KKyAgICAvLyBlLmcu
IHN1YmZyYW1lLmRvY3VtZW50LmJvZHkgc2hvdWxkIHVzZSB0aGUgc3ViZnJhbWUncyBnbG9iYWwg
b2JqZWN0LCBub3QgdGhlIGxleGljYWwgb25lLgorICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3RydWN0dXJlKiBnZXRET01T
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7
CisgICAgaWYgKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYWNoZWRET01TdHJ1Y3R1
cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmluZm8oKSkpCisgICAgICAgIHJldHVybiBz
dHJ1Y3R1cmU7CisgICAgcmV0dXJuIGNhY2hlRE9NU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgV3Jh
cHBlckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFz
czo6Y3JlYXRlUHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSksIFdyYXBwZXJDbGFzczo6aW5m
bygpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpT
dHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgd3JvbmcuIEl0IHVzZXMgdGhlIHdy
b25nIGdsb2JhbCBvYmplY3QgZm9yIGNyZWF0aW5nIHRoZSBwcm90b3R5cGUgc3RydWN0dXJlLgor
ICAgIHJldHVybiBnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihleGVjLT52bSgpLCAqZGVw
cmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldERPTVByb3RvdHlw
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAg
IHJldHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oYXNPYmplY3QoZ2V0RE9NU3RydWN0
dXJlPFdyYXBwZXJDbGFzcz4odm0sICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGds
b2JhbE9iamVjdCkpLT5zdG9yZWRQcm90b3R5cGUoKSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0aW4oSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlvbiwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBKU0M6OkpTT2JqZWN0KiBv
YmplY3QgPSBKU0NsYXNzOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpTQ2xhc3M+KGdsb2JhbE9i
amVjdC52bSgpLCBnbG9iYWxPYmplY3QpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICBjYWxsRnVuY3Rp
b25XaXRoQ3VycmVudEFyZ3VtZW50cyhzdGF0ZSwgKm9iamVjdCwgaW5pdGlhbGl6ZUZ1bmN0aW9u
KTsKKyAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsKK30KKworaW5saW5l
IEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiB3b3Js
ZCwgSlNDOjpBcnJheUJ1ZmZlciopCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlcio+KHdvcmxkLnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci5n
ZXQoKSktPndyYXBwZXJPd25lcigpOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBlcktleShKU0M6
OkFycmF5QnVmZmVyKiBkb21PYmplY3QpCit7CisgICAgcmV0dXJuIGRvbU9iamVjdDsKK30KKwor
aW5saW5lIEpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYsIHZvaWQqKSB7IHJldHVybiBudWxscHRyOyB9CitpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNo
ZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCosIEpTQzo6V2Vh
a0hhbmRsZU93bmVyKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIGNsZWFySW5saW5l
Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqKSB7IHJl
dHVybiBmYWxzZTsgfQorCitpbmxpbmUgSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QpCit7
CisgICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICByZXR1cm4gZG9tT2JqZWN0LT53cmFwcGVyKCk7Cit9CisKK2lubGluZSBKU0M6OkpTQXJyYXlC
dWZmZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlND
OjpBcnJheUJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGJ1ZmZlci0+bV93cmFwcGVyLmdldCgp
OworfQorCitpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTU9iamVjdCogd3JhcHBl
ciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcikKK3sKKyAgICBpZiAoIXdvcmxk
LmlzTm9ybWFsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb21PYmplY3QtPnNldFdy
YXBwZXIod3JhcHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQpOworICAgIHJldHVybiB0cnVlOwor
fQorCitpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYg
d29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3
cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKQoreworICAgIGlmICgh
d29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvbU9iamVjdC0+
bV93cmFwcGVyID0gSlNDOjpXZWFrPEpTQzo6SlNBcnJheUJ1ZmZlcj4od3JhcHBlciwgd3JhcHBl
ck93bmVyLCAmd29ybGQpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBjbGVh
cklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBh
YmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyKQoreworICAgIGlmICghd29ybGQu
aXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvbU9iamVjdC0+Y2xlYXJX
cmFwcGVyKHdyYXBwZXIpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBjbGVh
cklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1
ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIpCit7CisgICAgaWYg
KCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgd2Vha0NsZWFy
KGRvbU9iamVjdC0+bV93cmFwcGVyLCB3cmFwcGVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNo
ZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzJiBkb21PYmplY3QpCit7
CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCAm
ZG9tT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIHdvcmxkLm1f
d3JhcHBlcnMuZ2V0KHdyYXBwZXJLZXkoJmRvbU9iamVjdCkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCBjYWNoZVdy
YXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgV3JhcHBl
ckNsYXNzKiB3cmFwcGVyKQoreworICAgIEpTQzo6V2Vha0hhbmRsZU93bmVyKiBvd25lciA9IHdy
YXBwZXJPd25lcih3b3JsZCwgZG9tT2JqZWN0KTsKKyAgICBpZiAoc2V0SW5saW5lQ2FjaGVkV3Jh
cHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyLCBvd25lcikpCisgICAgICAgIHJldHVybjsK
KyAgICB3ZWFrQWRkKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwgSlND
OjpXZWFrPEpTQzo6SlNPYmplY3Q+KHdyYXBwZXIsIG93bmVyLCAmd29ybGQpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZv
aWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9i
amVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQoreworICAgIGlmIChjbGVhcklubGluZUNhY2hl
ZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCisgICAgICAgIHJldHVybjsKKyAg
ICB3ZWFrUmVtb3ZlKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwgd3Jh
cHBlcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBpbmxp
bmUgYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJl
ZjxUPiYmIGRvbU9iamVjdCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1l
PERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCit7CisgICAgdXNpbmcgV3JhcHBlckNs
YXNzID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3Jh
cHBlckNsYXNzOworCisgICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+
d29ybGQoKSwgZG9tT2JqZWN0KSk7CisgICAgYXV0byogZG9tT2JqZWN0UHRyID0gZG9tT2JqZWN0
LnB0cigpOworICAgIGF1dG8qIHdyYXBwZXIgPSBXcmFwcGVyQ2xhc3M6OmNyZWF0ZShnZXRET01T
dHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihnbG9iYWxPYmplY3QtPnZtKCksICpnbG9iYWxPYmplY3Qp
LCBnbG9iYWxPYmplY3QsIFdURk1vdmUoZG9tT2JqZWN0KSk7CisgICAgY2FjaGVXcmFwcGVyKGds
b2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0UHRyLCB3cmFwcGVyKTsKKyAgICByZXR1cm4g
d3JhcHBlcjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlu
bGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19z
YW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCit7CisgICAgcmV0dXJuIGNyZWF0
ZVdyYXBwZXI8RE9NQ2xhc3M+KGdsb2JhbE9iamVjdCwgc3RhdGljX3JlZmVyZW5jZV9jYXN0PERP
TUNsYXNzPihXVEZNb3ZlKGRvbU9iamVjdCkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9N
Q2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERPTUNsYXNzJiBkb21PYmplY3QpCit7Cisg
ICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29y
bGQoKSwgZG9tT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIHRv
SlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgUmVmPERPTUNsYXNzPihkb21PYmpl
Y3QpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQ2xhc3MmIGNh
c3RUaGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQoreworICAgIGF1dG8gdGhpc1ZhbHVl
ID0gc3RhdGUudGhpc1ZhbHVlKCk7CisgICAgYXV0byBjYXN0ZWRUaGlzID0ganNEeW5hbWljRG93
bmNhc3Q8SlNDbGFzcyo+KHN0YXRlLnZtKCksIHRoaXNWYWx1ZSk7CisgICAgQVNTRVJUKGNhc3Rl
ZFRoaXMpOworICAgIHJldHVybiAqY2FzdGVkVGhpczsKK30KKworaW5saW5lIGludDMyX3QgZmlu
aXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBi
b29sJiBva2F5KQoreworICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcihleGVjKTsK
KyAgICBva2F5ID0gc3RkOjppc2Zpbml0ZShudW1iZXIpOworICAgIHJldHVybiBKU0M6OnRvSW50
MzIobnVtYmVyKTsKK30KKworLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMg
YSBzZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCitp
bmxpbmUgSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpCit7CisgICAgSlNDOjpWTSYgdm0g
PSBleGVjLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0KCk7CisgICAgaWYg
KCFvYmplY3QpIHsKKyAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29wZSk7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEpTQzo6SlNWYWx1ZSBsZW5n
dGhWYWx1ZSA9IG9iamVjdC0+Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAgaWYgKGxl
bmd0aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgdGhyb3dTZXF1ZW5jZVR5
cGVFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIGxlbmd0aCA9IGxlbmd0aFZhbHVlLnRvVUludDMyKCZleGVjKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK2lu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICBp
ZiAoYXV0byByZXN1bHQgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwg
YnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIC8vIFRoZSBKU0FycmF5QnVm
ZmVyOjpjcmVhdGUgZnVuY3Rpb24gd2lsbCByZWdpc3RlciB0aGUgd3JhcHBlciBpbiBmaW5pc2hD
cmVhdGlvbi4KKyAgICByZXR1cm4gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUtPnZt
KCksIGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYnVmZmVyLnNoYXJpbmdNb2Rl
KCkpLCAmYnVmZmVyKTsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5
QnVmZmVyVmlldyYgdmlldykKK3sKKyAgICByZXR1cm4gdmlldy53cmFwKHN0YXRlLCBnbG9iYWxP
YmplY3QpOworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyKiBi
dWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgp
OworICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICpidWZmZXIpOworfQorCitp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3KiB2aWV3KQorewor
ICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgcmV0dXJu
IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKnZpZXcpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIHB0cikKK3sKKyAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+JiYgcHRyKQoreworICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VD4mIHZlY3Rv
cikKK3sKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkpTQXJyYXkqIGFycmF5
ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXJyYXktPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0p
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwor
ICAgIH0KKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mIHZlY3RvcikKK3sKKyAg
ICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3Ry
dWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdElu
ZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0uZ2V0KCkpKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAg
IH0KKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVO
YW1lJiBwcml2YXRlTmFtZSkKK3sKKyAgICByZXR1cm4gSlNDOjpTeW1ib2w6OmNyZWF0ZShleGVj
LT52bSgpLCBwcml2YXRlTmFtZS51aWQoKSk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9K
U0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0
KCZzdGF0ZSwgdmFsdWUsIGZhbHNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
Y3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9i
amVjdCwgdmFsdWUpLCBmYWxzZSk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJh
dG9yRW5kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlSXRlcmF0
b3JSZXN1bHRPYmplY3QoJnN0YXRlLCBKU0M6OmpzVW5kZWZpbmVkKCksIHRydWUpOworfQorCitp
bmxpbmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlC
dWZmZXJWaWV3KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byog
d3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0PEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqPih2bSwg
dmFsdWUpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIHdyYXBwZXItPnBvc3NpYmx5U2hhcmVkSW1wbCgpOworfQorCitpbmxpbmUgUmVmUHRy
PEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byByZXN1bHQgPSB0b1Bvc3NpYmx5
U2hhcmVkQXJyYXlCdWZmZXJWaWV3KHZtLCB2YWx1ZSk7CisgICAgaWYgKCFyZXN1bHQgfHwgcmVz
dWx0LT5pc1NoYXJlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitpbmxpbmUgUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVk
SW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6
dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDhBZGFwdG9yPih2bSwgdmFs
dWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZElu
dDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0
b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFwdG9yPih2bSwgdmFs
dWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZElu
dDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0
b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFwdG9yPih2bSwgdmFs
dWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVp
bnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0
b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwgdmFs
dWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlT
aGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7
IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENs
YW1wZWRBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2QXJy
YXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlND
OjpVaW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDMy
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpVaW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6Rmxv
YXQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVk
VmlldzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpT
Qzo6RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mIHZt
LCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2
ZVR5cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9CisKK2lubGluZSBS
ZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3
PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQx
NkFycmF5PiB0b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQxNkFk
YXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Vu
c2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Vuc2hhcmVkVWludDhB
cnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5z
aGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lu
bGluZSBSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xhbXBl
ZEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9V
bnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1
ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNoYXJlZFVpbnQxNkFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNo
YXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lu
bGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2
ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQ
dHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0s
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRW
aWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlND
OjpGbG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpT
Qzo6RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgSlNUPiBpbmxpbmUgVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIHRocm93U2VxdWVuY2VU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICBWZWN0b3I8UmVmPFQ+PiByZXN1bHQ7CisgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCB2
YWx1ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6
SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgICAgICBpZiAoanNWYWx1ZS5pbmhlcml0cyh2bSwgSlNUOjppbmZvKCkp
KSB7CisgICAgICAgICAgICBhdXRvKiBvYmplY3QgPSBKU1Q6OnRvV3JhcHBlZCh2bSwganNWYWx1
ZSk7CisgICAgICAgICAgICBBU1NFUlQob2JqZWN0KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoKm9iamVjdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhyb3dBcnJheUVsZW1l
bnRUeXBlRXJyb3IoKnN0YXRlLCBzY29wZSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworaW5saW5lIFN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSk7
CisgICAgcmV0dXJuIHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFtZS51aWQoKSA6IHBy
b3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7Cit9CisKK2lubGluZSBBdG9taWNTdHJpbmcgcHJvcGVy
dHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQorewor
ICAgIHJldHVybiBBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1l
LnVpZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Cit9CisKK3RlbXBsYXRlPEpTQzo6
TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpT
VmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7
CisgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRl
KGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9wZXJ0
eU5hbWUucHVibGljTmFtZSgpLCBuYXRpdmVGdW5jdGlvbikpOworfQorCitBTFdBWVNfSU5MSU5F
IHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCit7CisgICAgaWYgKHRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBwcm9wYWdhdGVFeGNl
cHRpb25TbG93UGF0aChzdGF0ZSwgdGhyb3dTY29wZSwgV1RGTW92ZShleGNlcHRpb24pKTsKK30K
KworaW5saW5lIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25Pcjx2b2lkPiYmIHZhbHVlKQor
eworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpCisgICAgICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQoreworICAg
IGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRl
RXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9i
YWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJ
S0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9u
KHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZn
bG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5v
ZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBUJiBub2RlKQoreworICAgIHJldHVybiBzaG91bGRB
bGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgJm5vZGUpID8gJm5vZGUgOiBudWxscHRyOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3Vy
aXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQqIG5vZGUpCit7CisgICAgcmV0dXJu
IHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBub2RlKSA/IG5vZGUgOiBudWxscHRyOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdT
ZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNl
cHRpb25PcjxUKj4mJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIGNoZWNr
U2VjdXJpdHlGb3JOb2RlKHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3Vy
aXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlv
bk9yPFQmPiYmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gY2hlY2tTZWN1
cml0eUZvck5vZGUoc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHls
ZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXJDYWNoZS5o
CShyZXZpc2lvbiAyMTEzNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdy
YXBwZXJDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMjkgKzI0LDIwIEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiSlNEeW5hbWlj
RG93bmNhc3QuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRlICJTY3Jp
cHRXcmFwcGFibGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9s
bGVyLmgiCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+
Ci0jaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRlIDxoZWFwL1dl
YWsuaD4KICNpbmNsdWRlIDxoZWFwL1dlYWtJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9B
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNp
bmNsdWRlIDxydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ2VsbElu
bGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMu
aD4KICNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9X
cml0ZUJhcnJpZXIuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9H
ZXRQdHIuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLS8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgZmlsZSBhIGxvdCBlYXNpZXIg
dG8gcmVhZCBieSBwdXR0aW5nIGFsbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXQgdGhlIHRvcCwK
LS8vIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucyBiZWxvdywgZXZlbiBmb3IgdGVtcGxhdGUgYW5k
IGlubGluZSBmdW5jdGlvbnMuCi0KLW5hbWVzcGFjZSBKU0MgewotY2xhc3MgSlNGdW5jdGlvbjsK
LX0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDYWNoZWRTY3JpcHQ7Ci1jbGFzcyBE
ZWZlcnJlZFByb21pc2U7Ci1jbGFzcyBET01XaW5kb3c7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIFVS
TDsKLWNsYXNzIE5vZGU7Ci0KLXN0cnVjdCBFeGNlcHRpb25EZXRhaWxzIHsKLSAgICBTdHJpbmcg
bWVzc2FnZTsKLSAgICBpbnQgbGluZU51bWJlciB7IDAgfTsKLSAgICBpbnQgY29sdW1uTnVtYmVy
IHsgMCB9OwotICAgIFN0cmluZyBzb3VyY2VVUkw7Ci19OwotCi0vLyBCYXNlIGNsYXNzIGZvciBh
bGwgY29uc3RydWN0b3Igb2JqZWN0cyBpbiB0aGUgSlNDIGJpbmRpbmdzLgotY2xhc3MgRE9NQ29u
c3RydWN0b3JPYmplY3QgOiBwdWJsaWMgSlNET01PYmplY3QgewotcHVibGljOgotICAgIHR5cGVk
ZWYgSlNET01PYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNl
IHwgSlNDOjpJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91bGRD
YWxsR2V0Q2FsbERhdGE7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwotCi1wcm90
ZWN0ZWQ6Ci0gICAgRE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUds
b2JhbE9iamVjdCYpOwotCi0gICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmpl
Y3QqKTsKLSAgICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBKU0M6
OkNhbGxEYXRhJik7Ci19OwotCi1jbGFzcyBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCA6
IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01D
b25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgRE9NQ29uc3RydWN0b3JK
U0J1aWx0aW5PYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9y
Jik7Ci0KLSAgICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOwotICAgIHZv
aWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKLQot
cHJpdmF0ZToKLSAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlh
bGl6ZUZ1bmN0aW9uOwotfTsKLQotRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coSlNDOjpFeGVj
U3RhdGUqKTsKLURPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci1E
T01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci0KLVdFQkNPUkVfRVhQ
T1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmli
dXRlTmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpOwotCi12b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29u
c3QgY2hhciogYXR0cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKLVdFQkNP
UkVfRVhQT1JUIGJvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRy
aWJ1dGVOYW1lKTsKLQotdm9pZCB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93RE9NU3ludGF4RXJyb3Io
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsgLy8gTm90IHRoZSBzYW1lIGFzIGEg
SmF2YVNjcmlwdCBzeW50YXggZXJyb3IuCi12b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLXZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2Up
OwotV0VCQ09SRV9FWFBPUlQgdm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93Tm90U3VwcG9ydGVk
RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNz
YWdlKTsKLXZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgdGhy
b3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwot
dm9pZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJik7Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVu
dE11c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2ln
bmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciog
ZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNo
YXIqIGV4cGVjdGVkVmFsdWVzKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11
c3RCZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNp
Z25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIq
IGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKLVdFQkNP
UkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNv
bnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1l
LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1X
RUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZW1i
ZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRU
eXBlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
JiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSk7Ci0KLVN0cmluZyBtYWtlR2V0dGVyVHlwZUVy
cm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKTsKLVN0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci0KLVdFQkNPUkVfRVhQT1JU
IEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBhdHRyaWJ1dGVOYW1lKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhy
b3dUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKLQotV0VCQ09S
RV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSBy
ZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7Ci1XRUJDT1JFX0VY
UE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9w
ZXJhdGlvbk5hbWUpOwotCiBXRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogZ2V0Q2FjaGVk
RE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsK
IFdFQkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUds
b2JhbE9iamVjdCYsIEpTQzo6U3RydWN0dXJlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKIApA
QCAtMTU0LDEwICs0NSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpT
dHIKIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpTdHJ1Y3R1cmUqIGRlcHJl
Y2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqKTsKIHRlbXBsYXRlPHR5cGVuYW1l
IFdyYXBwZXJDbGFzcz4gSlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90eXBlKEpTQzo6Vk0mLCBK
U0M6OkpTR2xvYmFsT2JqZWN0Kik7CiAKLXZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1
bWVudHMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpT
RnVuY3Rpb24mKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gSlNDOjpFbmNvZGVkSlNW
YWx1ZSBjcmVhdGVKU0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTRnVuY3Rpb24mIGlu
aXRpYWxpemVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQogSlNDOjpXZWFrSGFuZGxl
T3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKik7
CiB2b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIqKTsKIApAQCAtMTgyLDI1MCArNjks
OSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gCiAKIHRlbXBsYXRl
PHR5cGVuYW1lIERPTUNsYXNzPiBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgRE9NQ2xhc3MmKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFz
cz4gSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYpOwotCi12b2lkIGFkZElt
cHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYpOwotCi1jb25zdCBKU0M6Okhhc2hUYWJs
ZSYgZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShKU0M6OlZNJiwgY29uc3QgSlNDOjpIYXNoVGFi
bGUmIHN0YXRpY1RhYmxlKTsKLQotU3RyaW5nIHJldHJpZXZlRXJyb3JNZXNzYWdlKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIEpTQzo6Q2F0Y2hTY29w
ZSYpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7Ci1XRUJD
T1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhj
ZXB0aW9uKiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIsIEV4Y2VwdGlvbkRldGFpbHMqID0gbnVs
bHB0cik7Ci12b2lkIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKLQot
SlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2VwdGlv
biYmKTsKLUpTQzo6SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBF
eGNlcHRpb25Db2RlLCBjb25zdCBTdHJpbmcmKTsKLQotLy8gQ29udmVydCBhIERPTSBpbXBsZW1l
bnRhdGlvbiBleGNlcHRpb24gaW50byBhIEphdmFTY3JpcHQgZXhjZXB0aW9uIGluIHRoZSBleGVj
dXRpb24gc3RhdGUuCi12b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgcHJvcGFn
YXRlRXhjZXB0aW9uU2xvd1BhdGgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBF
eGNlcHRpb24mJik7Ci0KLUpTQzo6SlNWYWx1ZSBqc1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IFVSTCYpOyAvLyBlbXB0eSBpZiB0aGUgVVJMIGlzIG51bGwKLQotSlNDOjpKU1ZhbHVlIGpz
U3RyaW5nT3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsgLy8gdW5k
ZWZpbmVkIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAotSlNDOjpKU1ZhbHVlIGpzU3RyaW5nT3JVbmRl
ZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBVUkwmKTsgLy8gdW5kZWZpbmVkIGlmIHRoZSBV
UkwgaXMgbnVsbAotCi0vLyBTZWUgSmF2YVNjcmlwdENvcmUgZm9yIGV4cGxhbmF0aW9uOiBTaG91
bGQgYmUgdXNlZCBmb3IgYW55IHN0cmluZyB0aGF0IGlzIGFscmVhZHkgb3duZWQgYnkgYW5vdGhl
cgotLy8gb2JqZWN0LCB0byBsZXQgdGhlIGVuZ2luZSBrbm93IHRoYXQgY29sbGVjdGluZyB0aGUg
SlNTdHJpbmcgd3JhcHBlciBpcyB1bmxpa2VseSB0byBzYXZlIG1lbW9yeS4KLUpTQzo6SlNWYWx1
ZSBqc093bmVkU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7Ci0K
LVN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7Ci0KLUF0b21p
Y1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7Ci0K
LVdFQkNPUkVfRVhQT1JUIFN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEpTQzo6RXhlY1N0
YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgdmFs
dWVUb0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9F
WFBPUlQgU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYpOwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9VU1ZTdHJp
bmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi1pbnQzMl90IGZpbml0ZUludDMy
VmFsdWUoSlNDOjpKU1ZhbHVlLCBKU0M6OkV4ZWNTdGF0ZSosIGJvb2wmIG9rYXkpOwotCi0vLyBU
aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBjb252ZXJ0IHZhbHVlcyB0byBpbnRlZ2VycyBhcyBwZXIg
dGhlIFdlYklETCBzcGVjaWZpY2F0aW9uLgotLy8gVGhlIGNvbnZlcnNpb24gZmFpbHMgaWYgdGhl
IHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgb3IsIGlmIEVuZm9yY2VSYW5n
ZSBpcyBzcGVjaWZpZWQsCi0vLyB0aGUgdmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhl
IGRlc3RpbmF0aW9uIGludGVnZXIgdHlwZS4KLQotV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50
OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VY
UE9SVCB1aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdlKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUlu
dDE2RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVf
RVhQT1JUIGludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRv
SW50NjRFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09S
RV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotCi1XRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4Q2xhbXAoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4
Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50
MTZfdCB0b0ludDE2Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09S
RV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJDbGFtcChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQzMkNsYW1w
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDY0X3Qg
dG9JbnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQ
T1JUIHVpbnQ2NF90IHRvVUludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OwotCi1XRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTYoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTYo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0
b0ludDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVp
bnQ2NF90IHRvVUludDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotSlNDOjpK
U1ZhbHVlIGpzRGF0ZShKU0M6OkV4ZWNTdGF0ZSosIGRvdWJsZSB2YWx1ZSk7Ci0KLS8vIE5hTiBp
ZiB0aGUgdmFsdWUgY2FuJ3QgYmUgY29udmVydGVkIHRvIGEgZGF0ZS4KLWRvdWJsZSB2YWx1ZVRv
RGF0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7Ci0KLS8vIFZhbGlkYXRlcyB0aGF0
IHRoZSBwYXNzZWQgb2JqZWN0IGlzIGEgc2VxdWVuY2UgdHlwZSBwZXIgc2VjdGlvbiA0LjEuMTMg
b2YgdGhlIFdlYklETCBzcGVjLgotSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCB1bnNpZ25lZCYgbGVuZ3RoKTsKLQotSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZm
ZXImKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Jik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciopOwotSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpB
cnJheUJ1ZmZlclZpZXcqKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJik7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xv
YmFsT2JqZWN0KiwgUmVmUHRyPFQ+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFZlY3Rv
cjxUPiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFZlY3RvcjxSZWZQdHI8VD4+Jik7Ci1K
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29u
c3QgSlNDOjpQcml2YXRlTmFtZSYpOwotCi1KU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgVCYpOwotSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvckVu
ZChKU0M6OkV4ZWNTdGF0ZSYpOwotCi1SZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvUG9z
c2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQ
dHI8SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYsIEpT
Qzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50
MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDMyQXJyYXk+
IHRvUG9zc2libHlTaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVm
UHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9Qb3NzaWJs
eVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRy
PEpTQzo6VWludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiwg
SlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVk
VWludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpGbG9hdDMy
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7Ci1SZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDY0QXJy
YXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmll
dz4gdG9VbnNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJl
ZlB0cjxKU0M6OkludDhBcnJheT4gdG9VbnNoYXJlZEludDhBcnJheShKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFycmF5KEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9VbnNoYXJl
ZEludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OEFy
cmF5PiB0b1Vuc2hhcmVkVWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0
cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNoYXJl
ZFVpbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDMy
QXJyYXk+IHRvVW5zaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJl
ZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiwg
SlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZsb2F0
NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgSlNUeXBlPiBWZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSXRlcmF0b3JN
ZXRob2QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi1lbnVtIFNlY3VyaXR5UmVw
b3J0aW5nT3B0aW9uIHsgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yLCBMb2dTZWN1cml0eUVycm9y
LCBUaHJvd1NlY3VyaXR5RXJyb3IgfTsKLW5hbWVzcGFjZSBCaW5kaW5nU2VjdXJpdHkgewotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0
YXRlJiwgVCYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JO
b2RlKEpTQzo6RXhlY1N0YXRlJiwgVCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEV4Y2Vw
dGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2VwdGlv
bk9yPFQqPiYmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNlcHRpb25PcjxUKj4gY2hl
Y2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb25PcjxUJj4mJik7Ci0g
ICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKiwgRE9N
V2luZG93JiwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1cml0eUVycm9yKTsKLSAg
ICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUmLCBET01X
aW5kb3cmLCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0Zy
YW1lKEpTQzo6RXhlY1N0YXRlKiwgRnJhbWUqLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9IExv
Z1NlY3VyaXR5RXJyb3IpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6
RXhlY1N0YXRlJiwgRnJhbWUmLCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIGJvb2wgc2hvdWxkQWxs
b3dBY2Nlc3NUb05vZGUoSlNDOjpFeGVjU3RhdGUmLCBOb2RlKik7Ci19OwotCi12b2lkIHByaW50
RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotCi1T
dHJpbmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwotQXRvbWljU3Ry
aW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKLQotdGVt
cGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1
ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci0KLQotZW51bSBjbGFzcyBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvciB7IFRocm93LCBSZXR1cm5FYXJseSwgUmVqZWN0UHJvbWlzZSwgQXNz
ZXJ0IH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+Ci1zdHJ1Y3QgQmluZGluZ0NhbGxl
ciB7Ci0gICAgdXNpbmcgQXR0cmlidXRlU2V0dGVyRnVuY3Rpb24gPSBib29sKEpTQzo6RXhlY1N0
YXRlJiwgSlNDbGFzcyYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAgdXNp
bmcgQXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gPSBKU0M6OkpTVmFsdWUoSlNDOjpFeGVjU3RhdGUm
LCBKU0NsYXNzJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAgdXNpbmcgT3BlcmF0aW9uQ2FsbGVy
RnVuY3Rpb24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDbGFzcyos
IEpTQzo6VGhyb3dTY29wZSYpOwotICAgIHVzaW5nIFByb21pc2VPcGVyYXRpb25DYWxsZXJGdW5j
dGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0KLSAgICBzdGF0aWMgSlND
bGFzcyogY2FzdEZvckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6RW5jb2RlZEpTVmFs
dWUpOwotICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRl
Jik7Ci0KLSAgICB0ZW1wbGF0ZTxQcm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gb3BlcmF0
aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRo
aXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlPgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRK
U1ZhbHVlIGNhbGxQcm9taXNlT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUmVmPERl
ZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBjYXN0Rm9yT3BlcmF0aW9uKCpzdGF0ZSk7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdyAhPSBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0ICYmIFVOTElLRUxZKCF0aGlzT2JqZWN0KSkK
LSAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IocHJvbWlz
ZS5nZXQoKSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOwotICAg
ICAgICBBU1NFUlQodGhpc09iamVjdCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygpKTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNl
cyBmb3Igc3RhdGUgYW5kIHRoaXNPYmplY3QuCi0gICAgICAgIHJldHVybiBvcGVyYXRpb25DYWxs
ZXIoc3RhdGUsIHRoaXNPYmplY3QsIFdURk1vdmUocHJvbWlzZSksIHRocm93U2NvcGUpOwotICAg
IH0KLQotICAgIHRlbXBsYXRlPE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNhbGxl
ciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6VGhyb3c+Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbE9wZXJh
dGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpCi0g
ICAgewotICAgICAgICBBU1NFUlQoc3RhdGUpOwotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAgICAgYXV0byogdGhpc09iamVj
dCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsKLSAgICAgICAgaWYgKHNob3VsZFRocm93ICE9
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5MSUtFTFkoIXRoaXNPYmplY3Qp
KSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OlRocm93KQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0
YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9uTmFt
ZSk7Ci0gICAgICAgICAgICAvLyBGb3IgY3VzdG9tIHByb21pc2UtcmV0dXJuaW5nIG9wZXJhdGlv
bnMKLSAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoKnN0
YXRlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9uTmFtZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIEpTQ2xhc3M6OmluZm8oKSk7Ci0gICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgcmVmYWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgdG8gdXNlIHJl
ZmVyZW5jZXMgZm9yIHN0YXRlIGFuZCB0aGlzT2JqZWN0LgotICAgICAgICByZXR1cm4gb3BlcmF0
aW9uQ2FsbGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTxBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiBzZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgotICAg
IHN0YXRpYyBib29sIHNldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
Y29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSk7
Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZt
KCkpOwotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3RhdGUs
IHRoaXNWYWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCi0gICAgICAg
ICAgICByZXR1cm4gKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJv
dykgPyB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6Omlu
Zm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKSA6IGZhbHNlOwotICAgICAgICByZXR1cm4g
c2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIEpTQzo6SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSksIHRocm93U2NvcGUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPEF0dHJpYnV0ZUdldHRl
ckZ1bmN0aW9uIGdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpT
VmFsdWUgYXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSB0aGlzVmFsdWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi0gICAgewotICAgICAgICBB
U1NFUlQoc3RhdGUpOwotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHN0YXRlLT52bSgpKTsKLSAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JBdHRy
aWJ1dGUoKnN0YXRlLCB0aGlzVmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmpl
Y3QpKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVo
YXZpb3I6OlRocm93KQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJv
cigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1
dGVOYW1lKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6UmVqZWN0UHJvbWlzZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJv
bWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFt
ZSwgYXR0cmlidXRlTmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNv
ZGUoSlNDOjpqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSlNDOjpK
U1ZhbHVlOjplbmNvZGUoZ2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpKTsK
LSAgICB9Ci19OwotCi0vLyBFeGNlcHRpb25PciBoYW5kbGluZy4KLXZvaWQgcHJvcGFnYXRlRXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8dm9p
ZD4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8
VD4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRl
ZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwg
RXhjZXB0aW9uT3I8VD4mJiB2YWx1ZSk7CiAKIC8vIElubGluZSBmdW5jdGlvbnMgYW5kIHRlbXBs
YXRlIGRlZmluaXRpb25zLgogCi1pbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIERPTUNvbnN0cnVjdG9y
T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLXsKLSAgICByZXR1cm4gSlND
OjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlw
ZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci19Ci0KLWlu
bGluZSBET01Db25zdHJ1Y3Rvck9iamVjdDo6RE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICA6
IEpTRE9NT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQotewotfQotCi1pbmxpbmUgU3Ry
aW5nIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKQotewot
ICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkZ1bmN0aW9uIik7Ci19Ci0KLWlubGluZSBET01Db25z
dHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QoSlND
OjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
LSAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQotewot
fQotCi1pbmxpbmUgSlNDOjpKU0Z1bmN0aW9uKiBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVj
dDo6aW5pdGlhbGl6ZUZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gbV9pbml0aWFsaXplRnVuY3Rp
b24uZ2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0
OjpzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYgdm0sIEpTQzo6SlNGdW5jdGlvbiYgZnVu
Y3Rpb24pCi17Ci0gICAgbV9pbml0aWFsaXplRnVuY3Rpb24uc2V0KHZtLCB0aGlzLCAmZnVuY3Rp
b24pOwotfQotCiBpbmxpbmUgSlNET01HbG9iYWxPYmplY3QqIGRlcHJlY2F0ZWRHbG9iYWxPYmpl
Y3RGb3JQcm90b3R5cGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gRklYTUU6IENh
bGxlcnMgdG8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNpbmcgdGhlIGdsb2JhbCBvYmplY3QK
QEAgLTQ1MiwxMyArOTgsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGlu
ZSBKCiAgICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTQzo6SlNPYmplY3QqPihhc09iamVjdChnZXRE
T01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPih2bSwgKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KSktPnN0b3JlZFByb3RvdHlwZSgpKSk7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVp
bHRpbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1
bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIEpTQzo6SlNP
YmplY3QqIG9iamVjdCA9IEpTQ2xhc3M6OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNDbGFzcz4o
Z2xvYmFsT2JqZWN0LnZtKCksIGdsb2JhbE9iamVjdCksICZnbG9iYWxPYmplY3QpOwotICAgIGNh
bGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKHN0YXRlLCAqb2JqZWN0LCBpbml0aWFsaXpl
RnVuY3Rpb24pOwotICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShvYmplY3QpOwotfQot
CiBpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29y
bGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKikKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKj4od29ybGQudm0oKS5tX3R5cGVkQXJyYXlDb250
cm9sbGVyLmdldCgpKS0+d3JhcHBlck93bmVyKCk7CkBAIC01NjQsMjYyICsyMDMsNCBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6CiAgICAgcmV0dXJuIHRvSlNOZXds
eUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgUmVmPERPTUNsYXNzPihkb21PYmplY3QpKTsK
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQ2xhc3MmIGNhc3RUaGlz
VmFsdWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQotewotICAgIGF1dG8gdGhpc1ZhbHVlID0gc3Rh
dGUudGhpc1ZhbHVlKCk7Ci0gICAgYXV0byBjYXN0ZWRUaGlzID0ganNEeW5hbWljRG93bmNhc3Q8
SlNDbGFzcyo+KHN0YXRlLnZtKCksIHRoaXNWYWx1ZSk7Ci0gICAgQVNTRVJUKGNhc3RlZFRoaXMp
OwotICAgIHJldHVybiAqY2FzdGVkVGhpczsKLX0KLQotaW5saW5lIGludDMyX3QgZmluaXRlSW50
MzJWYWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBib29sJiBv
a2F5KQotewotICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcihleGVjKTsKLSAgICBv
a2F5ID0gc3RkOjppc2Zpbml0ZShudW1iZXIpOwotICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVt
YmVyKTsKLX0KLQotLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1
ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCi1pbmxpbmUg
SlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpT
VmFsdWUgdmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpCi17Ci0gICAgSlNDOjpWTSYgdm0gPSBleGVj
LnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAg
SlNDOjpKU09iamVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0KCk7Ci0gICAgaWYgKCFvYmpl
Y3QpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIEpTQzo6SlNWYWx1ZSBsZW5ndGhWYWx1
ZSA9IG9iamVjdC0+Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotCi0gICAgaWYgKGxlbmd0aFZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJv
cihleGVjLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGxl
bmd0aCA9IGxlbmd0aFZhbHVlLnRvVUludDMyKCZleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBudWxscHRyKTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLWlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXImIGJ1ZmZlcikKLXsKLSAgICBpZiAoYXV0
byByZXN1bHQgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgYnVmZmVy
KSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIC8vIFRoZSBKU0FycmF5QnVmZmVyOjpj
cmVhdGUgZnVuY3Rpb24gd2lsbCByZWdpc3RlciB0aGUgd3JhcHBlciBpbiBmaW5pc2hDcmVhdGlv
bi4KLSAgICByZXR1cm4gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUtPnZtKCksIGds
b2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYnVmZmVyLnNoYXJpbmdNb2RlKCkpLCAm
YnVmZmVyKTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVy
VmlldyYgdmlldykKLXsKLSAgICByZXR1cm4gdmlldy53cmFwKHN0YXRlLCBnbG9iYWxPYmplY3Qp
OwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIp
Ci17Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAg
IHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICpidWZmZXIpOwotfQotCi1pbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAgIGlm
ICghdmlldykKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgcmV0dXJuIHRvSlMo
c3RhdGUsIGdsb2JhbE9iamVjdCwgKnZpZXcpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIHB0cikKLXsKLSAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+JiYgcHRyKQotewotICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VD4mIHZlY3RvcikKLXsK
LSAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29u
c3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXJyYXktPnB1dERpcmVj
dEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0pKTsKLSAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwotICAgIH0K
LSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mIHZlY3RvcikKLXsKLSAgICBKU0M6
OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4
ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0uZ2V0KCkpKTsKLSAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwotICAgIH0KLSAg
ICByZXR1cm4gYXJyYXk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJiBw
cml2YXRlTmFtZSkKLXsKLSAgICByZXR1cm4gSlNDOjpTeW1ib2w6OmNyZWF0ZShleGVjLT52bSgp
LCBwcml2YXRlTmFtZS51aWQoKSk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJh
dG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0
ZSwgdmFsdWUsIGZhbHNlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRl
SXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwg
dmFsdWUpLCBmYWxzZSk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yRW5k
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1
bHRPYmplY3QoJnN0YXRlLCBKU0M6OmpzVW5kZWZpbmVkKCksIHRydWUpOwotfQotCi1pbmxpbmUg
UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJW
aWV3KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byogd3JhcHBl
ciA9IGpzRHluYW1pY0Rvd25jYXN0PEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqPih2bSwgdmFsdWUp
OwotICAgIGlmICghd3JhcHBlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IHdyYXBwZXItPnBvc3NpYmx5U2hhcmVkSW1wbCgpOwotfQotCi1pbmxpbmUgUmVmUHRyPEpTQzo6
QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mIHZtLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byByZXN1bHQgPSB0b1Bvc3NpYmx5U2hhcmVk
QXJyYXlCdWZmZXJWaWV3KHZtLCB2YWx1ZSk7Ci0gICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT5p
c1NoYXJlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1pbmxpbmUgUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50OEFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3Nz
aWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9
Ci1pbmxpbmUgUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDE2QXJy
YXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3Np
Ymx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9
Ci1pbmxpbmUgUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJy
YXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3Np
Ymx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9
Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4QXJy
YXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3Np
Ymx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9
Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlTaGFyZWRV
aW50OENsYW1wZWRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENsYW1wZWRB
ZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRv
UG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50
MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+
IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpV
aW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQzMkFy
cmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxK
U0M6OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6Rmxv
YXQ2NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVk
VmlldzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci0KLWlubGluZSBSZWZQdHI8
SlNDOjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6
SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQxNkFycmF5
PiB0b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7
IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQxNkFkYXB0b3I+
KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Vuc2hhcmVk
SW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6
OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7
IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Vuc2hhcmVkVWludDhBcnJheShK
U0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWRO
YXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBS
ZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJl
ZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0K
LWlubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNoYXJlZFVpbnQxNkFycmF5KEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5h
dGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBS
ZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mIHZt
LCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVk
VmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlND
OjpGbG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpT
Qzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9h
dDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6Rmxv
YXQ2NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgSlNUPiBpbmxpbmUgVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBKU0M6OlZNJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBWZWN0
b3I8UmVmPFQ+PiByZXN1bHQ7Ci0gICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCB2YWx1ZSwg
WyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1
ZSBqc1ZhbHVlKSB7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgICAgICBpZiAoanNWYWx1ZS5pbmhlcml0cyh2bSwgSlNUOjppbmZvKCkpKSB7Ci0g
ICAgICAgICAgICBhdXRvKiBvYmplY3QgPSBKU1Q6OnRvV3JhcHBlZCh2bSwganNWYWx1ZSk7Ci0g
ICAgICAgICAgICBBU1NFUlQob2JqZWN0KTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKm9i
amVjdCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhyb3dBcnJheUVsZW1lbnRUeXBl
RXJyb3IoKnN0YXRlLCBzY29wZSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
aW5saW5lIFN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCi17Ci0gICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSk7Ci0gICAg
cmV0dXJuIHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFtZS51aWQoKSA6IHByb3BlcnR5
TmFtZS5wdWJsaWNOYW1lKCk7Ci19Ci0KLWlubGluZSBBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1l
VG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIHJl
dHVybiBBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVpZCgp
IDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci19Ci0KLXRlbXBsYXRlPEpTQzo6TmF0aXZl
RnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUg
bm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAg
cmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMt
PnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9wZXJ0eU5hbWUu
cHVibGljTmFtZSgpLCBuYXRpdmVGdW5jdGlvbikpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQg
cHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCi17Ci0gICAgaWYgKHRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBwcm9wYWdhdGVFeGNlcHRpb25T
bG93UGF0aChzdGF0ZSwgdGhyb3dTY29wZSwgV1RGTW92ZShleGNlcHRpb24pKTsKLX0KLQotaW5s
aW5lIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25Pcjx2b2lkPiYmIHZhbHVlKQotewotICAg
IGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpCi0gICAgICAgIHByb3BhZ2F0ZUV4
Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQotewotICAgIGlmIChV
TkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0
aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAg
ICByZXR1cm4geyB9OwotICAgIH0KLSAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2
YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRl
LCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4g
eyB9OwotICAgIH0KLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxP
YmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBUJiBub2RlKQotewotICAgIHJldHVybiBzaG91bGRBbGxvd0Fj
Y2Vzc1RvTm9kZShzdGF0ZSwgJm5vZGUpID8gJm5vZGUgOiBudWxscHRyOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9y
Tm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQqIG5vZGUpCi17Ci0gICAgcmV0dXJuIHNob3Vs
ZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBub2RlKSA/IG5vZGUgOiBudWxscHRyOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0
eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb25P
cjxUKj4mJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGNoZWNrU2VjdXJp
dHlGb3JOb2RlKHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5Ojpj
aGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQm
PiYmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0
dXJuIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZv
ck5vZGUoc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRh
cmdldEN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRUYXJnZXRDdXN0b20uaAkocmV2aXNpb24gMjExMzg0KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw4IEBACiAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmdDYWxsZXIuaCIKKyNpbmNsdWRlICJKU0RPTUJp
bmRpbmdTZWN1cml0eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwCShyZXZp
c2lvbiAyMTEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50
Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNDdXN0
b21FbGVtZW50SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2lu
Y2x1ZGUgIkpTTm9kZUN1c3RvbS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKICNpbmNsdWRlIDxydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaD4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAy
MTEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgIkpTTG9jYXRpb24u
aCIKIAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZ1Nl
Y3VyaXR5LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUg
IlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlv
bi5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2
ZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDIxMTM4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU011dGF0aW9uT2JzZXJ2ZXIuaCIK
IAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiSlNNdXRhdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSlNOb2RlQ3Vz
dG9tLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5oIgpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFN0YXRlbWVudEVycm9y
Q2FsbGJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyMTEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2tDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
SlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCiAKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlv
bkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNTUUxFcnJvci5oIgogI2luY2x1ZGUgIkpTU1FMVHJh
bnNhY3Rpb24uaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAJKHJldmlz
aW9uIDIxMTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJKU1N0b3Jh
Z2UuaCIKIAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gMjExMzg0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw4IEBA
CiAjaW5jbHVkZSAiSlNXb3JrZXIuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgorI2luY2x1
ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVj
dC5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiV29ya2VyLmgi
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoTlNSZXNvbHZlckN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aE5T
UmVzb2x2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyMTEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1hQYXRoTlNSZXNvbHZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJKU1hQYXRoTlNSZXNvbHZlci5oIgogCiAjaW5jbHVk
ZSAiSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
KyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0
aW9uLmNwcAkocmV2aXNpb24gMjExMzg0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NoZWR1bGVkQWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkpTTWFp
blRocmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZUluc3Ry
dW1lbnRhdGlvbi5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIxMTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICsz
Miw4IEBACiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSFRNTFBsdWdJbkVs
ZW1lbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRl
ICJKU0RPTUJpbmRpbmdTZWN1cml0eS5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxp
bmcuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkpTRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDIxMTM4NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNTYsMTEgKzU2LDEyIEBAIGNsYXNzIEZyYW1lOwogY2xhc3MgSFRNTERvY3VtZW50
OwogY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQ7CiBjbGFzcyBMb2FkYWJsZU1vZHVsZVNjcmlwdDsK
LWNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgU2NyaXB0U291cmNlQ29kZTsKK2NsYXNzIFNl
Y3VyaXR5T3JpZ2luOwogY2xhc3MgV2lkZ2V0Oworc3RydWN0IEV4Y2VwdGlvbkRldGFpbHM7CiAK
LXR5cGVkZWYgSGFzaE1hcDx2b2lkKiwgUmVmUHRyPEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+
PiBSb290T2JqZWN0TWFwOwordXNpbmcgUm9vdE9iamVjdE1hcCA9IEhhc2hNYXA8dm9pZCosIFJl
ZlB0cjxKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0Pj47CiAKIGVudW0gUmVhc29uRm9yQ2FsbGlu
Z0NhbkV4ZWN1dGVTY3JpcHRzIHsKICAgICBBYm91dFRvRXhlY3V0ZVNjcmlwdCwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0R2xvYmFsT2JqZWN0LmNwcAko
cmV2aXNpb24gMjExMzg0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0R2xv
YmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOCBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcmlwdEdsb2JhbE9iamVjdC5oIgogCi0jaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNE
T01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LmgiCiAjaW5jbHVkZSA8cnVudGltZS9JZGVudGlmaWVySW5saW5lcy5oPgogCkBAIC00NSw3ICs0
Niw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoRXhlY1N0YXRlJiAKICAgICBKU0xv
Y2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUo
dm0pOwogICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihzY3JpcHRTdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwotICAgIGdsb2JhbE9iamVjdC5w
dXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBuYW1lKSwgdG9KUygmc2Ny
aXB0U3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlKSk7CisgICAgZ2xvYmFsT2JqZWN0LnB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG5hbWUpLCB0b0pTPElETEludGVy
ZmFjZTxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+PihzY3JpcHRTdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2
YWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAg
cmVwb3J0RXhjZXB0aW9uKCZzY3JpcHRTdGF0ZSwgc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJ1Y3R1
cmVkQ2xvbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0
cnVjdHVyZWRDbG9uZS5jcHAJKHJldmlzaW9uIDIxMTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1N0cnVjdHVyZWRDbG9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVkQ2xvbmUuaCIKIAogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlIDxy
dW50aW1lL0pTVHlwZWRBcnJheXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
CShyZXZpc2lvbiAyMTEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMzAxMyw2ICszMDEzLDkgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbkNvbnRlbnRIZWFkZXIoJGludGVyZmFjZSkpOwogCiAgICAgJGlt
cGxJbmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siSlNE
T01CaW5kaW5nQ2FsbGVyLmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siSlNET01FeGNlcHRp
b25IYW5kbGluZy5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkpTRE9NV3JhcHBlckNhY2hl
LmgifSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3siPHd0Zi9HZXRQdHIuaD4ifSA9IDE7CiAgICAg
JGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaD4ifSA9IDEgaWYgJGlu
ZGV4ZWRHZXR0ZXJGdW5jdGlvbjsKIApAQCAtMzYzMyw2ICszNjM2LDcgQEAgc3ViIEdlbmVyYXRl
SW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntDaGVja1NlY3VyaXR5fSAmJgogICAgICAgICAgICAgICAgICEkYXR0cmlidXRlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPntEb05vdENoZWNrU2VjdXJpdHl9ICYmCiAgICAgICAgICAgICAg
ICAgISRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvTm90Q2hlY2tTZWN1cml0eU9u
R2V0dGVyfSkgeworICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUJpbmRp
bmdTZWN1cml0eS5oIik7CiAgICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJE
T01XaW5kb3ciKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCZzdGF0
ZSwgdGhpc09iamVjdC53cmFwcGVkKCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewpAQCAtMzgwMyw2ICszODA3LDcgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2Ut
PmV4dGVuZGVkQXR0cmlidXRlcy0+e0NoZWNrU2VjdXJpdHl9ICYmICEkYXR0cmlidXRlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntEb05vdENoZWNrU2VjdXJpdHl9ICYmICEkYXR0cmlidXRlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntEb05vdENoZWNrU2VjdXJpdHlPblNldHRlcn0pIHsKKyAgICAgICAg
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIpOwogICAg
ICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewogICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0
eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBl
ZCgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKVxuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
QEAgLTQwNTEsNiArNDA1Niw3IEBAIEVORAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOwogCiAgICAgICAgICAgICAg
ICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NoZWNrU2VjdXJpdHl9IGFu
ZCAhJGZ1bmN0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntEb05vdENoZWNrU2VjdXJpdHl9KSB7
CisgICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUJpbmRpbmdTZWN1
cml0eS5oIik7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9N
V2luZG93IikgewogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3Rh
dGUsIGNhc3RlZFRoaXMtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSlcbiIpOwogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDQ3Nyw2ICs0NDgzLDcgQEAgc3ViIEdlbmVy
YXRlQ2FsbFdpdGgKICAgICB9CiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJp
YnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkNhbGxlckRvY3VtZW50IikpIHsKICAgICAgICAgJGlt
cGxJbmNsdWRlc3siRG9jdW1lbnQuaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siSlNE
T01XaW5kb3dCYXNlLmgifSA9IDE7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBh
dXRvKiBkb2N1bWVudCA9IGNhbGxlckRPTVdpbmRvdygkc3RhdGVQb2ludGVyKS5kb2N1bWVudCgp
O1xuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWRvY3VtZW50KVxu
Iik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIiAuICgkcmV0
dXJuVmFsdWUgPyAiICIgLiAkcmV0dXJuVmFsdWUgOiAiIikgLiAiO1xuIik7CkBAIC00NDg4LDkg
KzQ0OTUsMjEgQEAgc3ViIEdlbmVyYXRlQ2FsbFdpdGgKICAgICAgICAgJGltcGxJbmNsdWRlc3si
PGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg+In0gPSAxOwogICAgICAgICBwdXNo
KEBjYWxsV2l0aEFyZ3MsICJXVEZNb3ZlKHNjcmlwdEFyZ3VtZW50cykiKTsKICAgICB9Ci0gICAg
cHVzaChAY2FsbFdpdGhBcmdzLCAiYWN0aXZlRE9NV2luZG93KCRzdGF0ZVBvaW50ZXIpIikgaWYg
JGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiQWN0
aXZlV2luZG93Iik7Ci0gICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiZmlyc3RET01XaW5kb3coJHN0
YXRlUG9pbnRlcikiKSBpZiAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlu
cygkY2FsbFdpdGgsICJGaXJzdFdpbmRvdyIpOwotICAgIHB1c2goQGNhbGxXaXRoQXJncywgImNh
bGxlckRPTVdpbmRvdygkc3RhdGVQb2ludGVyKSIpIGlmICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRl
ZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkNhbGxlcldpbmRvdyIpOworICAgIGlmICgk
Y29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJBY3Rp
dmVXaW5kb3ciKSkgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTVdpbmRvd0Jhc2UuaCJ9
ID0gMTsKKyAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiYWN0aXZlRE9NV2luZG93KCRzdGF0
ZVBvaW50ZXIpIik7CisgICAgICAgIAorICAgIH0KKyAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkV4
dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiRmlyc3RXaW5kb3ciKSkgeworICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTVdpbmRvd0Jhc2UuaCJ9ID0gMTsKKyAgICAgICAgcHVz
aChAY2FsbFdpdGhBcmdzLCAiZmlyc3RET01XaW5kb3coJHN0YXRlUG9pbnRlcikiKTsKKyAgICAg
ICAgCisgICAgfQorICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250
YWlucygkY2FsbFdpdGgsICJDYWxsZXJXaW5kb3ciKSkgeworICAgICAgICAkaW1wbEluY2x1ZGVz
eyJKU0RPTVdpbmRvd0Jhc2UuaCJ9ID0gMTsKKyAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAi
Y2FsbGVyRE9NV2luZG93KCRzdGF0ZVBvaW50ZXIpIik7CisgICAgICAgIAorICAgIH0KIAogICAg
IHJldHVybiBAY2FsbFdpdGhBcmdzOwogfQpAQCAtNDU5OSw4ICs0NjE4LDYgQEAgc3ViIEdlbmVy
YXRlUGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICRxdW90ZWRGdW5jdGlvbk5hbWUgPSAibnVsbHB0
ciI7CiAgICAgfQogCi0gICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NQmluZGluZy5oIiwgJGNv
bmRpdGlvbmFsKTsKLQogICAgIG15ICRhcmd1bWVudEluZGV4ID0gMDsKICAgICBmb3JlYWNoIG15
ICRhcmd1bWVudCAoQHskZnVuY3Rpb24tPmFyZ3VtZW50c30pIHsKICAgICAgICAgbXkgJHR5cGUg
PSAkYXJndW1lbnQtPnR5cGU7CkBAIC01MDY0LDYgKzUwODEsNyBAQCBzdWIgR2VuZXJhdGVDYWxs
YmFja0ltcGxlbWVudGF0aW9uQ29udGVuCiAKICAgICAgICAgICAgICMgRklYTUU6IFdlIGN1cnJl
bnRseSBqdXN0IHJlcG9ydCB0aGUgZXhjZXB0aW9uLiBXZSBzaG91bGQgcHJvYmFibHkgYWRkIGFu
IGV4dGVuZGVkIGF0dHJpYnV0ZSB0byBpbmRpY2F0ZSB3aGVuCiAgICAgICAgICAgICAjIHdlIHdh
bnQgdGhlIGV4Y2VwdGlvbiB0byBiZSByZXRocm93biBpbnN0ZWFkLgorICAgICAgICAgICAgJGlu
Y2x1ZGVzUmVmLT57IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCJ9ID0gMTsKICAgICAgICAgICAg
IHB1c2goQCRjb250ZW50UmVmLCAiICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbilcbiIpOwogICAg
ICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihzdGF0
ZSwgcmV0dXJuZWRFeGNlcHRpb24pO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkY29udGVudFJl
ZiwgIiAgICByZXR1cm4gIXJldHVybmVkRXhjZXB0aW9uO1xuIik7CkBAIC01NjEyLDcgKzU2MzAs
MTAgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIEFkZFRvSW1wbEluY2x1ZGVzRm9ySURMVHlw
ZSgkdHlwZSwgJGNvbmRpdGlvbmFsKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01Db252
ZXJ0LmgiLCAkY29uZGl0aW9uYWwpOwogCi0gICAgJHZhbHVlID0gIkJpbmRpbmdTZWN1cml0eTo6
Y2hlY2tTZWN1cml0eUZvck5vZGUoJHN0YXRlUmVmZXJlbmNlLCAkdmFsdWUpIiBpZiAkY29udGV4
dC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2hlY2tTZWN1cml0eUZvck5vZGV9OworICAgIGlmICgk
Y29udGV4dC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2hlY2tTZWN1cml0eUZvck5vZGV9KSB7Cisg
ICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUJpbmRpbmdTZWN1cml0eS5oIiwgJGNvbmRp
dGlvbmFsKTsKKyAgICAgICAgJHZhbHVlID0gIkJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0
eUZvck5vZGUoJHN0YXRlUmVmZXJlbmNlLCAkdmFsdWUpIjsKKyAgICB9CiAKICAgICBteSAkSURM
VHlwZSA9IEdldElETFR5cGUoJGludGVyZmFjZSwgJHR5cGUsICRjb250ZXh0KTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNp
b24gMjExMzg0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbXBvcnQgIkJyaWRnZUpT
Qy5oIgogI2ltcG9ydCAiRnJhbWUuaCIKKyNpbXBvcnQgIkpTRE9NQmluZGluZ1NlY3VyaXR5Lmgi
CiAjaW1wb3J0ICJKU0RPTVdpbmRvdy5oIgogI2ltcG9ydCAiSlNET01XaW5kb3dDdXN0b20uaCIK
ICNpbXBvcnQgIkpTSFRNTEVsZW1lbnQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZyYW1lRWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiAyMTEzODQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmdTZWN1cml0eS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAJKHJldmlzaW9u
IDIxMTM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MSW1h
Z2VMb2FkZXIuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIxMTM4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvclRpbWVs
aW5lQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JXb3JrZXJBZ2VudC5oIgogI2luY2x1ZGUg
Ikluc3RydW1lbnRpbmdBZ2VudHMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmdTZWN1cml0eS5o
IgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20u
aCIKICNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjExMzg0
KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvclBhZ2VBZ2Vu
dC5oIgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIKICNpbmNsdWRlICJKU0V2ZW50
TGlzdGVuZXIuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMTEzODQpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
UGFnZVNjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIgorI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2lu
Y2x1ZGUgIk1haW5GcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTQ1LDcgKzQ2LDYgQEAK
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNpZiBQTEFURk9STShJT1MpCi0jaW5j
bHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRocmVhZEludGVybmFs
LmgiCiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlclNjcmlw
dERlYnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
V29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMTEzODQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV29y
a2VyU2NyaXB0RGVidWdTZXJ2ZXIuaCIKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2lu
Y2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2lu
Y2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAiV29ya2VyUnVuTG9vcC5oIgpJ
bmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMjExMzg0KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTctMDEtMzAgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBKU0RPTUJpbmRpbmcgaXMgdG9vIGJpZy4g
U3BsaXQgaXQgdXAhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjc2MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICBSZXBsYWNl
IGluY2x1ZGUgb2YgSlNET01CaW5kaW5nIHdpdGggSlNET01FeGNlcHRpb25IYW5kbGluZy4KKwog
MjAxNy0wMS0zMCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBGaXhlZCBlbGVtZW50cyBzaG91bGQgbm90IHJ1YmJlci1iYW5kIGluIFdLMiwgbm9yIHJl
bWFpbiBhdCBuZWdhdGl2ZSBvZmZzZXRzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjExMzg0KQorKysgU291cmNl
L1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0lEQkdldFJlc3VsdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2Uu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NQmluZGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
SlNET01FeGNlcHRpb25IYW5kbGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTGVuZ3RoLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9QYXRoLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300154</attachid>
            <date>2017-01-30 15:41:43 -0800</date>
            <delta_ts>2017-01-30 16:13:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167601-20170130153933.patch</filename>
            <type>text/plain</type>
            <size>718609</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBACisyMDE3LTAxLTMwICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSlNET01CaW5kaW5nIGlzIHRvbyBiaWcu
IFNwbGl0IGl0IHVwIQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY3NjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU3BsaXRzIEpTRE9NQmluZGluZy5oL2NwcCB1cCBhIGJpdCBieSBzcGxpdHRpbmcgb3V0
OgorICAgICAgICAtIEpTRE9NQmluZGluZ0NhbGxlci5oCisgICAgICAgIC0gSlNET01CaW5kaW5n
U2VjdXJpdHkuaC9jcHAKKyAgICAgICAgLSBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgvY3BwCisg
ICAgICAgIC0gSlNET01XcmFwcGVyQ2FjaGUuaC9jcHAKKworICAgICAgICBBbHNvOgorICAgICAg
ICAtIE1vdmVzIGFsbCBjb25zdHJ1Y3RvciBvYmplY3RzIHRvIEpTRE9NQ29uc3RydWN0b3IuaC9j
cHAsICAKKyAgICAgICAgLSBNb3ZlcyBzcGVjaWFsIERPTVdpbmRvdyBhY2Nlc3NvcnMgdG8gSlNE
T01XaW5kb3dCYXNlLgorICAgICAgICAtIERlbGV0ZXMgdW51c2VkIENhbGxiYWNrRnVuY3Rpb24u
aC9jcHAKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmg6IFJlbW92
ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHA6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nQ2FsbGVyLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oLgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcC4KKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUNvbnN0cnVjdG9yLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmNwcC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnN0
cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0Lmg6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAuCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbGVyRE9NV2luZG93KTog
TW92ZWQgZnJvbSBKU0RPTUJpbmRpbmcuaAorICAgICAgICAoV2ViQ29yZTo6YWN0aXZlRE9NV2lu
ZG93KTogTW92ZWQgZnJvbSBKU0RPTUJpbmRpbmcuaAorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RE
T01XaW5kb3cpOiBNb3ZlZCBmcm9tIEpTRE9NQmluZGluZy5oCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01XaW5kb3dCYXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oLgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXRDdXN0b20uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxFbGVt
ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFja0N1c3RvbS5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNYUGF0aE5TUmVzb2x2ZXJDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVk
dWxlZEFjdGlvbi5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdEdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvU3RydWN0dXJl
ZENsb25lLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVD
YWxsV2l0aCk6CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6CisgICAgICAgIChH
ZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250ZW50KToKKyAgICAgICAgKE5hdGl2ZVRv
SlNWYWx1ZSk6CisgICAgICAgICogYnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOgorICAg
ICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwOgorICAgICAgICAqIGh0bWwvSFRN
TFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgICogaW5z
cGVjdG9yL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcDoKKwogMjAxNy0wMS0zMCAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBwb3NpdGlv
bjpmaXhlZCBpbnNpZGUgdG91Y2gtc2Nyb2xsYWJsZSBvdmVyZmxvdyBpcyBtaXNwb3NpdGlvbmVk
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjExMzg5KQorKysgU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwNjksNyArMTA2OSw2IEBA
IHNldChXZWJDb3JlX1NPVVJDRVMKIAogICAgIGJpbmRpbmdzL2pzL0NhY2hlZE1vZHVsZVNjcmlw
dExvYWRlci5jcHAKICAgICBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRGZXRjaGVyLmNwcAotICAg
IGJpbmRpbmdzL2pzL0NhbGxiYWNrRnVuY3Rpb24uY3BwCiAgICAgYmluZGluZ3MvanMvQ29tbW9u
Vk0uY3BwCiAgICAgYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAogICAgIGJpbmRpbmdz
L2pzL0dDQ29udHJvbGxlci5jcHAKQEAgLTExMDAsNiArMTA5OSw5IEBAIHNldChXZWJDb3JlX1NP
VVJDRVMKICAgICBiaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAogICAgIGJpbmRp
bmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5jcHAKKyAgICBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5jcHAKKyAg
ICBiaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yLmNwcAorICAgIGJpbmRpbmdzL2pzL0pTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuY3BwCiAgICAgYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3Qu
Y3BwCiAgICAgYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3RUYXNrLmNwcAogICAgIGJpbmRp
bmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAKQEAgLTExMDksNiArMTExMSw3IEBAIHNldChXZWJDb3Jl
X1NPVVJDRVMKICAgICBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCiAgICAg
YmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0RPTVdy
YXBwZXIuY3BwCisgICAgYmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuY3BwCiAgICAgYmlu
ZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0RvY3VtZW50
RnJhZ21lbnRDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5j
cHAJKHJldmlzaW9uIDIxMTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVk
ZSAiRGF0YWJhc2VUaHJlYWQuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJK
U0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTUUxFcnJvci5o
IgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjExMzg5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODM3LDYgKzI4MzcsMTQg
QEAKIAkJN0MzRTUxMEIxOERGOEYzNTAwQzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNFNTEwOTE4REY4RjM1
MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5tbSAqLzsgfTsKIAkJN0MzRjAxQzExQzhFNUFCQTAw
QUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0YwMUMwMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29u
dGVudFByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJN0MzRjAxQzIxQzhFNUFDMjAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzRjAx
QkYxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuY3BwICovOyB9OworCQk3
QzQ1QzlDRjFFM0VGREY3MDBBQUI1NTggLyogSlNET01CaW5kaW5nU2VjdXJpdHkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0NUM5Q0ExRTNFOEQy
RTAwQUFCNTU4IC8qIEpTRE9NQmluZGluZ1NlY3VyaXR5LmNwcCAqLzsgfTsKKwkJN0M0NUM5RDAx
RTNFRkRGQjAwQUFCNTU4IC8qIEpTRE9NV3JhcHBlckNhY2hlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDVDOUNCMUUzRThFNDkwMEFBQjU1OCAv
KiBKU0RPTVdyYXBwZXJDYWNoZS5jcHAgKi87IH07CisJCTdDNDVDOUQxMUUzRUZFMDUwMEFBQjU1
OCAvKiBKU0RPTUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDNDVDOUNEMUUzRTkwMEIwMEFBQjU1OCAvKiBKU0RPTUNvbnN0cnVj
dG9yLmNwcCAqLzsgfTsKKwkJN0M0NUM5RDIxRTNFRkUwODAwQUFCNTU4IC8qIEpTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0M0NUM5Q0MxRTNFOEYwODAwQUFCNTU4IC8qIEpTRE9NRXhjZXB0aW9uSGFuZGxpbmcu
Y3BwICovOyB9OworCQk3QzQ1QzlEMzFFM0ZDQkQ3MDBBQUI1NTggLyogSlNET01XcmFwcGVyQ2Fj
aGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDVD
OUM4MUUzRThCNTEwMEFBQjU1OCAvKiBKU0RPTVdyYXBwZXJDYWNoZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdDNDVDOUQ0MUUzRkNCREYwMEFB
QjU1OCAvKiBKU0RPTUJpbmRpbmdTZWN1cml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0NUM5QzkxRTNFOENENzAwQUFCNTU4IC8qIEpTRE9NQmlu
ZGluZ1NlY3VyaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJN0M0NUM5RDUxRTNGQ0JFNDAwQUFCNTU4IC8qIEpTRE9NQmluZGluZ0NhbGxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0NUM5QzYx
RTNFOEFCQTAwQUFCNTU4IC8qIEpTRE9NQmluZGluZ0NhbGxlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdDNDVDOUQ2MUUzRkNCRjgwMEFBQjU1
OCAvKiBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ1QzlDNzFFM0U4QUZGMDBBQUI1NTggLyogSlNET01FeGNl
cHRpb25IYW5kbGluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTdDNDhBNkQwMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0OEE2Q0Ux
OTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5jcHAgKi87IH07CiAJCTdDNDhBNkQx
MTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDhBNkNGMTkxQzlENjUwMDAyNjY3NCAvKiBX
ZWJLaXROYW1lc3BhY2UuaCAqLzsgfTsKIAkJN0M0Qzk2REMxQUQ0NDgzNTAwMzY1QTUwIC8qIEpT
UmVhZGFibGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0M0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW0uY3Bw
ICovOyB9OwpAQCAtNDU2MiwxMCArNDU3MCw4IEBACiAJCUIxMEI2OTgwMTQwQzE3NDAwMEJDMUMy
NiAvKiBXZWJWVFRUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjEwQjY5N0QxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuLmggKi87IH07
CiAJCUIxMEI2OTgxMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbml6ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjEwQjY5N0UxNDBDMTc0
MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5jcHAgKi87IH07CiAJCUIxMEI2OTgyMTQwQzE3
NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxMEI2OTdGMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRU
b2tlbml6ZXIuaCAqLzsgfTsKLQkJQjE4Mjc0OTMxMzRDQTRDMTAwQjk4QzJEIC8qIENhbGxiYWNr
RnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjE4Mjc0OTIxMzRDQTRDMTAwQjk4QzJEIC8qIENhbGxiYWNrRnVuY3Rpb24uY3BwICovOyB9
OwogCQlCMUFENEU3MzEzQTEyQTQ2MDA4NDZCMjcgLyogVGV4dFRyYWNrTG9hZGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxQUQ0RTcxMTNBMTJB
NDYwMDg0NkIyNyAvKiBUZXh0VHJhY2tMb2FkZXIuY3BwICovOyB9OwogCQlCMUFENEU3NDEzQTEy
QTQ2MDA4NDZCMjcgLyogVGV4dFRyYWNrTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMUFENEU3MjEzQTEyQTQ2MDA4NDZCMjcgLyogVGV4dFRy
YWNrTG9hZGVyLmggKi87IH07Ci0JCUIxRDVFQ0I1MTM0QjU4REEwMDg3Qzc4RiAvKiBDYWxsYmFj
a0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMUQ1RUNCNDEzNEI1OERBMDA4N0M3OEYgLyogQ2FsbGJhY2tGdW5jdGlvbi5oICovOyB9Owog
CQlCMjAxMTEwNzBBQjc3NDA1MDBEQjBFNjggLyogSlNTVkdBRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjAxMTEwNTBBQjc3NDA1MDBE
QjBFNjggLyogSlNTVkdBRWxlbWVudC5jcHAgKi87IH07CiAJCUIyMDExMTA4MEFCNzc0MDUwMERC
MEU2OCAvKiBKU1NWR0FFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjAxMTEwNjBBQjc3NDA1MDBEQjBFNjggLyogSlNTVkdBRWxlbWVudC5o
ICovOyB9OwogCQlCMjIyNzk2NDBEMDBCRjIyMDA3MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIyNzdD
RDBEMDBCRjFGMDA3MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVzLmggKi87IH07CkBAIC01MTM4
LDcgKzUxNDQsNiBAQAogCQlCNTQzQjg1NzE3RUI3NThGMDAzQkU5M0EgLyogU1ZHUHJvcGVydHlJ
bmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1
NDNCODU2MTdFQjc1OEYwMDNCRTkzQSAvKiBTVkdQcm9wZXJ0eUluZm8uY3BwICovOyB9OwogCQlC
NTYyREI2MDE3RDNDRDYzMDAxMEFGOTYgLyogSFRNTEVsZW1lbnRUeXBlSGVscGVycy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU2MkRCNUUxN0QzQ0Q1
NjAwMTBBRjk2IC8qIEhUTUxFbGVtZW50VHlwZUhlbHBlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCNTYyREI2MTE3RDNDRDY2MDAxMEFGOTYg
LyogU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCNTYyREI1RjE3RDNDRDU2MDAxMEFGOTYgLyogU1ZHRWxlbWVudFR5
cGVIZWxwZXJzLmggKi87IH07Ci0JCUI1NjU3NkU4MTdEQTk0RTIwMEE1NkJEQyAvKiBET01Db25z
dHJ1Y3RvcldpdGhEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjU2NTc2RTcxN0RBOTRFMjAwQTU2QkRDIC8qIERPTUNvbnN0cnVjdG9yV2l0
aERvY3VtZW50LmggKi87IH07CiAJCUI1NjU3OUI1MTgyNEQxMkEwMEU3OUYyMyAvKiBSZW5kZXJD
aGlsZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNTY1NzlCNDE4MjREMTJBMDBFNzlGMjMgLyogUmVuZGVyQ2hpbGRJdGVyYXRvci5oICov
OyB9OwogCQlCNTdDQjUyRDE4MkEzRUVEMDA3OUE2NDcgLyogSW5saW5lRWxlbWVudEJveC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTdDQjUyQzE4
MkEzRUVEMDA3OUE2NDcgLyogSW5saW5lRWxlbWVudEJveC5jcHAgKi87IH07CiAJCUI1N0NCNTJF
MTgyQTNFRkMwMDc5QTY0NyAvKiBJbmxpbmVFbGVtZW50Qm94LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTdDQjUyQjE4MkEzN0Y2MDA3OUE2NDcgLyog
SW5saW5lRWxlbWVudEJveC5oICovOyB9OwpAQCAtMTAzNjIsNiArMTAzNjcsMTQgQEAKIAkJN0Mz
RjAxQzAxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckNvbnRlbnRQcm92aWRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QzQxODlBQjFCMDdDMTcwMDAwRkE3NTcgLyogR2xvYmFsRXZl
bnRIYW5kbGVycy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gR2xvYmFsRXZlbnRIYW5kbGVycy5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDNDE4OUFDMUIwN0NCRjIwMDBGQTc1NyAvKiBXaW5kb3dFdmVu
dEhhbmRsZXJzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBXaW5kb3dFdmVudEhhbmRsZXJzLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0M0NUM5QzYxRTNFOEFCQTAwQUFCNTU4IC8qIEpTRE9NQmluZGlu
Z0NhbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUJpbmRpbmdD
YWxsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M0NUM5QzcxRTNFOEFGRjAw
QUFCNTU4IC8qIEpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNET01FeGNlcHRpb25IYW5kbGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QzQ1QzlDODFFM0U4QjUxMDBBQUI1NTggLyogSlNET01XcmFwcGVyQ2FjaGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01XcmFwcGVyQ2FjaGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M0NUM5QzkxRTNFOENENzAwQUFCNTU4IC8q
IEpTRE9NQmluZGluZ1NlY3VyaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTRE9NQmluZGluZ1NlY3VyaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdD
NDVDOUNBMUUzRThEMkUwMEFBQjU1OCAvKiBKU0RPTUJpbmRpbmdTZWN1cml0eS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTUJpbmRpbmdTZWN1cml0eS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNDVDOUNCMUUzRThFNDkwMEFBQjU1OCAv
KiBKU0RPTVdyYXBwZXJDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RPTVdyYXBwZXJDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTdDNDVDOUNDMUUzRThGMDgwMEFBQjU1OCAvKiBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NRXhjZXB0aW9uSGFuZGxp
bmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzQ1QzlDRDFFM0U5MDBCMDBB
QUI1NTggLyogSlNET01Db25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0RPTUNvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0M0OEE2Q0UxOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXROYW1lc3BhY2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzQ4QTZDRjE5MUM5RDY1MDAwMjY2NzQgLyog
V2ViS2l0TmFtZXNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktp
dE5hbWVzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzQ4QTZEMjE5MUM5
RDhFMDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJLaXROYW1lc3BhY2Uu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIzMzIsMTIgKzEyMzQ1LDEwIEBA
CiAJCUIxMEI2OTdEMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWVFRUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMTBCNjk3RTE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlZUVFRva2VuaXplci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxMEI2OTdGMTQwQzE3NDAwMEJDMUMy
NiAvKiBXZWJWVFRUb2tlbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViVlRUVG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIxODI3NDky
MTM0Q0E0QzEwMEI5OEMyRCAvKiBDYWxsYmFja0Z1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxiYWNrRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMUE5NDJFMTE1QjVDRTIyMDBENTI1RDEgLyogTWVkaWFTb3VyY2VS
ZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVNv
dXJjZVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjFBOTQyRTIx
NUI1Q0UyMjAwRDUyNUQxIC8qIE1lZGlhU291cmNlUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTb3VyY2VSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMUFENEU3MTEzQTEyQTQ2MDA4NDZCMjcgLyogVGV4dFRyYWNrTG9hZGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRUcmFja0xvYWRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxQUQ0RTcyMTNBMTJBNDYwMDg0
NkIyNyAvKiBUZXh0VHJhY2tMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGV4dFRyYWNrTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIxRDVF
Q0I0MTM0QjU4REEwMDg3Qzc4RiAvKiBDYWxsYmFja0Z1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxiYWNrRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjIwMTExMDUwQUI3NzQwNTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHQUVsZW1lbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjAxMTEwNjBBQjc3NDA1MDBEQjBFNjgg
LyogSlNTVkdBRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNT
VkdBRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjIyNzdDRDBEMDBC
RjFGMDA3MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHcmFkaWVudEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEzMDUxLDcgKzEzMDYyLDYgQEAKIAkJQjU2MkRCNUUxN0QzQ0Q1NjAwMTBBRjk2
IC8qIEhUTUxFbGVtZW50VHlwZUhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTEVsZW1lbnRU
eXBlSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTYyREI1RjE3RDND
RDU2MDAxMEFGOTYgLyogU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0VsZW1lbnRUeXBlSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTY1
NzZFNDE3REE1OTlGMDBBNTZCREMgLyogSlNNYWluVGhyZWFkRXhlY1N0YXRlSW5zdHJ1bWVudGF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWFpblRocmVhZEV4ZWNT
dGF0ZUluc3RydW1lbnRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNTY1
NzZFNzE3REE5NEUyMDBBNTZCREMgLyogRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU2NTc5QjQxODI0RDEyQTAwRTc5RjIz
IC8qIFJlbmRlckNoaWxkSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyQ2hpbGRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
NTdDQjUyQjE4MkEzN0Y2MDA3OUE2NDcgLyogSW5saW5lRWxlbWVudEJveC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVFbGVtZW50Qm94Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUI1N0NCNTJDMTgyQTNFRUQwMDc5QTY0NyAvKiBJbmxpbmVFbGVtZW50
Qm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUVsZW1l
bnRCb3guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIxMzYsNyArMjIxNDYs
NiBAQAogCQkJCUJDRDUzMzYzMEVENjg0ODkwMDg4NzQ2OCAvKiBDYWNoZWRTY3JpcHRTb3VyY2VQ
cm92aWRlci5oICovLAogCQkJCTBGNjBGMzI5MURGQkIxMDQwMDQxNkQ2QyAvKiBDb21tb25WTS5j
cHAgKi8sCiAJCQkJMEY2MEYzMkExREZCQjEwNDAwNDE2RDZDIC8qIENvbW1vblZNLmggKi8sCi0J
CQkJQjU2NTc2RTcxN0RBOTRFMjAwQTU2QkRDIC8qIERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50
LmggKi8sCiAJCQkJQkM1M0RBNDcxMTQzMTM0RDAwMEQ4MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5j
cHAgKi8sCiAJCQkJQkM1M0RBMkQxMTQzMTIxRTAwMEQ4MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5o
ICovLAogCQkJCTE0MzJFODQ4MEM1MTQ5M0YwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuY3BwICov
LApAQCAtMjIxNTUsOCArMjIxNjQsMTQgQEAKIAkJCQk5QkQ0RTkxNTFDNDYyODcyMDA1MDY1QkMg
LyogSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmggKi8sCiAJCQkJOTNCNzBENDcwOUVCMEM3QzAw
OUQ4NDY4IC8qIEpTRE9NQmluZGluZy5jcHAgKi8sCiAJCQkJOTNCNzBENDgwOUVCMEM3QzAwOUQ4
NDY4IC8qIEpTRE9NQmluZGluZy5oICovLAorCQkJCTdDNDVDOUM2MUUzRThBQkEwMEFBQjU1OCAv
KiBKU0RPTUJpbmRpbmdDYWxsZXIuaCAqLywKKwkJCQk3QzQ1QzlDQTFFM0U4RDJFMDBBQUI1NTgg
LyogSlNET01CaW5kaW5nU2VjdXJpdHkuY3BwICovLAorCQkJCTdDNDVDOUM5MUUzRThDRDcwMEFB
QjU1OCAvKiBKU0RPTUJpbmRpbmdTZWN1cml0eS5oICovLAorCQkJCTdDNDVDOUNEMUUzRTkwMEIw
MEFBQjU1OCAvKiBKU0RPTUNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQk0MTNDMkMzMzFCQzI5QTdC
MDA3NTIwNEMgLyogSlNET01Db25zdHJ1Y3Rvci5oICovLAogCQkJCTkzMDg0MTMzMUNEREIxNTUw
MEIwOTU4QyAvKiBKU0RPTUNvbnZlcnQuaCAqLywKKwkJCQk3QzQ1QzlDQzFFM0U4RjA4MDBBQUI1
NTggLyogSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAgKi8sCisJCQkJN0M0NUM5QzcxRTNFOEFG
RjAwQUFCNTU4IC8qIEpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCAqLywKIAkJCQlFMUMzNkNCQzBF
QjA4MDYyMDA3NDEwQkMgLyogSlNET01HbG9iYWxPYmplY3QuY3BwICovLAogCQkJCUUxQzM2QzAy
MEVCMDc2RDYwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5oICovLAogCQkJCTdDMkJERDNC
MTdDN0Y5OEIwMDM4RkYxNSAvKiBKU0RPTUdsb2JhbE9iamVjdFRhc2suY3BwICovLApAQCAtMjIx
NzMsNiArMjIxODgsOCBAQAogCQkJCUJDQkZCNTNCMERDRDI5Q0YwMDE5QjNFNSAvKiBKU0RPTVdp
bmRvd1NoZWxsLmggKi8sCiAJCQkJNDE3MEEyRTkxRDhDMENDMDAwMzE4NDUyIC8qIEpTRE9NV3Jh
cHBlci5jcHAgKi8sCiAJCQkJNjVFMEU5NDMxMTMzQzg5RjAwQjRDQjEwIC8qIEpTRE9NV3JhcHBl
ci5oICovLAorCQkJCTdDNDVDOUNCMUUzRThFNDkwMEFBQjU1OCAvKiBKU0RPTVdyYXBwZXJDYWNo
ZS5jcHAgKi8sCisJCQkJN0M0NUM5QzgxRTNFOEI1MTAwQUFCNTU4IC8qIEpTRE9NV3JhcHBlckNh
Y2hlLmggKi8sCiAJCQkJRTNBNTg3MkUxREMzRjUyNjAwRjYwN0E2IC8qIEpTRHluYW1pY0Rvd25j
YXN0LmggKi8sCiAJCQkJQkM2MDkwMUUwRTkxQjhFQzAwMEM2OEI1IC8qIEpTRXZlbnRUYXJnZXRD
dXN0b20uY3BwICovLAogCQkJCTQ2QjYzRjZCMUM2RThDREYwMDJFOTE0QiAvKiBKU0V2ZW50VGFy
Z2V0Q3VzdG9tLmggKi8sCkBAIC0yMjU2OSw4ICsyMjU4Niw2IEBACiAJCUJDQ0U1OEE3MTA2MUU4
MkYwMDhGQjM1QSAvKiBDYWxsYmFjayBPYmplY3RzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlCMTgyNzQ5MjEzNENBNEMxMDBCOThDMkQgLyogQ2FsbGJh
Y2tGdW5jdGlvbi5jcHAgKi8sCi0JCQkJQjFENUVDQjQxMzRCNThEQTAwODdDNzhGIC8qIENhbGxi
YWNrRnVuY3Rpb24uaCAqLywKIAkJCQkxNDQ5RTI4NjEwN0Q0REI0MDBCNTc5M0YgLyogSlNDYWxs
YmFja0RhdGEuY3BwICovLAogCQkJCTE0NDlFMjRBMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxi
YWNrRGF0YS5oICovLAogCQkJCUUxMEI5M0MyMEI3M0MyOTEwMDNFRDg5MCAvKiBKU0N1c3RvbVhQ
YXRoTlNSZXNvbHZlci5jcHAgKi8sCkBAIC0yNTE4NSw3ICsyNTIwMCw2IEBACiAJCQkJOTNGMTk5
NTAwODI0NUU1OTAwMUU5QUJDIC8qIENhY2hlUG9saWN5LmggaW4gSGVhZGVycyAqLywKIAkJCQlF
NDNBRjhFNzFBQzVCN0VDMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0OUFFMkQ5NzEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQjFENUVDQjUxMzRCNThEQTAwODdDNzhGIC8qIENhbGxiYWNrRnVu
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5NDg0RkMyMTAyQ0YyM0MwMDE4N0REMyAvKiBD
YW52YXNHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDY3MUUwNjYxRDY3QTU5NjAwQzZC
NDk3IC8qIENhbnZhc1BhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5NDg0RkM1MTAyQ0YyM0Mw
MDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MzYyLDYgKzI1
Mzc2LDcgQEAKIAkJCQlFMTI1RjgzNjE4MjJGMThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1BQy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTFGODBCODgxODMxNzI1MjAwNzg4NUMzIC8qIENyeXB0b0tl
eVBhaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNjRGQUEzMTgzMTVCRjQwMERCNEU2MSAvKiBD
cnlwdG9LZXlSU0EuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDNDVDOUQ1MUUzRkNCRTQwMEFBQjU1
OCAvKiBKU0RPTUJpbmRpbmdDYWxsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMjVGODU2MTgy
QzBGODMwMEQ4NENEOSAvKiBDcnlwdG9LZXlTZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMTI1Rjg1QTE4MkMxQUE2MDBEODRDRDkgLyogQ3J5cHRvS2V5U2VyaWFsaXphdGlvblJh
dy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5NzI3MTYxODIwNTQ5RTAwNTkyRDUxIC8qIENyeXB0
b0tleVR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjU1ODUsNyArMjU2MDAsNiBAQAogCQkJCUE4
MTg1RjM5MDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1bWVudFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk3Mzg4OUExMTE2RUE5REMwMEFERjMxMyAvKiBEb2N1bWVudFdyaXRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUE4RjZCQzMwREI1NUNEQzAwMURCNzk0IC8qIERPTUFwcGxpY2F0aW9uQ2Fj
aGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUI1NjU3NkU4MTdEQTk0RTIwMEE1NkJEQyAvKiBET01D
b25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2MEQ2RTkwRDI4
RDgzNDAwQjk5MThGIC8qIERPTUNvcmVFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUZD
OUEwRjc1MTY0MDk0Q0YwMDNENkI4RCAvKiBET01DU1NOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTlCM0E4ODcyMTQ1NjMyRjkwMDNBRThGNSAvKiBET01ET01TZXR0YWJsZVRva2VuTGlz
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjY5Niw2ICsyNjcxMCw3IEBACiAJCQkJNDQ5NkUzQTAx
Mzk4MTNBNTAwM0VFMzJBIC8qIEpTU1ZHTVBhdGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NTQyQTc5NzBBRTVDOTQzMDBERjU4REYgLyogSlNTVkdOdW1iZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyRkEzREIxMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR051bWJlckxpc3QuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTdDNDVDOUQzMUUzRkNCRDcwMEFBQjU1OCAvKiBKU0RPTVdyYXBwZXJD
YWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQjUwQUI3NUE2RjAwMEU1QUM0IC8qIEpT
U1ZHUGF0aEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREI3MEFCNzVBNkYwMDBF
NUFDNCAvKiBKU1NWR1BhdGhTZWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREI5MEFCNzVB
NkYwMDBFNUFDNCAvKiBKU1NWR1BhdGhTZWdBcmNBYnMuaCBpbiBIZWFkZXJzICovLApAQCAtMjc3
OTcsNiArMjc4MTIsNyBAQAogCQkJCTk3QkM2QTUyMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFu
c2FjdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkE1NzE1MDVGMDgxMDAx
Qjc0QUMgLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTdCQzZBNTgxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0M0NUM5RDQxRTNGQ0JERjAwQUFCNTU4IC8qIEpTRE9NQmlu
ZGluZ1NlY3VyaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTM2RkQxODE2Qzc4MjY1MDBGODg3
QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzNkZEMTcx
NkM3ODI2NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTJFNkU1QTBDQzU1MjEzMDA0QTIwNjIgLyogU1FMVmFsdWUuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjc4NDYsNiArMjc4NjIsNyBAQAogCQkJCTBGRjUwMjcyMTAyQkE5NkEwMDY2
RjM5QSAvKiBTdHlsZU1lZGlhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjc0RTBFODFFMDY3
MDBCMjU5NjUgLyogU3R5bGVNdWx0aUNvbERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0REFD
RTZBMUQxMkUxMEIwMDc1OTgwRiAvKiBTdHlsZVBlbmRpbmdSZXNvdXJjZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTdDNDVDOUQ2MUUzRkNCRjgwMEFBQjU1OCAvKiBKU0RPTUV4Y2VwdGlvbkhhbmRs
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkRGQzBBMTk5MDY3MDA3RkI4QzUgLyogU3R5
bGVQcm9wZXJ0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUIyNTEwNzE1MkEwQkIwMDA2OUI3
NzkgLyogU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNDMDVB
NUIxQTY4NjIxMjAwN0U1REVBIC8qIFN0eWxlUHJvcGVydHlTaG9ydGhhbmRGdW5jdGlvbnMuaCBp
biBIZWFkZXJzICovLApAQCAtMjkwODUsNyArMjkxMDIsNiBAQAogCQkJCUJDQjE2QzI3MDk3OUMz
QkQwMDQ2Nzc0MSAvKiBDYWNoZWRYU0xTdHlsZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUU0M0FGOEU2MUFDNUI3RTgwMENBNzE3RSAvKiBDYWNoZVZhbGlkYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDlBRTJEOTYxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjE4Mjc0OTMxMzRDQTRDMTAwQjk4QzJEIC8qIENhbGxi
YWNrRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk0ODRGQzExMDJDRjIzQzAwMTg3
REQzIC8qIENhbnZhc0dyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ2NzFFMDY1MUQ2
N0E1OTYwMEM2QjQ5NyAvKiBDYW52YXNQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5NDg0
RkM0MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMjkyNDYsNiArMjkyNjIsNyBAQAogCQkJCUZCQjBDNUI3MTdCQkQ2MjYwMDNEMzY3NyAvKiBD
U1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNjRCNEQ1MENCNDI5
OEEwMDVGMkI2MiAvKiBDU1NGb250RmFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MDlFQkRC
MjE2QjdFRTc0MDBDQkEzRkMgLyogQ1NTRm9udEZhY2VMb2FkRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJN0M0NUM5RDExRTNFRkUwNTAwQUFCNTU4IC8qIEpTRE9NQ29uc3RydWN0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTZDRTcwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0ZvbnRG
YWNlUnVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjYwMTdBMzFDNzJEQzk5MDBGNzRBMTYg
LyogQ1NTRm9udEZhY2VTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2NEI0RDcwQ0I0Mjk4
QTAwNUYyQjYyIC8qIENTU0ZvbnRGYWNlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk1
NzgsNiArMjk1OTUsNyBAQAogCQkJCUIyQUZGQzdDMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q2Fj
aGVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZGMjYgLyog
Rm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJBRkZDODAwRDAwQTVDMTAwMzAw
NzREIC8qIEZvbnRDYXNjYWRlQ29jb2EubW0gaW4gU291cmNlcyAqLywKKwkJCQk3QzQ1QzlEMDFF
M0VGREZCMDBBQUI1NTggLyogSlNET01XcmFwcGVyQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjJDM0RBNjcwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlRm9udHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M0RURENzQxQTdCNjA3ODAwMTk4QzREIC8qIEZvbnRDb2NvYS5tbSBp
biBTb3VyY2VzICovLAogCQkJCUIyQUZGQzdEMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzE1NDYsNiArMzE1NjQsNyBAQAog
CQkJCUIyMjI3OUE0MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0IwNTBEMDBCRkYxMDA3MUI3
ODIgLyogU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUIyMjI3OUE3MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDdXJzb3JFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTdDNDVDOUQyMUUzRUZFMDgwMEFBQjU1OCAvKiBKU0RPTUV4Y2VwdGlv
bkhhbmRsaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUFEMEQwMEJGMjIwMDcxQjc4
MiAvKiBTVkdEZWZzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlCMDBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHRGVzY0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIy
Mjc5QjMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0RvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMzE1NjAsNiArMzE1NzksNyBAQAogCQkJCUIyMjI3OUNEMEQwMEJGMjIwMDcxQjc4MiAvKiBT
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIy
NzlEMDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE5MjEzMjc0MTFDMEU2QkIwMDQ1NjIzOCAvKiBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzQ1QzlDRjFFM0VGREY3MDBBQUI1
NTggLyogSlNET01CaW5kaW5nU2VjdXJpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5
RDMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMjIyNzlENjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUQ5MEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmNw
cAkocmV2aXNpb24gMjExMzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FsbGJh
Y2tGdW5jdGlvbi5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
Ci0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWxsYmFja0Z1bmN0aW9uLmgiCi0K
LSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0j
aW5jbHVkZSA8cnVudGltZS9DYWxsRGF0YS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJv
b2wgY2hlY2tGdW5jdGlvbk9ubHlDYWxsYmFjayhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgQ2FsbGJhY2tBbGxvd2VkVmFsdWVGbGFncyBhY2NlcHRlZFZhbHVlcykK
LXsKLSAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQoKSAmJiAoYWNjZXB0ZWRWYWx1ZXMgJiBDYWxs
YmFja0FsbG93VW5kZWZpbmVkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHZh
bHVlLmlzTnVsbCgpICYmIChhY2NlcHRlZFZhbHVlcyAmIENhbGxiYWNrQWxsb3dOdWxsKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBp
ZiAoZ2V0Q2FsbERhdGEodmFsdWUsIGNhbGxEYXRhKSA9PSBKU0M6OkNhbGxUeXBlOjpOb25lKSB7
Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsK
LSAgICAgICAgdGhyb3dUeXBlTWlzbWF0Y2hFcnJvcigqc3RhdGUsIHNjb3BlKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9DYWxsYmFja0Z1bmN0aW9uLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmgJ
KHJldmlzaW9uIDIxMTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhbGxiYWNr
RnVuY3Rpb24uaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0KLW5hbWVzcGFj
ZSBKU0MgewotY2xhc3MgRXhlY1N0YXRlOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIEpTRE9NR2xvYmFsT2JqZWN0OwotCi1lbnVtIENhbGxiYWNrQWxsb3dlZFZhbHVlRmxhZyB7
Ci0gICAgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCA9IDEsCi0gICAgQ2FsbGJhY2tBbGxvd051bGwg
PSAxIDw8IDEKLX07Ci0KLXR5cGVkZWYgdW5zaWduZWQgQ2FsbGJhY2tBbGxvd2VkVmFsdWVGbGFn
czsKLQotYm9vbCBjaGVja0Z1bmN0aW9uT25seUNhbGxiYWNrKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBDYWxsYmFja0FsbG93ZWRWYWx1ZUZsYWdzKTsKLQotLy8gQ3JlYXRlcyBjYWxs
YmFjayBvYmplY3RzIGZvciBjYWxsYmFja3MgbWFya2VkIGFzIEZ1bmN0aW9uT25seSBpbiBXZWJJ
REwuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSlNDYWxsYmFja1R5cGU+Ci1SZWZQdHI8SlNDYWxsYmFj
a1R5cGU+IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUsIENhbGxi
YWNrQWxsb3dlZFZhbHVlRmxhZ3MgYWNjZXB0ZWRWYWx1ZXMgPSAwKQotewotICAgIGlmIChjaGVj
a0Z1bmN0aW9uT25seUNhbGxiYWNrKGV4ZWMsIHZhbHVlLCBhY2NlcHRlZFZhbHVlcykpCi0gICAg
ICAgIHJldHVybiBKU0NhbGxiYWNrVHlwZTo6Y3JlYXRlKGFzT2JqZWN0KHZhbHVlKSwgZ2xvYmFs
T2JqZWN0KTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FsbGJh
Y2tGdW5jdGlvbi5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCww
ICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01Db25zdHJ1Y3RvcldpdGhEb2N1
bWVudC5oCShyZXZpc2lvbiAyMTEzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9E
T01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oCShub25leGlzdGVudCkKQEAgLTEsNDkgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotLy8gQ29uc3RydWN0b3JzIHVzaW5nIHRoaXMgYmFzZSBjbGFzcyBk
ZXBlbmQgb24gYmVpbmcgaW4gYSBEb2N1bWVudCBhbmQKLS8vIGNhbiBuZXZlciBiZSB1c2VkIGZy
b20gYSBXb3JrZXJHbG9iYWxTY29wZS4KLWNsYXNzIERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50
IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVj
dG9yT2JqZWN0IEJhc2U7Ci1wdWJsaWM6Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxEb2N1bWVudD4oc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBET01Db25zdHJ1Y3RvcldpdGhE
b2N1bWVudChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQotICAgICAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0KQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihnbG9iYWxPYmplY3Qudm0oKSk7Ci0gICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3Qu
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkpOwotICAgIH0KLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QmluZGluZ3NBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAkocmV2aXNpb24gMjExMzg5KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNyArMjYsNiBAQAogLy8gVGhpcyBhbGwtaW4tb25lIGNwcCBmaWxlIGN1dHMgZG93
biBvbiB0ZW1wbGF0ZSBibG9hdCB0byBhbGxvdyB1cyB0byBidWlsZCBvdXIgV2luZG93cyByZWxl
YXNlIGJ1aWxkLgogCiAjaW5jbHVkZSAiQ2FjaGVkTW9kdWxlU2NyaXB0TG9hZGVyLmNwcCIKLSNp
bmNsdWRlICJDYWxsYmFja0Z1bmN0aW9uLmNwcCIKICNpbmNsdWRlICJET01XcmFwcGVyV29ybGQu
Y3BwIgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5jcHAiCiAjaW5jbHVkZSAiSlNBbmltYXRpb25U
aW1lbGluZUN1c3RvbS5jcHAiCkBAIC00Niw2ICs0NSw5IEBACiAjaW5jbHVkZSAiSlNTUUxTdGF0
ZW1lbnRFcnJvckNhbGxiYWNrQ3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0N1c3RvbVhQYXRoTlNS
ZXNvbHZlci5jcHAiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmNwcCIKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmdTZWN1cml0eS5jcHAiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5jcHAiCisj
aW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAiCiAjaW5jbHVkZSAiSlNET01HbG9i
YWxPYmplY3QuY3BwIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0VGFzay5jcHAiCiAjaW5j
bHVkZSAiSlNET01Qcm9taXNlLmNwcCIKQEAgLTU1LDYgKzU3LDcgQEAKICNpbmNsdWRlICJKU0RP
TVdpbmRvd1Byb3BlcnRpZXMuY3BwIgogI2luY2x1ZGUgIkpTRE9NV2luZG93U2hlbGwuY3BwIgog
I2luY2x1ZGUgIkpTRE9NV3JhcHBlci5jcHAiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUu
Y3BwIgogI2luY2x1ZGUgIkpTRG9jdW1lbnRDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTRG9jdW1l
bnRGcmFnbWVudEN1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNFbGVtZW50Q3VzdG9tLmNwcCIKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAJKHJl
dmlzaW9uIDIxMTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkpTQ3J5cHRvLmgiCiAKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5k
bGluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg+CiAjaW5jbHVkZSA8
cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaD4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQ
YXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9uIDIxMTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsOCArMjgsOCBAQAogCiAjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1
c3RvbS5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cAkocmV2aXNpb24gMjExMzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNDIgKzI0LDE5IEBACiAKICNpbmNsdWRl
ICJDYWNoZWRTY3JpcHQuaCIKICNpbmNsdWRlICJDb21tb25WTS5oIgotI2luY2x1ZGUgIkRPTUNv
bnN0cnVjdG9yV2l0aERvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkhl
YWRlcnMuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25JbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJh
c2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKLSNpbmNsdWRlICJKU0RP
TVByb21pc2UuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgotI2luY2x1ZGUgIkpT
RXhjZXB0aW9uQmFzZS5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSA8
Ynl0ZWNvZGUvQ29kZUJsb2NrLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFj
ay5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg+CiAjaW5j
bHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvckhhbmRsaW5nU2NvcGUuaD4KLSNpbmNsdWRlIDxydW50
aW1lL0Vycm9ySW5zdGFuY2UuaD4KLSNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbi5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNG
dW5jdGlvbi5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVy
TmFtZXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlf
REVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yT2JqZWN0KTsKLVNUQVRJQ19BU1NFUlRfSVNfVFJJ
VklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCk7Ci0KIHZvaWQg
YWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwpAQCAtMTg0LDE3
MCArMTYxLDYgQEAgZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50b09iamVjdChleGVjKSkt
PmludGVybmFsTnVtYmVyKCk7CiB9CiAKLXZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQp
Ci17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBhdXRvKiBleGNlcHRpb24gPSBqc0R5
bmFtaWNEb3duY2FzdDxKU0M6OkV4Y2VwdGlvbio+KHZtLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAg
aWYgKCFleGNlcHRpb24pIHsKLSAgICAgICAgZXhjZXB0aW9uID0gdm0ubGFzdEV4Y2VwdGlvbigp
OwotICAgICAgICBpZiAoIWV4Y2VwdGlvbikKLSAgICAgICAgICAgIGV4Y2VwdGlvbiA9IEpTQzo6
RXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhjZXB0aW9uVmFsdWUsIEpTQzo6RXhjZXB0
aW9uOjpEb05vdENhcHR1cmVTdGFjayk7Ci0gICAgfQotCi0gICAgcmVwb3J0RXhjZXB0aW9uKGV4
ZWMsIGV4Y2VwdGlvbiwgY2FjaGVkU2NyaXB0KTsKLX0KLQotU3RyaW5nIHJldHJpZXZlRXJyb3JN
ZXNzYWdlKEV4ZWNTdGF0ZSYgc3RhdGUsIFZNJiB2bSwgSlNWYWx1ZSBleGNlcHRpb24sIENhdGNo
U2NvcGUmIGNhdGNoU2NvcGUpCi17Ci0gICAgaWYgKGF1dG8qIGV4Y2VwdGlvbkJhc2UgPSB0b0V4
Y2VwdGlvbkJhc2Uodm0sIGV4Y2VwdGlvbikpCi0gICAgICAgIHJldHVybiBleGNlcHRpb25CYXNl
LT50b1N0cmluZygpOwotCi0gICAgLy8gRklYTUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNTA4
Nz4gV2ViIEluc3BlY3RvcjogV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uIHNob3VsZCBub3QgZXZh
bHVhdGUgSmF2YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCi0gICAgLy8gSWYgdGhpcyBpcyBh
IGN1c3RvbSBleGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0IHRvIHRyeSBhbmQg
Z2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGNlcHRpb24uCi0gICAg
U3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoYXV0byogZXJyb3IgPSBqc0R5bmFtaWNEb3du
Y2FzdDxFcnJvckluc3RhbmNlKj4odm0sIGV4Y2VwdGlvbikpCi0gICAgICAgIGVycm9yTWVzc2Fn
ZSA9IGVycm9yLT5zYW5pdGl6ZWRUb1N0cmluZygmc3RhdGUpOwotICAgIGVsc2UKLSAgICAgICAg
ZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0KLSAgICAvLyBX
ZSBuZWVkIHRvIGNsZWFyIGFueSBuZXcgZXhjZXB0aW9uIHRoYXQgbWF5IGJlIHRocm93biBpbiB0
aGUgdG9TdHJpbmcoKSBjYWxsIGFib3ZlLgotICAgIC8vIHJlcG9ydEV4Y2VwdGlvbigpIGlzIG5v
dCBzdXBwb3NlZCB0byBiZSBtYWtpbmcgbmV3IGV4Y2VwdGlvbnMuCi0gICAgY2F0Y2hTY29wZS5j
bGVhckV4Y2VwdGlvbigpOwotICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOwotICAgIHJldHVy
biBlcnJvck1lc3NhZ2U7Ci19Ci0KLXZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQs
IEV4Y2VwdGlvbkRldGFpbHMqIGV4Y2VwdGlvbkRldGFpbHMpCi17Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAg
ICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAg
ICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLCBleGNlcHRpb24pKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZShleGVjLT52
bSgpKTsKLQotICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3Jp
cHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgU2NyaXB0Q2FsbFN0YWNr
OjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKSk7Ci0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKLSAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKLQotICAgIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwotICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0ganNEeW5hbWlj
RG93bmNhc3Q8SlNET01XaW5kb3cqPih2bSwgZ2xvYmFsT2JqZWN0KSkgewotICAgICAgICBpZiAo
IXdpbmRvdy0+d3JhcHBlZCgpLmlzQ3VycmVudGx5RGlzcGxheWVkSW5GcmFtZSgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBsaW5lTnVtYmVyID0gMDsKLSAgICBpbnQg
Y29sdW1uTnVtYmVyID0gMDsKLSAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJMOwotICAgIGlm
IChjb25zdCBTY3JpcHRDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxTdGFjay0+Zmlyc3ROb25O
YXRpdmVDYWxsRnJhbWUoKSkgewotICAgICAgICBsaW5lTnVtYmVyID0gY2FsbEZyYW1lLT5saW5l
TnVtYmVyKCk7Ci0gICAgICAgIGNvbHVtbk51bWJlciA9IGNhbGxGcmFtZS0+Y29sdW1uTnVtYmVy
KCk7Ci0gICAgICAgIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGNhbGxGcmFtZS0+c291cmNlVVJMKCk7
Ci0gICAgfQotCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHJldHJpZXZlRXJyb3JNZXNzYWdl
KCpleGVjLCB2bSwgZXhjZXB0aW9uLT52YWx1ZSgpLCBzY29wZSk7Ci0gICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdsb2JhbE9iamVjdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnJlcG9ydEV4
Y2VwdGlvbihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgZXhjZXB0aW9u
U291cmNlVVJMLCBleGNlcHRpb24sIGNhbGxTdGFjay0+c2l6ZSgpID8gY2FsbFN0YWNrIDogbnVs
bHB0ciwgY2FjaGVkU2NyaXB0KTsKLQotICAgIGlmIChleGNlcHRpb25EZXRhaWxzKSB7Ci0gICAg
ICAgIGV4Y2VwdGlvbkRldGFpbHMtPm1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7Ci0gICAgICAgIGV4
Y2VwdGlvbkRldGFpbHMtPmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICBleGNlcHRp
b25EZXRhaWxzLT5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7Ci0gICAgICAgIGV4Y2VwdGlv
bkRldGFpbHMtPnNvdXJjZVVSTCA9IGV4Y2VwdGlvblNvdXJjZVVSTDsKLSAgICB9Ci19Ci0KLXZv
aWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
Ci0gICAgYXV0byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7Ci0gICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKLSAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKLX0K
LQotc3RhdGljIEpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhj
ZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nKiBtZXNzYWdlID0gbnVsbHB0cikKLXsKLSAgICBp
ZiAoIWVjIHx8IGVjID09IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotCi0gICAgLy8gRklYTUU6IEhhbmRsZSBvdGhlciBXZWJJREwgZXhjZXB0
aW9uIHR5cGVzLgotICAgIGlmIChlYyA9PSBUeXBlRXJyb3IpIHsKLSAgICAgICAgaWYgKCFtZXNz
YWdlIHx8IG1lc3NhZ2UtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVUeXBl
RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZXhlYywgKm1lc3Nh
Z2UpOwotICAgIH0KLQotICAgIGlmIChlYyA9PSBSYW5nZUVycm9yKSB7Ci0gICAgICAgIGlmICgh
bWVzc2FnZSB8fCBtZXNzYWdlLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkJhZCB2YWx1ZSIpKTsKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgKm1lc3NhZ2UpOwotICAgIH0KLQotICAgIGlmIChl
YyA9PSBTdGFja092ZXJmbG93RXJyb3IpCi0gICAgICAgIHJldHVybiBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoZXhlYyk7Ci0KLSAgICAvLyBGSVhNRTogQWxsIGNhbGxlcnMgdG8gY3JlYXRlRE9N
RXhjZXB0aW9uIG5lZWQgdG8gcGFzcyBpbiB0aGUgY29ycmVjdCBnbG9iYWwgb2JqZWN0LgotICAg
IC8vIEZvciBub3csIHdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGUgbGV4aWNhbEdsb2JhbE9iamVj
dC4gV2hpY2ggaXMgd3JvbmcgaW4gY2FzZXMgbGlrZSB0aGlzOgotICAgIC8vIGZyYW1lc1swXS5k
b2N1bWVudC5jcmVhdGVFbGVtZW50KG51bGwsIG51bGwpOyAvLyB0aHJvd3MgYW4gZXhjZXB0aW9u
IHdoaWNoIHNob3VsZCBoYXZlIHRoZSBzdWJmcmFtZSdzIHByb3RvdHlwZXMuCi0gICAgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90
b3R5cGUoZXhlYyk7Ci0KLSAgICBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24o
ZWMpOwotCi0gICAgQ1N0cmluZyBtZXNzYWdlQ1N0cmluZzsKLSAgICBpZiAobWVzc2FnZSkKLSAg
ICAgICAgbWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlLT51dGY4KCk7Ci0gICAgaWYgKG1lc3NhZ2Ug
JiYgIW1lc3NhZ2UtPmlzRW1wdHkoKSkgewotICAgICAgICAvLyBJdCBpcyBzYWZlIHRvIGRvIHRo
aXMgYmVjYXVzZSB0aGUgY2hhciogY29udGVudHMgb2YgdGhlIENTdHJpbmcgYXJlIGNvcGllZCBp
bnRvIGEgbmV3IFdURjo6U3RyaW5nIGJlZm9yZSB0aGUgQ1N0cmluZyBpcyBkZXN0cm95ZWQuCi0g
ICAgICAgIGRlc2NyaXB0aW9uLmRlc2NyaXB0aW9uID0gbWVzc2FnZUNTdHJpbmcuZGF0YSgpOwot
ICAgIH0KLQotICAgIEpTVmFsdWUgZXJyb3JPYmplY3Q7Ci0gICAgc3dpdGNoIChkZXNjcmlwdGlv
bi50eXBlKSB7Ci0gICAgY2FzZSBET01Db3JlRXhjZXB0aW9uVHlwZToKLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLSAgICBjYXNlIElEQkRhdGFiYXNlRXhjZXB0aW9uVHlwZToKLSNlbmRp
ZgotICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBET01Db3Jl
RXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGaWxlRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgRmlsZUV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgU1FMRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmplY3Qg
PSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1FMRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRp
b24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTVkdFeGNlcHRpb25UeXBlOgotICAgICAg
ICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdFeGNlcHRpb246OmNy
ZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFhQYXRoRXhjZXB0
aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
WFBhdGhFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgCi0gICAgQVNTRVJUKGVycm9yT2JqZWN0KTsKLSAgICBhZGRFcnJvckluZm8oZXhl
YywgYXNPYmplY3QoZXJyb3JPYmplY3QpLCB0cnVlKTsKLSAgICByZXR1cm4gZXJyb3JPYmplY3Q7
Ci19Ci0KLUpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0
aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIHJldHVybiBjcmVhdGVE
T01FeGNlcHRpb24oZXhlYywgZWMsICZtZXNzYWdlKTsKLX0KLQotSlNWYWx1ZSBjcmVhdGVET01F
eGNlcHRpb24oRXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQotewotICAg
IHJldHVybiBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBleGNlcHRpb24uY29kZSgpLCBleGNl
cHRpb24ucmVsZWFzZU1lc3NhZ2UoKSk7Ci19Ci0KLXZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uU2xv
d1BhdGgoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUs
IEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKLXsKLSAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0
aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlRE9N
RXhjZXB0aW9uKHN0YXRlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpKTsKLX0KLQogYm9vbCBoYXNJdGVy
YXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CkBAIC0zNjUsNDMgKzE3OCw2IEBAIGJvb2wgaGFz
SXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmIHMKICAgICByZXR1cm4gIWFwcGx5TWV0aG9k
LmlzVW5kZWZpbmVkKCk7CiB9CiAKLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0Fj
Y2Vzc1RvRnJhbWUoRXhlY1N0YXRlJiBzdGF0ZSwgRnJhbWUmIGZyYW1lLCBTdHJpbmcmIG1lc3Nh
Z2UpCi17Ci0gICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1l
KCZzdGF0ZSwgJmZyYW1lLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBtZXNzYWdlID0gZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmNy
b3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0Fj
Y2Vzc1RvRE9NV2luZG93KEV4ZWNTdGF0ZSYgc3RhdGUsIERPTVdpbmRvdyYgZ2xvYmFsT2JqZWN0
LCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxs
b3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIGdsb2JhbE9iamVjdCwgRG9Ob3RSZXBvcnRTZWN1
cml0eUVycm9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgbWVzc2FnZSA9IGdsb2JhbE9i
amVjdC5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRl
KSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJh
bWUoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCFmcmFt
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+
cHJpbnRFcnJvck1lc3NhZ2UobWVzc2FnZSk7Ci19Ci0KLVN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9N
U3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvKQotewotICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xv
YmFsT2JqZWN0LnN0cnVjdHVyZXMoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKLSAgICByZXR1cm4gc3Ry
dWN0dXJlcy5nZXQoY2xhc3NJbmZvKS5nZXQoKTsKLX0KLQotU3RydWN0dXJlKiBjYWNoZURPTVN0
cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCi17Ci0gICAgYXV0byBsb2NrZXIgPSBs
b2NrRHVyaW5nTWFya2luZyhnbG9iYWxPYmplY3Qudm0oKS5oZWFwLCBnbG9iYWxPYmplY3QuZ2NM
b2NrKCkpOwotICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0
LnN0cnVjdHVyZXMobG9ja2VyKTsKLSAgICBBU1NFUlQoIXN0cnVjdHVyZXMuY29udGFpbnMoY2xh
c3NJbmZvKSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4oZ2xvYmFsT2JqZWN0LnZtKCksICZnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSkpLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQogc3RhdGljIGNvbnN0IGludDMyX3Qga01h
eEludDMyID0gMHg3ZmZmZmZmZjsKIHN0YXRpYyBjb25zdCBpbnQzMl90IGtNaW5JbnQzMiA9IC1r
TWF4SW50MzIgLSAxOwogc3RhdGljIGNvbnN0IHVpbnQzMl90IGtNYXhVSW50MzIgPSAweGZmZmZm
ZmZmVTsKQEAgLTcxNSwzMjAgKzQ5MSw0IEBAIHVpbnQ2NF90IHRvVUludDY0KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmEKICAgICByZXR1cm4gbjsKIH0KIAotY2xhc3MgR2V0Q2FsbGVyR2xvYmFsT2Jq
ZWN0RnVuY3RvciB7Ci1wdWJsaWM6Ci0gICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3Rvcigp
ID0gZGVmYXVsdDsKLQotICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX2hhc1NraXBwZWRG
aXJzdEZyYW1lKSB7Ci0gICAgICAgICAgICBtX2hhc1NraXBwZWRGaXJzdEZyYW1lID0gdHJ1ZTsK
LSAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGF1dG8qIGNvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpKQotICAg
ICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh2aXNpdG9yLT5jYWxsZWUoKSk7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogQ2FsbGVlIGlzIG5vdCBhbiBvYmplY3QgaWYgdGhlIGNhbGxlciBp
cyBXZWIgQXNzZW1ibHkuCi0gICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gaGVy
ZS4gV2UgY2FuIHByb2JhYmx5IGdldCB0aGUgZ2xvYmFsIG9iamVjdAotICAgICAgICAgICAgLy8g
ZnJvbSB0aGUgdG9wLW1vc3QgV2FzbSBJbnN0YW5jZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NTcyMQotICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxlZSgp
LT5pc09iamVjdCgpKQotICAgICAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpT
T2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwotICAgIH0KLQotICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdDsgfQot
Ci1wcml2YXRlOgotICAgIG11dGFibGUgYm9vbCBtX2hhc1NraXBwZWRGaXJzdEZyYW1lIHsgZmFs
c2UgfTsKLSAgICBtdXRhYmxlIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdCB7IG51bGxw
dHIgfTsKLX07Ci0KLURPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yIGl0ZXI7Ci0gICAgZXhlYy0+aXRl
cmF0ZShpdGVyKTsKLSAgICByZXR1cm4gaXRlci5nbG9iYWxPYmplY3QoKSA/IGFzSlNET01XaW5k
b3coaXRlci5nbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKSA6IGZpcnN0RE9NV2luZG93KGV4ZWMp
OwotfQotCi1ET01XaW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+d3Jh
cHBlZCgpOwotfQotCi1ET01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkp
LT53cmFwcGVkKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5BY2Nlc3NEb2N1bWVudChK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERvY3VtZW50KiB0YXJnZXREb2N1bWVudCwgU2VjdXJpdHlS
ZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlm
ICghdGFyZ2V0RG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIERPTVdpbmRv
dyYgYWN0aXZlID0gYWN0aXZlRE9NV2luZG93KHN0YXRlKTsKLQotICAgIGlmIChhY3RpdmUuZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5jYW5BY2Nlc3ModGFyZ2V0RG9jdW1lbnQtPnNlY3Vy
aXR5T3JpZ2luKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHN3aXRjaCAocmVwb3J0
aW5nT3B0aW9uKSB7Ci0gICAgY2FzZSBUaHJvd1NlY3VyaXR5RXJyb3I6Ci0gICAgICAgIHRocm93
U2VjdXJpdHlFcnJvcigqc3RhdGUsIHNjb3BlLCB0YXJnZXREb2N1bWVudC0+ZG9tV2luZG93KCkt
PmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIExvZ1NlY3VyaXR5RXJyb3I6Ci0gICAgICAgIHByaW50RXJyb3JNZXNzYWdlRm9y
RnJhbWUodGFyZ2V0RG9jdW1lbnQtPmZyYW1lKCksIHRhcmdldERvY3VtZW50LT5kb21XaW5kb3co
KS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yOgotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRE9NV2luZG93
JiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKLXsKLSAg
ICByZXR1cm4gY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC5kb2N1bWVudCgpLCByZXBv
cnRpbmdPcHRpb24pOwotfQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nl
c3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRnJhbWUqIHRhcmdldCwgU2VjdXJpdHlS
ZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQotewotICAgIHJldHVybiB0YXJnZXQgJiYg
Y2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC0+ZG9jdW1lbnQoKSwgcmVwb3J0aW5nT3B0
aW9uKTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9Ob2Rl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgTm9kZSogdGFyZ2V0KQotewotICAgIHJldHVybiAhdGFy
Z2V0IHx8IGNhbkFjY2Vzc0RvY3VtZW50KCZzdGF0ZSwgJnRhcmdldC0+ZG9jdW1lbnQoKSwgTG9n
U2VjdXJpdHlFcnJvcik7Ci19Ci0gICAgCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgdGhyb3dUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigm
c3RhdGUsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwotfQotCi1zdGF0aWMgdm9pZCBhcHBlbmRBcmd1
bWVudE11c3RCZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4
LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIkFy
Z3VtZW50ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGFyZ3VtZW50SW5kZXggKyAxKTsK
LSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAoJyIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGFy
Z3VtZW50TmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCInKSB0byAiKTsKLSAgICBp
ZiAoIWZ1bmN0aW9uTmFtZSkgewotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoInRoZSAi
KTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiIGNvbnN0cnVjdG9yIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
YnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcu
Jyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZ1bmN0aW9uTmFtZSk7Ci0gICAgfQotICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG11c3QgYmUgIik7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFs
dWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAg
ICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGlj
YWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBjb250ZXh0
LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9y
LCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICciLCBh
dHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VOYW1lLCAiIG9iamVjdC4iKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLX0KLSAgICAKLXZv
aWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAg
ICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGlj
YWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBjb250ZXh0
LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9y
LCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gc2V0IHByb3BlcnR5ICciLCBhdHRy
aWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VOYW1lLCAiIG9iamVjdC4iKSk7Ci19
Ci0KLXZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7
Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZz
dGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpKTsKLX0KLQotdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVy
cm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3Qg
Y2hhciogbWVzc2FnZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICBT
dHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUs
IHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUiwgJm1l
c3NhZ2VTdHJpbmcpKTsKLX0KLQotdm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVzc2Fn
ZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICBTdHJpbmcgbWVzc2Fn
ZVN0cmluZyhtZXNzYWdlKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVh
dGVET01FeGNlcHRpb24oJnN0YXRlLCBJTlZBTElEX1NUQVRFX0VSUiwgJm1lc3NhZ2VTdHJpbmcp
KTsKLX0KLQotdm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU0VDVVJJVFlfRVJSLCBtZXNzYWdlKSk7Ci19
Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3Vt
ZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25J
bnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVj
dGVkVmFsdWVzKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBhcHBlbmRBcmd1
bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9u
SW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
Im9uZSBvZjogIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRWYWx1ZXMpOwotICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7
Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25l
ZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7Ci0gICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJ
bmRleCwgYXJndW1lbnROYW1lLCBpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOwotICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYSBmdW5jdGlvbiIpOwotICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5j
b2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNo
YXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKLXsKLSAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwg
YXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0
aW9uTmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJhbiBpbnN0YW5jZSBvZiAiKTsK
LSAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFR5cGUpOwotICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgdGhy
b3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKQotewotICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlM
aXRlcmFsKCJJbnZhbGlkIEFycmF5IGVsZW1lbnQgdHlwZSIpKTsKLX0KLQotdm9pZCB0aHJvd0F0
dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKLXsKLSAgICB0aHJvd1R5cGVFcnJvcihzdGF0
ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0
ZU5hbWUsICIgYXR0cmlidXRlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIiwgZXhwZWN0ZWRUeXBl
KSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNo
YXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25zdCBjaGFyKiBl
eHBlY3RlZFR5cGUpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiTWVtYmVyICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGRpY3Rpb25hcnlO
YW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnLicpOwotICAgIGJ1aWxkZXIuYXBwZW5kKG1lbWJl
ck5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGlzIHJlcXVpcmVkIGFuZCBtdXN0
IGJlIGFuIGluc3RhbmNlIG9mICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVHlwZSk7
Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0
cmluZygpKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9yU2NyaXB0
RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKQotewotICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoJnN0YXRlLCBzY29wZSwgY3JlYXRlUmVmZXJlbmNlRXJyb3Io
JnN0YXRlLCBtYWtlU3RyaW5nKGludGVyZmFjZU5hbWUsICIgY29uc3RydWN0b3IgYXNzb2NpYXRl
ZCBleGVjdXRpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpKSk7Ci19Ci0KLXZvaWQgdGhyb3dT
ZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpCi17Ci0gICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
IlZhbHVlIGlzIG5vdCBhIHNlcXVlbmNlIikpOwotfQotCi12b2lkIHRocm93Tm9uRmluaXRlVHlw
ZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJUaGUgcHJvdmlkZWQg
dmFsdWUgaXMgbm9uLWZpbml0ZSIpKTsKLX0KLQotU3RyaW5nIG1ha2VHZXR0ZXJUeXBlRXJyb3JN
ZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLics
IGF0dHJpYnV0ZU5hbWUsICIgZ2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9m
ICIsIGludGVyZmFjZU5hbWUpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93R2V0dGVy
VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsK
LSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBtYWtlR2V0dGVyVHlw
ZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7Ci19Ci0KLUpTQzo6
RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRy
aWJ1dGVOYW1lKQotewotICAgIHJldHVybiBjcmVhdGVSZWplY3RlZFByb21pc2VXaXRoVHlwZUVy
cm9yKHN0YXRlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRy
aWJ1dGVOYW1lKSk7Ci19Ci0KLWJvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewotICAgIHRocm93VHlwZUVycm9yKHN0
YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcuJywgYXR0cmli
dXRlTmFtZSwgIiBzZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBpbnN0YW5jZXMgb2YgIiwgaW50
ZXJmYWNlTmFtZSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIG1ha2VUaGlzVHlw
ZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNhbiBvbmx5IGNhbGwgIiwgaW50
ZXJmYWNlTmFtZSwgJy4nLCBmdW5jdGlvbk5hbWUsICIgb24gaW5zdGFuY2VzIG9mICIsIGludGVy
ZmFjZU5hbWUpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFj
ZU5hbWUsIGZ1bmN0aW9uTmFtZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFBy
b21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmIHByb21pc2UsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCi17Ci0gICAgcHJvbWlz
ZS5yZWplY3QoVHlwZUVycm9yLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFt
ZSwgbWV0aG9kTmFtZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29u
c3QgY2hhciogbWV0aG9kTmFtZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlUmVqZWN0ZWRQcm9taXNl
V2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5h
bWUsIG1ldGhvZE5hbWUpKTsKLX0KLQotdm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3Vt
ZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEpT
Qzo6SlNGdW5jdGlvbiYgZnVuY3Rpb24pCi17Ci0gICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsK
LSAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YSgmZnVuY3Rpb24s
IGNhbGxEYXRhKTsKLSAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotCi0g
ICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKLSAgICBKU0M6OmNhbGwoJnN0
YXRlLCAmZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJnRoaXNPYmplY3QsIGFyZ3VtZW50
cyk7Ci19Ci0KLXZvaWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCo+
KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsKLX0KLQotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFRocm93VHlwZUVycm9yKEV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyBvcGVyYXRvciIpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKLX0KLQotQ2FsbFR5cGUgRE9N
Q29uc3RydWN0b3JPYmplY3Q6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0
YSkKLXsKLSAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsVGhyb3dUeXBlRXJyb3I7
Ci0gICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0OwotfQotCi12b2lkIHRocm93RE9NU3ludGF4RXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNZTlRBWF9FUlIpKTsKLX0KLQotdm9p
ZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBEQVRB
X0NMT05FX0VSUikpOwotfQotCi12b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VSVCghc2NvcGUu
ZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURP
TUV4Y2VwdGlvbigmc3RhdGUsIElOREVYX1NJWkVfRVJSKSk7Ci19Ci0KLXZvaWQgdGhyb3dUeXBl
TWlzbWF0Y2hFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRp
b24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgVFlQRV9NSVNNQVRD
SF9FUlIpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDIxMTM4OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MywyNSArMjMsMTQgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJET01XcmFwcGVyV29y
bGQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3Iu
aCIKLSNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTRE9NV3JhcHBl
ci5oIgotI2luY2x1ZGUgIkpTRHluYW1pY0Rvd25jYXN0LmgiCi0jaW5jbHVkZSAiU2NyaXB0V3Jh
cHBhYmxlLmgiCi0jaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oIgotI2luY2x1ZGUg
IldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNh
Y2hlLmgiCiAjaW5jbHVkZSA8Y3N0ZGRlZj4KICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1dl
YWsuaD4KLSNpbmNsdWRlIDxoZWFwL1dlYWtJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9B
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNp
bmNsdWRlIDxydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNBcnJheS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQ2VsbElu
bGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oPgpAQCAtNDksOCAr
MzgsNiBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CiAjaW5jbHVkZSA8cnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50
aW1lL1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Xcml0ZUJhcnJpZXIuaD4KICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KQEAgLTY2LDE0
MCArNTMsMTAgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBDYWNoZWRTY3JpcHQ7Ci1jbGFzcyBEZWZlcnJlZFByb21pc2U7Ci1jbGFzcyBET01XaW5k
b3c7Ci1jbGFzcyBGcmFtZTsKIGNsYXNzIFVSTDsKLWNsYXNzIE5vZGU7Ci0KLXN0cnVjdCBFeGNl
cHRpb25EZXRhaWxzIHsKLSAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICBpbnQgbGluZU51bWJlciB7
IDAgfTsKLSAgICBpbnQgY29sdW1uTnVtYmVyIHsgMCB9OwotICAgIFN0cmluZyBzb3VyY2VVUkw7
Ci19OwotCi0vLyBCYXNlIGNsYXNzIGZvciBhbGwgY29uc3RydWN0b3Igb2JqZWN0cyBpbiB0aGUg
SlNDIGJpbmRpbmdzLgotY2xhc3MgRE9NQ29uc3RydWN0b3JPYmplY3QgOiBwdWJsaWMgSlNET01P
YmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNET01PYmplY3QgQmFzZTsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpJbXBsZW1lbnRzRGVmYXVsdEhhc0lu
c3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGE7Ci0gICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkpTVmFsdWUpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgRE9NQ29uc3RydWN0b3JPYmpl
Y3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotCi0gICAgc3RhdGljIFN0
cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNDOjpDYWxsVHlw
ZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBKU0M6OkNhbGxEYXRhJik7Ci19OwotCi1jbGFzcyBET01D
b25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7
Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotCi1wcm90
ZWN0ZWQ6Ci0gICAgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7Ci0KLSAgICBKU0M6OkpTRnVuY3Rpb24qIGlu
aXRpYWxpemVGdW5jdGlvbigpOwotICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6
Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKLQotcHJpdmF0ZToKLSAgICBKU0M6OldyaXRlQmFycmll
cjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6ZUZ1bmN0aW9uOwotfTsKLQotRE9NV2luZG93
JiBjYWxsZXJET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKLURPTVdpbmRvdyYgYWN0aXZlRE9N
V2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci1ET01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEpTQzo6
RXhlY1N0YXRlKik7Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVwb3J0
RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lk
IHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIq
IGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotCi12b2lkIHRocm93
QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSwgY29uc3Qg
Y2hhciogZXhwZWN0ZWRUeXBlKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgdGhyb3dTZXR0ZXJUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLQotdm9pZCB0aHJvd0FycmF5
RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9p
ZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7
Ci12b2lkIHRocm93RE9NU3ludGF4RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmKTsgLy8gTm90IHRoZSBzYW1lIGFzIGEgSmF2YVNjcmlwdCBzeW50YXggZXJyb3IuCi12b2lk
IHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsK
LXZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCB0aHJvd05v
bkZpbml0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9p
ZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
Jik7Ci12b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKLXZvaWQgdGhyb3dTZWN1cml0eUVycm9y
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6
RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIq
IGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVzKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFy
KiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUg
dGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYs
IHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3Qg
Y2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNv
bnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1Zh
bHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5
TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhy
b3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSk7
Ci0KLVN0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZh
Y2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLVN0cmluZyBtYWtlVGhpc1R5cGVF
cnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmli
dXRlTmFtZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFy
KiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLVdFQkNPUkVfRVhQ
T1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lKTsKLQotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSBy
ZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9F
WFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3Io
RGVmZXJyZWRQcm9taXNlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
b3BlcmF0aW9uTmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVj
dFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpOwotCi1XRUJDT1JFX0VYUE9S
VCBKU0M6OlN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0
JiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJl
KiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6U3RydWN0dXJlKiwg
Y29uc3QgSlNDOjpDbGFzc0luZm8qKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNz
PiBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3RydWN0dXJlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9i
amVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSog
ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSopOwotdGVtcGxhdGU8dHlw
ZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTT2JqZWN0KiBnZXRET01Qcm90b3R5cGUoSlNDOjpW
TSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLQotdm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVu
dEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEpT
Qzo6SlNGdW5jdGlvbiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNGdW5jdGlv
biYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotCi1KU0M6OldlYWtI
YW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZm
ZXIqKTsKLXZvaWQqIHdyYXBwZXJLZXkoSlNDOjpBcnJheUJ1ZmZlciopOwotCi1KU0RPTU9iamVj
dCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKik7Ci1KU0RP
TU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBTY3JpcHRX
cmFwcGFibGUqKTsKLUpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKik7Ci0KLWJvb2wgc2V0SW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqLCBKU0M6Oldl
YWtIYW5kbGVPd25lciopOwotYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJX
b3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9NT2JqZWN0KiB3cmFwcGVyLCBKU0M6OldlYWtI
YW5kbGVPd25lciogd3JhcHBlck93bmVyKTsKLWJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3
cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKTsKLQotYm9vbCBjbGVh
cklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0
Kik7Ci1ib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBTY3Jp
cHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3JhcHBlcik7Ci1ib29sIGNsZWFySW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKiwgSlNDOjpKU0Fy
cmF5QnVmZmVyKiB3cmFwcGVyKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6
SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MmKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0Q2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBSZWY8RE9NQ2xhc3M+JiBvYmplY3Qp
IHsgcmV0dXJuIGdldENhY2hlZFdyYXBwZXIod29ybGQsIG9iamVjdC5nZXQoKSk7IH0KLXRlbXBs
YXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IHZvaWQgY2FjaGVX
cmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNzKiwgV3JhcHBlckNsYXNzKik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiB2b2lkIHVuY2Fj
aGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNzKiwgV3JhcHBlckNsYXNzKik7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gYXV0byBjcmVhdGVXcmFwcGVy
KEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZTsKLXRlbXBsYXRl
PHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01H
bG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6
aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNWYWx1ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBET01DbGFzcyYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBK
U0NsYXNzJiBjYXN0VGhpc1ZhbHVlKEpTQzo6RXhlY1N0YXRlJik7CiAKIHZvaWQgYWRkSW1wdXJl
UHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLWNvbnN0IEpTQzo6SGFzaFRhYmxlJiBn
ZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKEpTQzo6Vk0mLCBjb25zdCBKU0M6Okhhc2hUYWJsZSYg
c3RhdGljVGFibGUpOwotCi1TdHJpbmcgcmV0cmlldmVFcnJvck1lc3NhZ2UoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiwgSlNDOjpDYXRjaFNjb3BlJik7
Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogPSBudWxscHRyKTsKLVdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRp
b24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0ciwgRXhjZXB0aW9uRGV0YWlscyogPSBudWxscHRy
KTsKLXZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwotCi1KU0M6
OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uJiYp
OwotSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEV4Y2Vw
dGlvbkNvZGUsIGNvbnN0IFN0cmluZyYpOwotCi0vLyBDb252ZXJ0IGEgRE9NIGltcGxlbWVudGF0
aW9uIGV4Y2VwdGlvbiBpbnRvIGEgSmF2YVNjcmlwdCBleGNlcHRpb24gaW4gdGhlIGV4ZWN1dGlv
biBzdGF0ZS4KLXZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9wYWdhdGVF
eGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2Vw
dGlvbiYmKTsKLQogSlNDOjpKU1ZhbHVlIGpzU3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
VVJMJik7IC8vIGVtcHR5IGlmIHRoZSBVUkwgaXMgbnVsbAogCiBKU0M6OkpTVmFsdWUganNTdHJp
bmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyB1bmRlZmlu
ZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCkBAIC0yMTAsNyArNjcsNiBAQCBKU0M6OkpTVmFsdWUg
anNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4CiBKU0M6OkpTVmFsdWUganNPd25lZFN0cmluZ09y
TnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwogCiBTdHJpbmcgcHJvcGVydHlO
YW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwotCiBBdG9taWNTdHJpbmcgcHJvcGVydHlO
YW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwogCiBXRUJDT1JFX0VYUE9SVCBT
dHJpbmcgaWRlbnRpZmllclRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYpOwpAQCAtMjU0LDkgKzExMCw2IEBAIEpTQzo6SlNWYWx1ZSBqc0RhdGUoSlND
OjpFeGVjU3RhdGUqLCBkb3UKIC8vIE5hTiBpZiB0aGUgdmFsdWUgY2FuJ3QgYmUgY29udmVydGVk
IHRvIGEgZGF0ZS4KIGRvdWJsZSB2YWx1ZVRvRGF0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSk7CiAKLS8vIFZhbGlkYXRlcyB0aGF0IHRoZSBwYXNzZWQgb2JqZWN0IGlzIGEgc2VxdWVu
Y2UgdHlwZSBwZXIgc2VjdGlvbiA0LjEuMTMgb2YgdGhlIFdlYklETCBzcGVjLgotSlNDOjpKU09i
amVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCB1bnNpZ25l
ZCYgbGVuZ3RoKTsKLQogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXImKTsKIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Jik7
CiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
SlNDOjpBcnJheUJ1ZmZlciopOwpAQCAtMjY3LDEwICsxMjAsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgVmVjdG9y
PFJlZlB0cjxUPj4mKTsKIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJik7CiAKLUpTQzo6SlNWYWx1ZSB0
b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNW
YWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUJik7Ci1KU0M6OkpTVmFs
dWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJik7Ci0KIFJlZlB0cjxKU0M6OkFycmF5
QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlND
OjpKU1ZhbHVlKTsKIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDhB
cnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRv
UG9zc2libHlTaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwpAQCAtMjkz
LDI4NSArMTQyLDE2IEBAIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hhcmVkVWludDMK
IFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZs
b2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgSlNUeXBlPiBWZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSXRlcmF0
b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi1lbnVtIFNlY3VyaXR5
UmVwb3J0aW5nT3B0aW9uIHsgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yLCBMb2dTZWN1cml0eUVy
cm9yLCBUaHJvd1NlY3VyaXR5RXJyb3IgfTsKLW5hbWVzcGFjZSBCaW5kaW5nU2VjdXJpdHkgewot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhl
Y1N0YXRlJiwgVCYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlG
b3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgVCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEV4
Y2VwdGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2Vw
dGlvbk9yPFQqPiYmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNlcHRpb25PcjxUKj4g
Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb25PcjxUJj4mJik7
Ci0gICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKiwg
RE9NV2luZG93JiwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1cml0eUVycm9yKTsK
LSAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUmLCBE
T01XaW5kb3cmLCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NU
b0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiwgRnJhbWUqLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9
IExvZ1NlY3VyaXR5RXJyb3IpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpT
Qzo6RXhlY1N0YXRlJiwgRnJhbWUmLCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIGJvb2wgc2hvdWxk
QWxsb3dBY2Nlc3NUb05vZGUoSlNDOjpFeGVjU3RhdGUmLCBOb2RlKik7Ci19OwotCi12b2lkIHBy
aW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwot
CiBTdHJpbmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwogQXRvbWlj
U3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKIAot
dGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNW
YWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci0KLQotZW51bSBjbGFzcyBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvciB7IFRocm93LCBSZXR1cm5FYXJseSwgUmVqZWN0UHJvbWlzZSwg
QXNzZXJ0IH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+Ci1zdHJ1Y3QgQmluZGluZ0Nh
bGxlciB7Ci0gICAgdXNpbmcgQXR0cmlidXRlU2V0dGVyRnVuY3Rpb24gPSBib29sKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDbGFzcyYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAg
dXNpbmcgQXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gPSBKU0M6OkpTVmFsdWUoSlNDOjpFeGVjU3Rh
dGUmLCBKU0NsYXNzJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAgdXNpbmcgT3BlcmF0aW9uQ2Fs
bGVyRnVuY3Rpb24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDbGFz
cyosIEpTQzo6VGhyb3dTY29wZSYpOwotICAgIHVzaW5nIFByb21pc2VPcGVyYXRpb25DYWxsZXJG
dW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwg
UmVmPERlZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0KLSAgICBzdGF0aWMg
SlNDbGFzcyogY2FzdEZvckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwotICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yT3BlcmF0aW9uKEpTQzo6RXhlY1N0
YXRlJik7Ci0KLSAgICB0ZW1wbGF0ZTxQcm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gb3Bl
cmF0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlPgotICAgIHN0YXRpYyBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGNhbGxQcm9taXNlT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBjYXN0Rm9yT3BlcmF0aW9uKCpzdGF0ZSk7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdyAh
PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0ICYmIFVOTElLRUxZKCF0aGlzT2JqZWN0
KSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IocHJv
bWlzZS5nZXQoKSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOwot
ICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygpKTsKLSAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJl
bmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNPYmplY3QuCi0gICAgICAgIHJldHVybiBvcGVyYXRpb25D
YWxsZXIoc3RhdGUsIHRoaXNPYmplY3QsIFdURk1vdmUocHJvbWlzZSksIHRocm93U2NvcGUpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNh
bGxlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJy
b3JCZWhhdmlvcjo6VGhyb3c+Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbE9w
ZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUp
Ci0gICAgewotICAgICAgICBBU1NFUlQoc3RhdGUpOwotICAgICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAgICAgYXV0byogdGhpc09i
amVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsKLSAgICAgICAgaWYgKHNob3VsZFRocm93
ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5MSUtFTFkoIXRoaXNPYmpl
Y3QpKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVo
YXZpb3I6OlRocm93KQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3Io
KnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9u
TmFtZSk7Ci0gICAgICAgICAgICAvLyBGb3IgY3VzdG9tIHByb21pc2UtcmV0dXJuaW5nIG9wZXJh
dGlvbnMKLSAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3Io
KnN0YXRlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9uTmFtZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QpOwotICAgICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIEpTQ2xhc3M6OmluZm8oKSk7Ci0gICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgdG8gdXNl
IHJlZmVyZW5jZXMgZm9yIHN0YXRlIGFuZCB0aGlzT2JqZWN0LgotICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uQ2FsbGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTxBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiBzZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93Pgot
ICAgIHN0YXRpYyBib29sIHNldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0
ZSk7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUt
PnZtKCkpOwotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3Rh
dGUsIHRoaXNWYWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCi0gICAg
ICAgICAgICByZXR1cm4gKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpU
aHJvdykgPyB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6
OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKSA6IGZhbHNlOwotICAgICAgICByZXR1
cm4gc2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIEpTQzo6SlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIHRocm93U2NvcGUpOwotICAgIH0KK1dFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSXRl
cmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogCi0gICAgdGVtcGxh
dGU8QXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
ciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KLSAgICBzdGF0
aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBhdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWSghdGhpc09iamVjdCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5j
bGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOwotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlKQotICAgICAgICAgICAgICAg
IHJldHVybiByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6
OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBK
U0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzVW5kZWZpbmVkKCkpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVj
dCwgdGhyb3dTY29wZSkpOwotICAgIH0KLX07Cit0ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9u
LCBpbnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlv
bkdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKIAotLy8gRXhjZXB0aW9uT3IgaGFuZGxpbmcuCi12b2lkIHByb3BhZ2F0ZUV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPHZvaWQ+
JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+
JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4
Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpOwogCiAvLyBJbmxpbmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0
ZSBkZWZpbml0aW9ucy4KIAotaW5saW5lIEpTQzo6U3RydWN0dXJlKiBET01Db25zdHJ1Y3Rvck9i
amVjdDo6Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi17Ci0gICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotfQotCi1pbmxp
bmUgRE9NQ29uc3RydWN0b3JPYmplY3Q6OkRPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgOiBK
U0RPTU9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0KLQotaW5saW5lIFN0cmlu
ZyBET01Db25zdHJ1Y3Rvck9iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KikKLXsKLSAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJGdW5jdGlvbiIpOwotfQotCi1pbmxpbmUgRE9NQ29uc3Ry
dWN0b3JKU0J1aWx0aW5PYmplY3Q6OkRPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0g
ICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0K
LQotaW5saW5lIEpTQzo6SlNGdW5jdGlvbiogRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6
OmluaXRpYWxpemVGdW5jdGlvbigpCi17Ci0gICAgcmV0dXJuIG1faW5pdGlhbGl6ZUZ1bmN0aW9u
LmdldCgpOwotfQotCi1pbmxpbmUgdm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6
c2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mIHZtLCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0
aW9uKQotewotICAgIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLnNldCh2bSwgdGhpcywgJmZ1bmN0aW9u
KTsKLX0KLQotaW5saW5lIEpTRE9NR2xvYmFsT2JqZWN0KiBkZXByZWNhdGVkR2xvYmFsT2JqZWN0
Rm9yUHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIEZJWE1FOiBDYWxs
ZXJzIHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzaW5nIHRoZSBnbG9iYWwgb2JqZWN0Ci0g
ICAgLy8gZnJvbSB3aGljaCB0aGUgb2JqZWN0IGlzIGJlaW5nIGNyZWF0ZWQsIGluc3RlYWQgb2Yg
YXNzdW1pbmcgdGhlIGxleGljYWwgb25lLgotICAgIC8vIGUuZy4gc3ViZnJhbWUuZG9jdW1lbnQu
Ym9keSBzaG91bGQgdXNlIHRoZSBzdWJmcmFtZSdzIGdsb2JhbCBvYmplY3QsIG5vdCB0aGUgbGV4
aWNhbCBvbmUuCi0gICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBl
ckNsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBpZiAoSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdldENhY2hlZERPTVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIFdy
YXBwZXJDbGFzczo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAgICByZXR1
cm4gY2FjaGVET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVN0
cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVQcm90b3R5cGUo
dm0sICZnbG9iYWxPYmplY3QpKSwgV3JhcHBlckNsYXNzOjppbmZvKCkpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRl
ZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAvLyBGSVhNRTog
VGhpcyBmdW5jdGlvbiBpcyB3cm9uZy4gSXQgdXNlcyB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdCBm
b3IgY3JlYXRpbmcgdGhlIHByb3RvdHlwZSBzdHJ1Y3R1cmUuCi0gICAgcmV0dXJuIGdldERPTVN0
cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMtPnZtKCksICpkZXByZWNhdGVkR2xvYmFsT2JqZWN0
Rm9yUHJvdG90eXBlKGV4ZWMpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNz
PiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTQzo6anNDYXN0
PEpTQzo6SlNPYmplY3QqPihhc09iamVjdChnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPih2
bSwgKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSktPnN0b3Jl
ZFByb3RvdHlwZSgpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQotewotICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQ2xhc3M6OmNy
ZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNDbGFzcz4oZ2xvYmFsT2JqZWN0LnZtKCksIGdsb2JhbE9i
amVjdCksICZnbG9iYWxPYmplY3QpOwotICAgIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1l
bnRzKHN0YXRlLCAqb2JqZWN0LCBpbml0aWFsaXplRnVuY3Rpb24pOwotICAgIHJldHVybiBKU0M6
OkpTVmFsdWU6OmVuY29kZShvYmplY3QpOwotfQotCi1pbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3du
ZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVy
KikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
Kj4od29ybGQudm0oKS5tX3R5cGVkQXJyYXlDb250cm9sbGVyLmdldCgpKS0+d3JhcHBlck93bmVy
KCk7Ci19Ci0KLWlubGluZSB2b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9i
amVjdCkKLXsKLSAgICByZXR1cm4gZG9tT2JqZWN0OwotfQotCi1pbmxpbmUgSlNET01PYmplY3Qq
IGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCopIHsgcmV0dXJu
IG51bGxwdHI7IH0KLWlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0KiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqKSB7IHJl
dHVybiBmYWxzZTsgfQotaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdy
YXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCopIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLWlu
bGluZSBKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQm
IHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCkKLXsKLSAgICBpZiAoIXdvcmxkLmlz
Tm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBkb21PYmplY3Qt
PndyYXBwZXIoKTsKLX0KLQotaW5saW5lIEpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBidWZm
ZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICByZXR1cm4gYnVmZmVyLT5tX3dyYXBwZXIuZ2V0KCk7Ci19Ci0KLWlubGluZSBib29s
IHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3Jh
cHBhYmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVP
d25lciogd3JhcHBlck93bmVyKQotewotICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGRvbU9iamVjdC0+c2V0V3JhcHBlcih3cmFwcGVyLCB3cmFw
cGVyT3duZXIsICZ3b3JsZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIHNl
dElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1
ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hh
bmRsZU93bmVyKiB3cmFwcGVyT3duZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0LT5tX3dyYXBwZXIgPSBKU0M6Oldl
YWs8SlNDOjpKU0FycmF5QnVmZmVyPih3cmFwcGVyLCB3cmFwcGVyT3duZXIsICZ3b3JsZCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNE
T01PYmplY3QqIHdyYXBwZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0LT5jbGVhcldyYXBwZXIod3JhcHBlcik7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpT
Qzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlcikKLXsKLSAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB3ZWFrQ2xlYXIoZG9tT2JqZWN0LT5tX3dyYXBw
ZXIsIHdyYXBwZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBE
T01DbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKLXsKLSAgICBpZiAoYXV0byogd3Jh
cHBlciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsICZkb21PYmplY3QpKQotICAgICAg
ICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gd29ybGQubV93cmFwcGVycy5nZXQod3JhcHBl
cktleSgmZG9tT2JqZWN0KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBl
bmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29y
bGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCi17
Ci0gICAgSlNDOjpXZWFrSGFuZGxlT3duZXIqIG93bmVyID0gd3JhcHBlck93bmVyKHdvcmxkLCBk
b21PYmplY3QpOwotICAgIGlmIChzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmpl
Y3QsIHdyYXBwZXIsIG93bmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdlYWtBZGQod29ybGQu
bV93cmFwcGVycywgd3JhcHBlcktleShkb21PYmplY3QpLCBKU0M6OldlYWs8SlNDOjpKU09iamVj
dD4od3JhcHBlciwgb3duZXIsICZ3b3JsZCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01D
bGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCB1bmNhY2hlV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3Mq
IHdyYXBwZXIpCi17Ci0gICAgaWYgKGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9t
T2JqZWN0LCB3cmFwcGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdlYWtSZW1vdmUod29ybGQu
bV93cmFwcGVycywgd3JhcHBlcktleShkb21PYmplY3QpLCB3cmFwcGVyKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBw
ZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAt
PiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1
ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBl
ckNsYXNzKj46OnR5cGUKLXsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSB0eXBlbmFtZSBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICBB
U1NFUlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3Qp
KTsKLSAgICBhdXRvKiBkb21PYmplY3RQdHIgPSBkb21PYmplY3QucHRyKCk7Ci0gICAgYXV0byog
d3JhcHBlciA9IFdyYXBwZXJDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xh
c3M+KGdsb2JhbE9iamVjdC0+dm0oKSwgKmdsb2JhbE9iamVjdCksIGdsb2JhbE9iamVjdCwgV1RG
TW92ZShkb21PYmplY3QpKTsKLSAgICBjYWNoZVdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgp
LCBkb21PYmplY3RQdHIsIHdyYXBwZXIpOwotICAgIHJldHVybiB3cmFwcGVyOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gaW5saW5lIGF1dG8gY3JlYXRlV3Jh
cHBlcihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VD4mJiBkb21PYmplY3Qp
IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2
YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3Jh
cHBlckNsYXNzKj46OnR5cGUKLXsKLSAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxET01DbGFzcz4o
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8RE9NQ2xhc3M+KFdURk1vdmUoZG9t
T2JqZWN0KSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKLXsKLSAgICBpZiAoYXV0byogd3JhcHBl
ciA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKQot
ICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBSZWY8RE9NQ2xhc3M+KGRvbU9iamVjdCkpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUpCi17Ci0gICAgYXV0byB0aGlzVmFsdWUgPSBzdGF0ZS50aGlzVmFsdWUo
KTsKLSAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0NsYXNzKj4oc3Rh
dGUudm0oKSwgdGhpc1ZhbHVlKTsKLSAgICBBU1NFUlQoY2FzdGVkVGhpcyk7Ci0gICAgcmV0dXJu
ICpjYXN0ZWRUaGlzOwotfQotCiBpbmxpbmUgaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rYXkpCiB7CiAgICAg
ZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwpAQCAtNTc5LDMyICsxNTksNiBA
QCBpbmxpbmUgaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWCiAgICAgcmV0dXJuIEpT
Qzo6dG9JbnQzMihudW1iZXIpOwogfQogCi0vLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9i
amVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwg
c3BlYy4KLWlubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUm
IGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQmIGxlbmd0aCkKLXsKLSAgICBKU0M6
OlZNJiB2bSA9IGV4ZWMudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsK
LSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMs
IHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgSlNDOjpKU1Zh
bHVlIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoJmV4ZWMsIGV4ZWMucHJvcGVydHlOYW1lcygp
Lmxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0KLSAg
ICBpZiAobGVuZ3RoVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICB0aHJvd1Nl
cXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQotCi0gICAgbGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9VSW50MzIoJmV4ZWMpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotCi0gICAgcmV0dXJuIG9iamVjdDsK
LX0KLQogaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlciYgYnVmZmVyKQog
ewogICAgIGlmIChhdXRvIHJlc3VsdCA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53
b3JsZCgpLCBidWZmZXIpKQpAQCAtNjc2LDIxICsyMzAsNiBAQCBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqCiAgICAgcmV0dXJuIEpTQzo6U3ltYm9sOjpjcmVhdGUoZXhl
Yy0+dm0oKSwgcHJpdmF0ZU5hbWUudWlkKCkpOwogfQogCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVj
dCgmc3RhdGUsIHZhbHVlLCBmYWxzZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwgdG9KUygmc3RhdGUsICZnbG9iYWxP
YmplY3QsIHZhbHVlKSwgZmFsc2UpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVy
YXRvckVuZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUl0ZXJh
dG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwgSlNDOjpqc1VuZGVmaW5lZCgpLCB0cnVlKTsKLX0KLQog
aW5saW5lIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5
QnVmZmVyVmlldyhKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8q
IHdyYXBwZXIgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Kj4odm0s
IHZhbHVlKTsKQEAgLTcyNywzMCArMjY2LDYgQEAgaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFy
cmF5PiB0b1Vuc2hhcgogaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJl
ZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0sIHZh
bHVlKTsgfQogaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZsb2F0
NjRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRv
VW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVlKTsg
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1Q+IGlubGluZSBWZWN0b3I8UmVm
PFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotewotICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkp
IHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAg
ICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIFZlY3RvcjxSZWY8VD4+IHJlc3VsdDsKLSAgICBm
b3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmIChqc1ZhbHVl
LmluaGVyaXRzKHZtLCBKU1Q6OmluZm8oKSkpIHsKLSAgICAgICAgICAgIGF1dG8qIG9iamVjdCA9
IEpTVDo6dG9XcmFwcGVkKHZtLCBqc1ZhbHVlKTsKLSAgICAgICAgICAgIEFTU0VSVChvYmplY3Qp
OwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqb2JqZWN0KTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcigqc3RhdGUsIHNjb3BlKTsKLSAg
ICB9KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBpbmxpbmUgU3RyaW5nIHByb3BlcnR5TmFt
ZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBBU1NFUlQo
IXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKTsKQEAgLTc2Nyw1OSArMjgyLDQgQEAgdGVtcGxhdGU8
SlNDOjpOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdAogICAgIHJldHVybiBKU0M6OkpTVmFsdWU6
OmVuY29kZShKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIGxlbmd0aCwgcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSwgbmF0aXZl
RnVuY3Rpb24pKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0
aW9uJiYgZXhjZXB0aW9uKQotewotICAgIGlmICh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKQotICAg
ICAgICByZXR1cm47Ci0gICAgcHJvcGFnYXRlRXhjZXB0aW9uU2xvd1BhdGgoc3RhdGUsIHRocm93
U2NvcGUsIFdURk1vdmUoZXhjZXB0aW9uKSk7Ci19Ci0KLWlubGluZSB2b2lkIHByb3BhZ2F0ZUV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSwgRXhjZXB0aW9uT3I8dm9pZD4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUu
aGFzRXhjZXB0aW9uKCkpKQotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93
U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwg
RXhjZXB0aW9uT3I8VD4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhj
ZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29w
ZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0
dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9u
T3I8VD4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkp
KSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUu
cmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNl
UmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBCaW5k
aW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
VCYgbm9kZSkKLXsKLSAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsICZu
b2RlKSA/ICZub2RlIDogbnVsbHB0cjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBUKiBub2RlKQotewotICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShz
dGF0ZSwgbm9kZSkgPyBub2RlIDogbnVsbHB0cjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIEV4Y2VwdGlvbk9yPFQqPiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JO
b2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uT3I8VCo+JiYgdmFsdWUpCi17Ci0g
ICAgaWYgKHZhbHVlLmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gdmFsdWUucmVsZWFz
ZUV4Y2VwdGlvbigpOwotICAgIHJldHVybiBjaGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgdmFs
dWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb25PcjxUJj4mJiB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5yZWxlYXNlRXhj
ZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGNoZWNrU2VjdXJpdHlGb3JOb2RlKHN0YXRlLCB2YWx1ZS5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ0NhbGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ0NhbGxlci5oCShy
ZXZpc2lvbiAyMTEzNTMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5oOjIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Z0NhbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODI1IEBACisvKgorICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMDYsIDIwMDgtMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcg
PHNhbUB3ZWJraXQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgRXJpY3Nzb24gQUIuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIE1pY2hhZWwgUHJ1ZXR0
IDxtaWNoYWVsQDY4ay5vcmc+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgorI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgorI2luY2x1ZGUgIkpTRE9NR2xv
YmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNEeW5h
bWljRG93bmNhc3QuaCIKKyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKKyNpbmNsdWRlICJT
Y3JpcHRXcmFwcGFibGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyLmgiCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVz
Lmg+CisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFw
L1dlYWsuaD4KKyNpbmNsdWRlIDxoZWFwL1dlYWtJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ2Vs
bElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+
CisjaW5jbHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvU3RydWN0dXJlSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGlu
ZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9Xcml0ZUJhcnJpZXIuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKKy8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgZmlsZSBhIGxvdCBlYXNp
ZXIgdG8gcmVhZCBieSBwdXR0aW5nIGFsbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXQgdGhlIHRv
cCwKKy8vIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucyBiZWxvdywgZXZlbiBmb3IgdGVtcGxhdGUg
YW5kIGlubGluZSBmdW5jdGlvbnMuCisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgSlNGdW5jdGlv
bjsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRTY3JpcHQ7CitjbGFz
cyBEZWZlcnJlZFByb21pc2U7CitjbGFzcyBET01XaW5kb3c7CitjbGFzcyBGcmFtZTsKK2NsYXNz
IFVSTDsKK2NsYXNzIE5vZGU7CisKK3N0cnVjdCBFeGNlcHRpb25EZXRhaWxzIHsKKyAgICBTdHJp
bmcgbWVzc2FnZTsKKyAgICBpbnQgbGluZU51bWJlciB7IDAgfTsKKyAgICBpbnQgY29sdW1uTnVt
YmVyIHsgMCB9OworICAgIFN0cmluZyBzb3VyY2VVUkw7Cit9OworCisvLyBCYXNlIGNsYXNzIGZv
ciBhbGwgY29uc3RydWN0b3Igb2JqZWN0cyBpbiB0aGUgSlNDIGJpbmRpbmdzLgorY2xhc3MgRE9N
Q29uc3RydWN0b3JPYmplY3QgOiBwdWJsaWMgSlNET01PYmplY3QgeworcHVibGljOgorICAgIHR5
cGVkZWYgSlNET01PYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3Rh
bmNlIHwgSlNDOjpJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91
bGRDYWxsR2V0Q2FsbERhdGE7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworCitw
cm90ZWN0ZWQ6CisgICAgRE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYpOworCisgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNP
YmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBK
U0M6OkNhbGxEYXRhJik7Cit9OworCitjbGFzcyBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVj
dCA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBE
T01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgRE9NQ29uc3RydWN0
b3JKU0J1aWx0aW5PYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwor
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJik7CisKKyAgICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOworICAg
IHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsK
KworcHJpdmF0ZToKKyAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1faW5p
dGlhbGl6ZUZ1bmN0aW9uOworfTsKKworRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coSlNDOjpF
eGVjU3RhdGUqKTsKK0RPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7
CitET01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CisKK1dFQkNPUkVf
RVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0
cmlidXRlTmFtZSk7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIGF0dHJpYnV0ZU5hbWUpOworCit2b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogYXR0cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK1dF
QkNPUkVfRVhQT1JUIGJvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBh
dHRyaWJ1dGVOYW1lKTsKKwordm9pZCB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93RE9NU3ludGF4RXJy
b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsgLy8gTm90IHRoZSBzYW1lIGFz
IGEgSmF2YVNjcmlwdCBzeW50YXggZXJyb3IuCit2b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dJbnZhbGlkU3RhdGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpOworV0VCQ09SRV9FWFBPUlQgdm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9y
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93Tm90U3VwcG9y
dGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBt
ZXNzYWdlKTsKK3ZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQg
dGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYp
Owordm9pZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJik7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1
bWVudE11c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVu
c2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hh
ciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0
IGNoYXIqIGV4cGVjdGVkVmFsdWVzKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVu
dE11c3RCZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1
bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNo
YXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKK1dF
QkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgs
IGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7
CitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJU
eXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBt
ZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0
ZWRUeXBlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSk7CisKK1N0cmluZyBtYWtlR2V0dGVyVHlw
ZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRy
aWJ1dGVOYW1lKTsKK1N0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CisKK1dFQkNPUkVfRVhQ
T1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBhdHRyaWJ1dGVOYW1lKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUg
dGhyb3dUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKKworV0VC
Q09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5
cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1
ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7CitXRUJDT1JF
X0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IG9wZXJhdGlvbk5hbWUpOworCitXRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogZ2V0Q2Fj
aGVkRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpDbGFzc0luZm8q
KTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RP
TUdsb2JhbE9iamVjdCYsIEpTQzo6U3RydWN0dXJlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZ2V0RE9N
U3RydWN0dXJlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5h
bWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVy
ZShKU0M6OkV4ZWNTdGF0ZSopOwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6
OkpTT2JqZWN0KiBnZXRET01Qcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTsKKwordm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRp
bihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBK
U0RPTUdsb2JhbE9iamVjdCYpOworCitKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVy
KERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKK3ZvaWQqIHdyYXBwZXJLZXko
SlNDOjpBcnJheUJ1ZmZlciopOworCitKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQmLCB2b2lkKik7CitKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVk
V3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqKTsKK0pTQzo6SlNBcnJh
eUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFy
cmF5QnVmZmVyKik7CisKK2Jvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29y
bGQmLCB2b2lkKiwgSlNET01PYmplY3QqLCBKU0M6OldlYWtIYW5kbGVPd25lciopOworYm9vbCBz
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSos
IEpTRE9NT2JqZWN0KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVy
KTsKK2Jvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFy
cmF5QnVmZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVP
d25lciogd3JhcHBlck93bmVyKTsKKworYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9N
V3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0Kik7Citib29sIGNsZWFySW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVj
dCogd3JhcHBlcik7Citib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29y
bGQmLCBKU0M6OkFycmF5QnVmZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNs
YXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29y
bGQmIHdvcmxkLCBSZWY8RE9NQ2xhc3M+JiBvYmplY3QpIHsgcmV0dXJuIGdldENhY2hlZFdyYXBw
ZXIod29ybGQsIG9iamVjdC5nZXQoKSk7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0
eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IHZvaWQgY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYs
IERPTUNsYXNzKiwgV3JhcHBlckNsYXNzKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywg
dHlwZW5hbWUgV3JhcHBlckNsYXNzPiB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYsIERPTUNsYXNzKiwgV3JhcHBlckNsYXNzKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFz
cywgdHlwZW5hbWUgVD4gYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVm
PFQ+JiYpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxET01DbGFzcywg
VD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+
OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBl
bmFtZSBUPiBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJikg
LT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZh
bHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFw
cGVyQ2xhc3MqPjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNW
YWx1ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBET01DbGFzcyYp
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0NsYXNzJiBjYXN0VGhpc1ZhbHVlKEpT
Qzo6RXhlY1N0YXRlJik7CisKK3ZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3Ry
aW5nJik7CisKK2NvbnN0IEpTQzo6SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRh
KEpTQzo6Vk0mLCBjb25zdCBKU0M6Okhhc2hUYWJsZSYgc3RhdGljVGFibGUpOworCitTdHJpbmcg
cmV0cmlldmVFcnJvck1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlZNJiwgSlNDOjpKU1Zh
bHVlIGV4Y2VwdGlvbiwgSlNDOjpDYXRjaFNjb3BlJik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJl
cG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENh
Y2hlZFNjcmlwdCogPSBudWxscHRyKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0
aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVs
bHB0ciwgRXhjZXB0aW9uRGV0YWlscyogPSBudWxscHRyKTsKK3ZvaWQgcmVwb3J0Q3VycmVudEV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworCitKU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0
aW9uKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uJiYpOworSlNDOjpKU1ZhbHVlIGNyZWF0ZURP
TUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUsIGNvbnN0IFN0cmluZyYp
OworCisvLyBDb252ZXJ0IGEgRE9NIGltcGxlbWVudGF0aW9uIGV4Y2VwdGlvbiBpbnRvIGEgSmF2
YVNjcmlwdCBleGNlcHRpb24gaW4gdGhlIGV4ZWN1dGlvbiBzdGF0ZS4KK3ZvaWQgcHJvcGFnYXRl
RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYp
OworV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKKworSlNDOjpKU1ZhbHVl
IGpzU3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgVVJMJik7IC8vIGVtcHR5IGlmIHRoZSBV
UkwgaXMgbnVsbAorCitKU0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxs
CitKU0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IFVSTCYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIFVSTCBpcyBudWxsCisKKy8vIFNlZSBKYXZhU2Ny
aXB0Q29yZSBmb3IgZXhwbGFuYXRpb246IFNob3VsZCBiZSB1c2VkIGZvciBhbnkgc3RyaW5nIHRo
YXQgaXMgYWxyZWFkeSBvd25lZCBieSBhbm90aGVyCisvLyBvYmplY3QsIHRvIGxldCB0aGUgZW5n
aW5lIGtub3cgdGhhdCBjb2xsZWN0aW5nIHRoZSBKU1N0cmluZyB3cmFwcGVyIGlzIHVubGlrZWx5
IHRvIHNhdmUgbWVtb3J5LgorSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKKworU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5n
KEpTQzo6UHJvcGVydHlOYW1lKTsKKworQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWlj
U3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKKworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkZW50
aWZpZXJUb0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
KTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvVVNW
U3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CitXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7CisKK2ludDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUsIEpTQzo6RXhl
Y1N0YXRlKiwgYm9vbCYgb2theSk7CisKKy8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbnZl
cnQgdmFsdWVzIHRvIGludGVnZXJzIGFzIHBlciB0aGUgV2ViSURMIHNwZWNpZmljYXRpb24uCisv
LyBUaGUgY29udmVyc2lvbiBmYWlscyBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0
byBhIG51bWJlciBvciwgaWYgRW5mb3JjZVJhbmdlIGlzIHNwZWNpZmllZCwKKy8vIHRoZSB2YWx1
ZSBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlciB0eXBlLgor
CitXRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OEVuZm9yY2VS
YW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQx
Nl90IHRvSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
V0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyRW5mb3Jj
ZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVp
bnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKK1dFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NEVu
Zm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK1dFQkNPUkVfRVhQ
T1JUIGludDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitX
RUJDT1JFX0VYUE9SVCB1aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZDbGFtcChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkNs
YW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDMy
X3QgdG9JbnQzMkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVf
RVhQT1JUIHVpbnQzMl90IHRvVUludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOworV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRDbGFtcChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK1dFQkNPUkVfRVhQT1JUIGludDhfdCB0
b0ludDgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWlu
dDhfdCB0b1VJbnQ4KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQ
T1JUIGludDE2X3QgdG9JbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJD
T1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOworCitKU0M6OkpTVmFsdWUganNEYXRlKEpTQzo6RXhlY1N0YXRl
KiwgZG91YmxlIHZhbHVlKTsKKworLy8gTmFOIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0
ZWQgdG8gYSBkYXRlLgorZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlKTsKKworLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1
ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCitKU0M6OkpT
T2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIHVuc2ln
bmVkJiBsZW5ndGgpOworCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciYpOworSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcm
KTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBKU0M6OkFycmF5QnVmZmVyKik7CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyopOwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFJlZjxUPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWZQdHI8VD4mJik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgVmVjdG9yPFQ+Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mKTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJik7CisKK0pT
Qzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVj
dCYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9K
U0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUJik7
CitKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJik7CisKK1JlZlB0
cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhK
U0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJs
eVNoYXJlZEludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6Oklu
dDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOworUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXko
SlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3Np
Ymx5U2hhcmVkVWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6
OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJs
eVNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6
VWludDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0
MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkZsb2F0NjRBcnJh
eT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsK
KworUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3
KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hh
cmVkSW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50MTZB
cnJheT4gdG9VbnNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQ
dHI8SlNDOjpJbnQzMkFycmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRv
VW5zaGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0
cjxKU0M6OlVpbnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5
KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vu
c2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6
RmxvYXQ2NEFycmF5PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1R5cGU+IFZlY3RvcjxSZWY8
VD4+IHRvUmVmTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VC
Q09SRV9FWFBPUlQgYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7CisKK2VudW0gU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9ydFNl
Y3VyaXR5RXJyb3IsIExvZ1NlY3VyaXR5RXJyb3IsIFRocm93U2VjdXJpdHlFcnJvciB9OworbmFt
ZXNwYWNlIEJpbmRpbmdTZWN1cml0eSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hl
Y2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gVCogY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUKik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JO
b2RlKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uT3I8VCo+JiYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IEV4Y2VwdGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNT
dGF0ZSYsIEV4Y2VwdGlvbk9yPFQmPiYmKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9E
T01XaW5kb3coSlNDOjpFeGVjU3RhdGUqLCBET01XaW5kb3cmLCBTZWN1cml0eVJlcG9ydGluZ09w
dGlvbiA9IExvZ1NlY3VyaXR5RXJyb3IpOworICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RP
TVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSYsIERPTVdpbmRvdyYsIFN0cmluZyYgbWVzc2FnZSk7Cisg
ICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSos
IFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7CisgICAgYm9vbCBz
aG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUmLCBGcmFtZSYsIFN0cmluZyYg
bWVzc2FnZSk7CisgICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0
ZSYsIE5vZGUqKTsKK307CisKK3ZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSos
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKK1N0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhK
U0M6OlByb3BlcnR5TmFtZSk7CitBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJp
bmcoSlNDOjpQcm9wZXJ0eU5hbWUpOworCit0ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uLCBp
bnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdl
dHRlcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKKworCitlbnVtIGNsYXNzIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHsgVGhyb3csIFJl
dHVybkVhcmx5LCBSZWplY3RQcm9taXNlLCBBc3NlcnQgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
SlNDbGFzcz4KK3N0cnVjdCBCaW5kaW5nQ2FsbGVyIHsKKyAgICB1c2luZyBBdHRyaWJ1dGVTZXR0
ZXJGdW5jdGlvbiA9IGJvb2woSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICB1c2luZyBBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiA9
IEpTQzo6SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OlRocm93U2NvcGUm
KTsKKyAgICB1c2luZyBPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFs
dWUoSlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNp
bmcgUHJvbWlzZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRo
cm93U2NvcGUmKTsKKworICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yQXR0cmlidXRlKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisgICAgc3RhdGljIEpTQ2xhc3MqIGNh
c3RGb3JPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUmKTsKKworICAgIHRlbXBsYXRlPFByb21pc2VP
cGVyYXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21p
c2U+CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbFByb21pc2VPcGVyYXRpb24o
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNv
bnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhdGUpOwor
ICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgp
KTsKKyAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsK
KyAgICAgICAgaWYgKHNob3VsZFRocm93ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3Nl
cnQgJiYgVU5MSUtFTFkoIXRoaXNPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdFBy
b21pc2VXaXRoVGhpc1R5cGVFcnJvcihwcm9taXNlLmdldCgpLCBKU0NsYXNzOjppbmZvKCktPmNs
YXNzTmFtZSwgb3BlcmF0aW9uTmFtZSk7CisgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKKyAg
ICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZv
KCkpOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdl
bmVyYXRlZCBjb2RlIHRvIHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4K
KyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhpc09iamVjdCwgV1RGTW92
ZShwcm9taXNlKSwgdGhyb3dTY29wZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8T3BlcmF0aW9u
Q2FsbGVyRnVuY3Rpb24gb3BlcmF0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBz
aG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0aWMg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxsT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
Y29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7
CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZt
KCkpOworICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3RhdGUp
OworICAgICAgICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFz
c2VydCAmJiBVTkxJS0VMWSghdGhpc09iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRU
aHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6Omlu
Zm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25OYW1lKTsKKyAgICAgICAgICAgIC8vIEZvciBjdXN0
b20gcHJvbWlzZS1yZXR1cm5pbmcgb3BlcmF0aW9ucworICAgICAgICAgICAgcmV0dXJuIHJlamVj
dFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NO
YW1lLCBvcGVyYXRpb25OYW1lKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQodGhpc09iamVj
dCk7CisgICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFz
czo6aW5mbygpKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmlu
ZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNP
YmplY3QuCisgICAgICAgIHJldHVybiBvcGVyYXRpb25DYWxsZXIoc3RhdGUsIHRoaXNPYmplY3Qs
IHRocm93U2NvcGUpOworICAgIH0KKworICAgIHRlbXBsYXRlPEF0dHJpYnV0ZVNldHRlckZ1bmN0
aW9uIHNldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+CisgICAgc3RhdGljIGJvb2wgc2V0QXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBjYXN0Rm9yQXR0cmlidXRlKCpzdGF0ZSwgdGhpc1ZhbHVlKTsKKyAgICAgICAgaWYgKFVO
TElLRUxZKCF0aGlzT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiAoc2hvdWxkVGhyb3cgPT0g
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93KSA/IHRocm93U2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5h
bWUpIDogZmFsc2U7CisgICAgICAgIHJldHVybiBzZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwg
SlNDOjpKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdGhyb3dTY29wZSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8QXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJv
dz4KKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBhdHRyaWJ1dGUoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgY2hhciogYXR0
cmlidXRlTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91
bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFz
czo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOworICAgICAgICAgICAgaWYgKHNo
b3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlKQorICAg
ICAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcigqc3Rh
dGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAg
ICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzVW5kZWZpbmVkKCkpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIoKnN0YXRl
LCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSkpOworICAgIH0KK307CisKKy8vIEV4Y2VwdGlvbk9y
IGhhbmRsaW5nLgordm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBFeGNlcHRpb25Pcjx2b2lkPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBK
U0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9i
YWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKTsKKwor
Ly8gSW5saW5lIGZ1bmN0aW9ucyBhbmQgdGVtcGxhdGUgZGVmaW5pdGlvbnMuCisKK2lubGluZSBK
U0M6OlN0cnVjdHVyZSogRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQoreworICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworaW5saW5lIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpE
T01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIDogSlNET01PYmplY3Qoc3RydWN0dXJlLCBnbG9i
YWxPYmplY3QpCit7Cit9CisKK2lubGluZSBTdHJpbmcgRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNs
YXNzTmFtZShjb25zdCBKU09iamVjdCopCit7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRnVu
Y3Rpb24iKTsKK30KKworaW5saW5lIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0OjpET01D
b25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3Qo
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9CisKK2lubGluZSBKU0M6OkpTRnVuY3Rpb24q
IERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojppbml0aWFsaXplRnVuY3Rpb24oKQorewor
ICAgIHJldHVybiBtX2luaXRpYWxpemVGdW5jdGlvbi5nZXQoKTsKK30KKworaW5saW5lIHZvaWQg
RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6
OlZNJiB2bSwgSlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBtX2luaXRpYWxpemVG
dW5jdGlvbi5zZXQodm0sIHRoaXMsICZmdW5jdGlvbik7Cit9CisKK2lubGluZSBKU0RPTUdsb2Jh
bE9iamVjdCogZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICAvLyBGSVhNRTogQ2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIHNob3Vs
ZCBiZSB1c2luZyB0aGUgZ2xvYmFsIG9iamVjdAorICAgIC8vIGZyb20gd2hpY2ggdGhlIG9iamVj
dCBpcyBiZWluZyBjcmVhdGVkLCBpbnN0ZWFkIG9mIGFzc3VtaW5nIHRoZSBsZXhpY2FsIG9uZS4K
KyAgICAvLyBlLmcuIHN1YmZyYW1lLmRvY3VtZW50LmJvZHkgc2hvdWxkIHVzZSB0aGUgc3ViZnJh
bWUncyBnbG9iYWwgb2JqZWN0LCBub3QgdGhlIGxleGljYWwgb25lLgorICAgIHJldHVybiBKU0M6
OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3RydWN0
dXJlKiBnZXRET01TdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCit7CisgICAgaWYgKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYWNo
ZWRET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmluZm8oKSkpCisgICAg
ICAgIHJldHVybiBzdHJ1Y3R1cmU7CisgICAgcmV0dXJuIGNhY2hlRE9NU3RydWN0dXJlKGdsb2Jh
bE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3Qs
IFdyYXBwZXJDbGFzczo6Y3JlYXRlUHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSksIFdyYXBw
ZXJDbGFzczo6aW5mbygpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBp
bmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgd3JvbmcuIEl0
IHVzZXMgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QgZm9yIGNyZWF0aW5nIHRoZSBwcm90b3R5cGUg
c3RydWN0dXJlLgorICAgIHJldHVybiBnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihleGVj
LT52bSgpLCAqZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdl
dERPTVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQoreworICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oYXNPYmplY3Qo
Z2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFzcz4odm0sICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGdsb2JhbE9iamVjdCkpLT5zdG9yZWRQcm90b3R5cGUoKSkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVK
U0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxp
emVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBKU0M6
OkpTT2JqZWN0KiBvYmplY3QgPSBKU0NsYXNzOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpTQ2xh
c3M+KGdsb2JhbE9iamVjdC52bSgpLCBnbG9iYWxPYmplY3QpLCAmZ2xvYmFsT2JqZWN0KTsKKyAg
ICBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhzdGF0ZSwgKm9iamVjdCwgaW5pdGlh
bGl6ZUZ1bmN0aW9uKTsKKyAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsK
K30KKworaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBl
cldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciopCit7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcio+KHdvcmxkLnZtKCkubV90eXBlZEFycmF5
Q29udHJvbGxlci5nZXQoKSktPndyYXBwZXJPd25lcigpOworfQorCitpbmxpbmUgdm9pZCogd3Jh
cHBlcktleShKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QpCit7CisgICAgcmV0dXJuIGRvbU9i
amVjdDsKK30KKworaW5saW5lIEpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYsIHZvaWQqKSB7IHJldHVybiBudWxscHRyOyB9CitpbmxpbmUgYm9vbCBz
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVj
dCosIEpTQzo6V2Vha0hhbmRsZU93bmVyKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29s
IGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01P
YmplY3QqKSB7IHJldHVybiBmYWxzZTsgfQorCitpbmxpbmUgSlNET01PYmplY3QqIGdldElubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBk
b21PYmplY3QpCit7CisgICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICByZXR1cm4gZG9tT2JqZWN0LT53cmFwcGVyKCk7Cit9CisKK2lubGluZSBK
U0M6OkpTQXJyYXlCdWZmZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghd29ybGQuaXNO
b3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGJ1ZmZlci0+bV93
cmFwcGVyLmdldCgpOworfQorCitpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTU9i
amVjdCogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcikKK3sKKyAg
ICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb21P
YmplY3QtPnNldFdyYXBwZXIod3JhcHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQpOworICAgIHJl
dHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdy
YXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpKU0Fy
cmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKQor
eworICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGRvbU9iamVjdC0+bV93cmFwcGVyID0gSlNDOjpXZWFrPEpTQzo6SlNBcnJheUJ1ZmZlcj4od3Jh
cHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxp
bmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwg
U2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyKQoreworICAg
IGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvbU9i
amVjdC0+Y2xlYXJXcmFwcGVyKHdyYXBwZXIpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxp
bmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwg
SlNDOjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIp
Cit7CisgICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgd2Vha0NsZWFyKGRvbU9iamVjdC0+bV93cmFwcGVyLCB3cmFwcGVyKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2Jq
ZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzJiBk
b21PYmplY3QpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNoZWRXcmFw
cGVyKHdvcmxkLCAmZG9tT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0
dXJuIHdvcmxkLm1fd3JhcHBlcnMuZ2V0KHdyYXBwZXJLZXkoJmRvbU9iamVjdCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUg
dm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9i
amVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQoreworICAgIEpTQzo6V2Vha0hhbmRsZU93bmVy
KiBvd25lciA9IHdyYXBwZXJPd25lcih3b3JsZCwgZG9tT2JqZWN0KTsKKyAgICBpZiAoc2V0SW5s
aW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyLCBvd25lcikpCisgICAg
ICAgIHJldHVybjsKKyAgICB3ZWFrQWRkKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9t
T2JqZWN0KSwgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+KHdyYXBwZXIsIG93bmVyLCAmd29ybGQp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFz
cz4gaW5saW5lIHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9N
Q2xhc3MqIGRvbU9iamVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQoreworICAgIGlmIChjbGVh
cklubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCisgICAgICAg
IHJldHVybjsKKyAgICB3ZWFrUmVtb3ZlKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9t
T2JqZWN0KSwgd3JhcHBlcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBl
bmFtZSBUPiBpbmxpbmUgYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFJlZjxUPiYmIGRvbU9iamVjdCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCit7CisgICAgdXNp
bmcgV3JhcHBlckNsYXNzID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERP
TUNsYXNzPjo6V3JhcHBlckNsYXNzOworCisgICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVyKGds
b2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0KSk7CisgICAgYXV0byogZG9tT2JqZWN0UHRy
ID0gZG9tT2JqZWN0LnB0cigpOworICAgIGF1dG8qIHdyYXBwZXIgPSBXcmFwcGVyQ2xhc3M6OmNy
ZWF0ZShnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihnbG9iYWxPYmplY3QtPnZtKCksICpn
bG9iYWxPYmplY3QpLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoZG9tT2JqZWN0KSk7CisgICAgY2Fj
aGVXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0UHRyLCB3cmFwcGVyKTsK
KyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5
cGVuYW1lIFQ+IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
Zjwhc3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCit7CisgICAg
cmV0dXJuIGNyZWF0ZVdyYXBwZXI8RE9NQ2xhc3M+KGdsb2JhbE9iamVjdCwgc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PERPTUNsYXNzPihXVEZNb3ZlKGRvbU9iamVjdCkpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERPTUNsYXNzJiBkb21P
YmplY3QpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2Jh
bE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7Cisg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgUmVmPERPTUNs
YXNzPihkb21PYmplY3QpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5l
IEpTQ2xhc3MmIGNhc3RUaGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQoreworICAgIGF1
dG8gdGhpc1ZhbHVlID0gc3RhdGUudGhpc1ZhbHVlKCk7CisgICAgYXV0byBjYXN0ZWRUaGlzID0g
anNEeW5hbWljRG93bmNhc3Q8SlNDbGFzcyo+KHN0YXRlLnZtKCksIHRoaXNWYWx1ZSk7CisgICAg
QVNTRVJUKGNhc3RlZFRoaXMpOworICAgIHJldHVybiAqY2FzdGVkVGhpczsKK30KKworaW5saW5l
IGludDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBib29sJiBva2F5KQoreworICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051
bWJlcihleGVjKTsKKyAgICBva2F5ID0gc3RkOjppc2Zpbml0ZShudW1iZXIpOworICAgIHJldHVy
biBKU0M6OnRvSW50MzIobnVtYmVyKTsKK30KKworLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3Nl
ZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2Vi
SURMIHNwZWMuCitpbmxpbmUgSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0
YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpCit7CisgICAg
SlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0
KCk7CisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihl
eGVjLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEpTQzo6
SlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwor
CisgICAgaWYgKGxlbmd0aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgdGhy
b3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIGxlbmd0aCA9IGxlbmd0aFZhbHVlLnRvVUludDMyKCZleGVjKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKworICAgIHJldHVybiBvYmpl
Y3Q7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXImIGJ1ZmZl
cikKK3sKKyAgICBpZiAoYXV0byByZXN1bHQgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVj
dC0+d29ybGQoKSwgYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIC8vIFRo
ZSBKU0FycmF5QnVmZmVyOjpjcmVhdGUgZnVuY3Rpb24gd2lsbCByZWdpc3RlciB0aGUgd3JhcHBl
ciBpbiBmaW5pc2hDcmVhdGlvbi4KKyAgICByZXR1cm4gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVh
dGUoc3RhdGUtPnZtKCksIGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYnVmZmVy
LnNoYXJpbmdNb2RlKCkpLCAmYnVmZmVyKTsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkFycmF5QnVmZmVyVmlldyYgdmlldykKK3sKKyAgICByZXR1cm4gdmlldy53cmFwKHN0
YXRlLCBnbG9iYWxPYmplY3QpOworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFy
cmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVsbCgpOworICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICpidWZm
ZXIpOworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3
KiB2aWV3KQoreworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7
CisgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKnZpZXcpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIHB0cikKK3sK
KyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+JiYgcHRy
KQoreworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0
b3I8VD4mIHZlY3RvcikKK3sKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkpT
QXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iu
c2l6ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCB2ZWN0b3JbaV0pKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpK
U1ZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mIHZl
Y3RvcikKK3sKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkpTQXJyYXkqIGFy
cmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3Jb
aV0uZ2V0KCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1Zh
bHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBK
U0M6OlByaXZhdGVOYW1lJiBwcml2YXRlTmFtZSkKK3sKKyAgICByZXR1cm4gSlNDOjpTeW1ib2w6
OmNyZWF0ZShleGVjLT52bSgpLCBwcml2YXRlTmFtZS51aWQoKSk7Cit9CisKK2lubGluZSBKU0M6
OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9y
UmVzdWx0T2JqZWN0KCZzdGF0ZSwgdmFsdWUsIGZhbHNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB0b0pTKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUpLCBmYWxzZSk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFs
dWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKK3sKKyAgICByZXR1cm4g
Y3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCBKU0M6OmpzVW5kZWZpbmVkKCksIHRy
dWUpOworfQorCitpbmxpbmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5
U2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7
CisgICAgYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0PEpTQzo6SlNBcnJheUJ1ZmZl
clZpZXcqPih2bSwgdmFsdWUpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgcmV0dXJuIHdyYXBwZXItPnBvc3NpYmx5U2hhcmVkSW1wbCgpOworfQorCitp
bmxpbmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJW
aWV3KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byByZXN1bHQg
PSB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KHZtLCB2YWx1ZSk7CisgICAgaWYgKCFy
ZXN1bHQgfHwgcmVzdWx0LT5pc1NoYXJlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bv
c3NpYmx5U2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsg
cmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDhBZGFw
dG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3Nz
aWJseVNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFw
dG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3Nz
aWJseVNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFw
dG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3Nz
aWJseVNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFw
dG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+
IHRvUG9zc2libHlTaGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpVaW50OENsYW1wZWRBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpT
Qzo6VWludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiB2bSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVU
eXBlZFZpZXc8SlNDOjpVaW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRy
PEpTQzo6VWludDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRp
dmVUeXBlZFZpZXc8SlNDOjpVaW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVm
UHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJl
ZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Citpbmxp
bmUgUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJs
eVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9
CisKK2lubGluZSBSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlND
OjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0
aXZlVHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQ
dHI8SlNDOjpJbnQxNkFycmF5PiB0b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQz
MkFycmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFk
YXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Vu
c2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNoYXJl
ZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0
b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNo
YXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJu
IEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQz
MkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9V
bnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0K
K2lubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXko
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVk
TmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGlu
ZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpW
TSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZl
VHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgSlNUPiBpbmxpbmUgVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRp
dmVBcnJheShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIHRo
cm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICBWZWN0b3I8UmVmPFQ+PiByZXN1bHQ7CisgICAgZm9yRWFjaEluSXRlcmFi
bGUoJnN0YXRlLCB2YWx1ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoanNWYWx1ZS5pbmhlcml0cyh2bSwg
SlNUOjppbmZvKCkpKSB7CisgICAgICAgICAgICBhdXRvKiBvYmplY3QgPSBKU1Q6OnRvV3JhcHBl
ZCh2bSwganNWYWx1ZSk7CisgICAgICAgICAgICBBU1NFUlQob2JqZWN0KTsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoKm9iamVjdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhy
b3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoKnN0YXRlLCBzY29wZSk7CisgICAgfSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworaW5saW5lIFN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6
OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUu
aXNTeW1ib2woKSk7CisgICAgcmV0dXJuIHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFt
ZS51aWQoKSA6IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7Cit9CisKK2lubGluZSBBdG9taWNT
dHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQoreworICAgIHJldHVybiBBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lLnVpZCgpID8g
cHJvcGVydHlOYW1lLnVpZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Cit9CisKK3Rl
bXBsYXRlPEpTQzo6TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpT
Qzo6RW5jb2RlZEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5j
dGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVu
Z3RoLCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpLCBuYXRpdmVGdW5jdGlvbikpOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCit7
CisgICAgaWYgKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBw
cm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChzdGF0ZSwgdGhyb3dTY29wZSwgV1RGTW92ZShleGNl
cHRpb24pKTsKK30KKworaW5saW5lIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25Pcjx2b2lk
PiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpCisg
ICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFz
ZUV4Y2VwdGlvbigpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZh
bHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAg
ICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhj
ZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICByZXR1cm4gdG9KUygm
c3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQorewor
ICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFn
YXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkp
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRl
ZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tT
ZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBUJiBub2RlKQoreworICAgIHJl
dHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgJm5vZGUpID8gJm5vZGUgOiBudWxs
cHRyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1NlY3VyaXR5
OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQqIG5vZGUpCit7
CisgICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBub2RlKSA/IG5vZGUg
OiBudWxscHRyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRXhjZXB0aW9uT3I8
VCo+IEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBFeGNlcHRpb25PcjxUKj4mJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaGFzRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAg
cmV0dXJuIGNoZWNrU2VjdXJpdHlGb3JOb2RlKHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFs
dWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBFeGNlcHRpb25PcjxUKj4g
QmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEV4Y2VwdGlvbk9yPFQmPiYmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICByZXR1
cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
Q2FsbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nQ2FsbGVyLmgJKHJldmlzaW9uIDIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZ0NhbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywzMDAgKzIz
LDEwIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCi0jaW5j
bHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKLSNp
bmNsdWRlICJKU0R5bmFtaWNEb3duY2FzdC5oIgotI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5o
IgotI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCIKLSNpbmNsdWRlICJXZWJDb3Jl
VHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUgPGhl
YXAvSGVhcElubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgot
I2luY2x1ZGUgPGhlYXAvV2Vhay5oPgotI2luY2x1ZGUgPGhlYXAvV2Vha0lubGluZXMuaD4KLSNp
bmNsdWRlIDxydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVm
ZmVyLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3RJbmxp
bmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9Mb29rdXAuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9U
eXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KLSNp
bmNsdWRlIDxydW50aW1lL1dyaXRlQmFycmllci5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
Ci0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBm
aWxlIGEgbG90IGVhc2llciB0byByZWFkIGJ5IHB1dHRpbmcgYWxsIGZ1bmN0aW9uIGRlY2xhcmF0
aW9ucyBhdCB0aGUgdG9wLAotLy8gYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zIGJlbG93LCBldmVu
IGZvciB0ZW1wbGF0ZSBhbmQgaW5saW5lIGZ1bmN0aW9ucy4KLQotbmFtZXNwYWNlIEpTQyB7Ci1j
bGFzcyBKU0Z1bmN0aW9uOwotfQorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDYWNoZWRTY3JpcHQ7Ci1jbGFzcyBEZWZl
cnJlZFByb21pc2U7Ci1jbGFzcyBET01XaW5kb3c7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIFVSTDsK
LWNsYXNzIE5vZGU7Ci0KLXN0cnVjdCBFeGNlcHRpb25EZXRhaWxzIHsKLSAgICBTdHJpbmcgbWVz
c2FnZTsKLSAgICBpbnQgbGluZU51bWJlciB7IDAgfTsKLSAgICBpbnQgY29sdW1uTnVtYmVyIHsg
MCB9OwotICAgIFN0cmluZyBzb3VyY2VVUkw7Ci19OwotCi0vLyBCYXNlIGNsYXNzIGZvciBhbGwg
Y29uc3RydWN0b3Igb2JqZWN0cyBpbiB0aGUgSlNDIGJpbmRpbmdzLgotY2xhc3MgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgOiBwdWJsaWMgSlNET01PYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYg
SlNET01PYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwg
SlNDOjpJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91bGRDYWxs
R2V0Q2FsbERhdGE7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwotCi1wcm90ZWN0
ZWQ6Ci0gICAgRE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2Jh
bE9iamVjdCYpOwotCi0gICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3Qq
KTsKLSAgICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBKU0M6OkNh
bGxEYXRhJik7Ci19OwotCi1jbGFzcyBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCA6IHB1
YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25z
dHJ1Y3Rvck9iamVjdCBCYXNlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgRE9NQ29uc3RydWN0b3JKU0J1
aWx0aW5PYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7
Ci0KLSAgICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOwotICAgIHZvaWQg
c2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKLQotcHJp
dmF0ZToKLSAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6
ZUZ1bmN0aW9uOwotfTsKLQotRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coSlNDOjpFeGVjU3Rh
dGUqKTsKLURPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci1ET01X
aW5kb3cmIGZpcnN0RE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci0KLVdFQkNPUkVfRVhQT1JU
IEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRl
TmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUpOwotCi12b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogYXR0cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKLVdFQkNPUkVf
RVhQT1JUIGJvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKTsKLQotdm9pZCB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93RE9NU3ludGF4RXJyb3IoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsgLy8gTm90IHRoZSBzYW1lIGFzIGEgSmF2
YVNjcmlwdCBzeW50YXggZXJyb3IuCi12b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLXZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwot
V0VCQ09SRV9FWFBPUlQgdm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93Tm90U3VwcG9ydGVkRXJy
b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdl
KTsKLXZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgdGhyb3dT
ZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9p
ZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
Jik7Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11
c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVk
IGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVu
Y3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIq
IGV4cGVjdGVkVmFsdWVzKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RC
ZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25l
ZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKLVdFQkNPUkVf
RVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0
IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1XRUJD
T1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJy
b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZW1iZXJO
YW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBl
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSk7Ci0KLVN0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9y
TWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKTsKLVN0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBh
dHRyaWJ1dGVOYW1lKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dU
aGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKLQotV0VCQ09SRV9F
WFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWpl
Y3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7Ci1XRUJDT1JFX0VYUE9S
VCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJh
dGlvbk5hbWUpOwotCi1XRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9N
U3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKLVdF
QkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2Jh
bE9iamVjdCYsIEpTQzo6U3RydWN0dXJlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3RydWN0
dXJlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgV3Jh
cHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6
OkV4ZWNTdGF0ZSopOwotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTT2Jq
ZWN0KiBnZXRET01Qcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLQot
dm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYpOwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBKU0NsYXNzPiBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUds
b2JhbE9iamVjdCYpOwotCi1KU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdy
YXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKLXZvaWQqIHdyYXBwZXJLZXkoSlNDOjpB
cnJheUJ1ZmZlciopOwotCi1KU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01X
cmFwcGVyV29ybGQmLCB2b2lkKik7Ci1KU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqKTsKLUpTQzo6SlNBcnJheUJ1ZmZl
ciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVm
ZmVyKik7Ci0KLWJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2
b2lkKiwgSlNET01PYmplY3QqLCBKU0M6OldlYWtIYW5kbGVPd25lciopOwotYm9vbCBzZXRJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9N
T2JqZWN0KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKTsKLWJv
b2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVm
ZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciog
d3JhcHBlck93bmVyKTsKLQotYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0Kik7Ci1ib29sIGNsZWFySW5saW5lQ2FjaGVkV3Jh
cHBlcihET01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3Jh
cHBlcik7Ci1ib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBK
U0M6OkFycmF5QnVmZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9N
V3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBp
bmxpbmUgSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBSZWY8RE9NQ2xhc3M+JiBvYmplY3QpIHsgcmV0dXJuIGdldENhY2hlZFdyYXBwZXIod29y
bGQsIG9iamVjdC5nZXQoKSk7IH0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFt
ZSBXcmFwcGVyQ2xhc3M+IHZvaWQgY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNs
YXNzKiwgV3JhcHBlckNsYXNzKik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5h
bWUgV3JhcHBlckNsYXNzPiB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERP
TUNsYXNzKiwgV3JhcHBlckNsYXNzKik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlw
ZW5hbWUgVD4gYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYp
IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZh
bHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFw
cGVyQ2xhc3MqPjo6dHlwZTsKLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBU
PiBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0
eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xh
c3MqPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNWYWx1ZSB3
cmFwKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBET01DbGFzcyYpOwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0NsYXNzJiBjYXN0VGhpc1ZhbHVlKEpTQzo6RXhl
Y1N0YXRlJik7Ci0KLXZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJik7
Ci0KLWNvbnN0IEpTQzo6SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKEpTQzo6
Vk0mLCBjb25zdCBKU0M6Okhhc2hUYWJsZSYgc3RhdGljVGFibGUpOwotCi1TdHJpbmcgcmV0cmll
dmVFcnJvck1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlIGV4
Y2VwdGlvbiwgSlNDOjpDYXRjaFNjb3BlJik7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNj
cmlwdCogPSBudWxscHRyKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0ciwg
RXhjZXB0aW9uRGV0YWlscyogPSBudWxscHRyKTsKLXZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSopOwotCi1KU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uJiYpOwotSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUsIGNvbnN0IFN0cmluZyYpOwotCi0v
LyBDb252ZXJ0IGEgRE9NIGltcGxlbWVudGF0aW9uIGV4Y2VwdGlvbiBpbnRvIGEgSmF2YVNjcmlw
dCBleGNlcHRpb24gaW4gdGhlIGV4ZWN1dGlvbiBzdGF0ZS4KLXZvaWQgcHJvcGFnYXRlRXhjZXB0
aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOwotV0VC
Q09SRV9FWFBPUlQgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKLQotSlNDOjpKU1ZhbHVlIGpzU3Ry
aW5nKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgVVJMJik7IC8vIGVtcHR5IGlmIHRoZSBVUkwgaXMg
bnVsbAotCi1KU0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IFN0cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCi1KU0M6
OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFVSTCYp
OyAvLyB1bmRlZmluZWQgaWYgdGhlIFVSTCBpcyBudWxsCi0KLS8vIFNlZSBKYXZhU2NyaXB0Q29y
ZSBmb3IgZXhwbGFuYXRpb246IFNob3VsZCBiZSB1c2VkIGZvciBhbnkgc3RyaW5nIHRoYXQgaXMg
YWxyZWFkeSBvd25lZCBieSBhbm90aGVyCi0vLyBvYmplY3QsIHRvIGxldCB0aGUgZW5naW5lIGtu
b3cgdGhhdCBjb2xsZWN0aW5nIHRoZSBKU1N0cmluZyB3cmFwcGVyIGlzIHVubGlrZWx5IHRvIHNh
dmUgbWVtb3J5LgotSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBTdHJpbmcmKTsKLQotU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6
UHJvcGVydHlOYW1lKTsKLQotQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5n
KEpTQzo6UHJvcGVydHlOYW1lKTsKLQotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJU
b0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLVdF
QkNPUkVfRVhQT1JUIFN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5n
KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci1XRUJDT1JFX0VYUE9S
VCBTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
Ci0KLWludDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUsIEpTQzo6RXhlY1N0YXRl
KiwgYm9vbCYgb2theSk7Ci0KLS8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbnZlcnQgdmFs
dWVzIHRvIGludGVnZXJzIGFzIHBlciB0aGUgV2ViSURMIHNwZWNpZmljYXRpb24uCi0vLyBUaGUg
Y29udmVyc2lvbiBmYWlscyBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIG51
bWJlciBvciwgaWYgRW5mb3JjZVJhbmdlIGlzIHNwZWNpZmllZCwKLS8vIHRoZSB2YWx1ZSBpcyBv
dXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlciB0eXBlLgotCi1XRUJD
T1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRv
SW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09S
RV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQzMl90
IHRvVUludDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdF
QkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VS
YW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIGlu
dDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JF
X0VYUE9SVCB1aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkNsYW1wKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDMyX3QgdG9J
bnQzMkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JU
IHVpbnQzMl90IHRvVUludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
V0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRDbGFtcChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDgo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0
b1VJbnQ4KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGlu
dDE2X3QgdG9JbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VY
UE9SVCB1aW50MTZfdCB0b1VJbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1X
RUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotCi1KU0M6OkpTVmFsdWUganNEYXRlKEpTQzo6RXhlY1N0YXRlKiwgZG91
YmxlIHZhbHVlKTsKLQotLy8gTmFOIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8g
YSBkYXRlLgotZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
KTsKLQotLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0
eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCi1KU0M6OkpTT2JqZWN0
KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkJiBs
ZW5ndGgpOwotCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciYpOwotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcmKTsKLUpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6
OkFycmF5QnVmZmVyKik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyopOwotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCosIFJlZjxUPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWZQdHI8VD4mJik7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xv
YmFsT2JqZWN0KiwgY29uc3QgVmVjdG9yPFQ+Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3Qg
VmVjdG9yPFJlZlB0cjxUPj4mKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJik7Ci0KLUpTQzo6SlNW
YWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpT
Qzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJh
dG9yKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUJik7Ci1KU0M6
OkpTVmFsdWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJik7Ci0KLVJlZlB0cjxKU0M6
OkFycmF5QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJl
ZEludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDE2QXJy
YXk+IHRvUG9zc2libHlTaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwot
UmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXkoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hh
cmVkVWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQ4
Q2xhbXBlZEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJl
ZFVpbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDMy
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKLVJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJBcnJh
eShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9Q
b3NzaWJseVNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLQotUmVm
UHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVkSW50
OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50MTZBcnJheT4g
dG9VbnNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlND
OjpJbnQzMkFycmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKLVJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0m
LCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5zaGFy
ZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6
OlVpbnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVk
RmxvYXQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQ2
NEFycmF5PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1R5cGU+IFZlY3RvcjxSZWY8VD4+IHRv
UmVmTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9F
WFBPUlQgYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci0KLWVudW0gU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9ydFNlY3VyaXR5
RXJyb3IsIExvZ1NlY3VyaXR5RXJyb3IsIFRocm93U2VjdXJpdHlFcnJvciB9OwotbmFtZXNwYWNl
IEJpbmRpbmdTZWN1cml0eSB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hlY2tTZWN1
cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gVCogY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUKik7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpT
Qzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uT3I8VCo+JiYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IEV4Y2VwdGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYs
IEV4Y2VwdGlvbk9yPFQmPiYmKTsKLSAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5k
b3coSlNDOjpFeGVjU3RhdGUqLCBET01XaW5kb3cmLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9
IExvZ1NlY3VyaXR5RXJyb3IpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRv
dyhKU0M6OkV4ZWNTdGF0ZSYsIERPTVdpbmRvdyYsIFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgYm9v
bCBzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSosIFNlY3Vy
aXR5UmVwb3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7Ci0gICAgYm9vbCBzaG91bGRB
bGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUmLCBGcmFtZSYsIFN0cmluZyYgbWVzc2Fn
ZSk7Ci0gICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIE5v
ZGUqKTsKLX07Ci0KLXZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSk7Ci0KLVN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1BdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlND
OjpQcm9wZXJ0eU5hbWUpOwotCi10ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVu
Z3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LQotCiBlbnVtIGNsYXNzIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHsgVGhyb3csIFJldHVybkVh
cmx5LCBSZWplY3RQcm9taXNlLCBBc3NlcnQgfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFz
cz4KQEAgLTM4OSw0MzcgKzk5LDQgQEAgc3RydWN0IEJpbmRpbmdDYWxsZXIgewogICAgIH0KIH07
CiAKLS8vIEV4Y2VwdGlvbk9yIGhhbmRsaW5nLgotdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25Pcjx2b2lkPiYmKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNE
T01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25P
cjxUPiYmIHZhbHVlKTsKLQotLy8gSW5saW5lIGZ1bmN0aW9ucyBhbmQgdGVtcGxhdGUgZGVmaW5p
dGlvbnMuCi0KLWlubGluZSBKU0M6OlN0cnVjdHVyZSogRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotewotICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLX0KLQotaW5saW5lIERPTUNv
bnN0cnVjdG9yT2JqZWN0OjpET01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogSlNET01PYmpl
Y3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLWlubGluZSBTdHJpbmcgRE9NQ29u
c3RydWN0b3JPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCopCi17Ci0gICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgiRnVuY3Rpb24iKTsKLX0KLQotaW5saW5lIERPTUNvbnN0cnVjdG9ySlNC
dWlsdGluT2JqZWN0OjpET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogRE9N
Q29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLWlubGlu
ZSBKU0M6OkpTRnVuY3Rpb24qIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojppbml0aWFs
aXplRnVuY3Rpb24oKQotewotICAgIHJldHVybiBtX2luaXRpYWxpemVGdW5jdGlvbi5nZXQoKTsK
LX0KLQotaW5saW5lIHZvaWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnNldEluaXRp
YWxpemVGdW5jdGlvbihKU0M6OlZNJiB2bSwgSlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKLXsK
LSAgICBtX2luaXRpYWxpemVGdW5jdGlvbi5zZXQodm0sIHRoaXMsICZmdW5jdGlvbik7Ci19Ci0K
LWlubGluZSBKU0RPTUdsb2JhbE9iamVjdCogZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3Rv
dHlwZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAvLyBGSVhNRTogQ2FsbGVycyB0byB0
aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2luZyB0aGUgZ2xvYmFsIG9iamVjdAotICAgIC8vIGZy
b20gd2hpY2ggdGhlIG9iamVjdCBpcyBiZWluZyBjcmVhdGVkLCBpbnN0ZWFkIG9mIGFzc3VtaW5n
IHRoZSBsZXhpY2FsIG9uZS4KLSAgICAvLyBlLmcuIHN1YmZyYW1lLmRvY3VtZW50LmJvZHkgc2hv
dWxkIHVzZSB0aGUgc3ViZnJhbWUncyBnbG9iYWwgb2JqZWN0LCBub3QgdGhlIGxleGljYWwgb25l
LgotICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4g
aW5saW5lIEpTQzo6U3RydWN0dXJlKiBnZXRET01TdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgaWYgKEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xh
c3M6OmluZm8oKSkpCi0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgcmV0dXJuIGNhY2hl
RE9NU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sICZnbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFzczo6Y3JlYXRlUHJvdG90eXBlKHZtLCAmZ2xv
YmFsT2JqZWN0KSksIFdyYXBwZXJDbGFzczo6aW5mbygpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01T
dHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVu
Y3Rpb24gaXMgd3JvbmcuIEl0IHVzZXMgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QgZm9yIGNyZWF0
aW5nIHRoZSBwcm90b3R5cGUgc3RydWN0dXJlLgotICAgIHJldHVybiBnZXRET01TdHJ1Y3R1cmU8
V3JhcHBlckNsYXNzPihleGVjLT52bSgpLCAqZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3Rv
dHlwZShleGVjKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5l
IEpTQzo6SlNPYmplY3QqIGdldERPTVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpT
T2JqZWN0Kj4oYXNPYmplY3QoZ2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFzcz4odm0sICpKU0M6
OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpLT5zdG9yZWRQcm90b3R5
cGUoKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
RnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKLXsKLSAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0NsYXNzOjpjcmVhdGUoZ2V0
RE9NU3RydWN0dXJlPEpTQ2xhc3M+KGdsb2JhbE9iamVjdC52bSgpLCBnbG9iYWxPYmplY3QpLCAm
Z2xvYmFsT2JqZWN0KTsKLSAgICBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhzdGF0
ZSwgKm9iamVjdCwgaW5pdGlhbGl6ZUZ1bmN0aW9uKTsKLSAgICByZXR1cm4gSlNDOjpKU1ZhbHVl
OjplbmNvZGUob2JqZWN0KTsKLX0KLQotaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFw
cGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciopCi17Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcio+KHdvcmxk
LnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci5nZXQoKSktPndyYXBwZXJPd25lcigpOwotfQot
Ci1pbmxpbmUgdm9pZCogd3JhcHBlcktleShKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QpCi17
Ci0gICAgcmV0dXJuIGRvbU9iamVjdDsKLX0KLQotaW5saW5lIEpTRE9NT2JqZWN0KiBnZXRJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqKSB7IHJldHVybiBudWxscHRy
OyB9Ci1pbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYs
IHZvaWQqLCBKU0RPTU9iamVjdCosIEpTQzo6V2Vha0hhbmRsZU93bmVyKikgeyByZXR1cm4gZmFs
c2U7IH0KLWlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29y
bGQmLCB2b2lkKiwgSlNET01PYmplY3QqKSB7IHJldHVybiBmYWxzZTsgfQotCi1pbmxpbmUgSlNE
T01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwg
U2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gZG9tT2JqZWN0LT53cmFwcGVy
KCk7Ci19Ci0KLWlubGluZSBKU0M6OkpTQXJyYXlCdWZmZXIqIGdldElubGluZUNhY2hlZFdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogYnVmZmVyKQotewot
ICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIGJ1ZmZlci0+bV93cmFwcGVyLmdldCgpOwotfQotCi1pbmxpbmUgYm9vbCBzZXRJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSog
ZG9tT2JqZWN0LCBKU0RPTU9iamVjdCogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdy
YXBwZXJPd25lcikKLXsKLSAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBkb21PYmplY3QtPnNldFdyYXBwZXIod3JhcHBlciwgd3JhcHBlck93bmVy
LCAmd29ybGQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBzZXRJbmxpbmVD
YWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRv
bU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25l
ciogd3JhcHBlck93bmVyKQotewotICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGRvbU9iamVjdC0+bV93cmFwcGVyID0gSlNDOjpXZWFrPEpTQzo6
SlNBcnJheUJ1ZmZlcj4od3JhcHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0
KiB3cmFwcGVyKQotewotICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGRvbU9iamVjdC0+Y2xlYXJXcmFwcGVyKHdyYXBwZXIpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJy
YXlCdWZmZXIqIHdyYXBwZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgd2Vha0NsZWFyKGRvbU9iamVjdC0+bV93cmFwcGVyLCB3cmFw
cGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+
IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYg
d29ybGQsIERPTUNsYXNzJiBkb21PYmplY3QpCi17Ci0gICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBn
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCAmZG9tT2JqZWN0KSkKLSAgICAgICAgcmV0dXJu
IHdyYXBwZXI7Ci0gICAgcmV0dXJuIHdvcmxkLm1fd3JhcHBlcnMuZ2V0KHdyYXBwZXJLZXkoJmRv
bU9iamVjdCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3Jh
cHBlckNsYXNzPiBpbmxpbmUgdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3Js
ZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQotewotICAgIEpT
Qzo6V2Vha0hhbmRsZU93bmVyKiBvd25lciA9IHdyYXBwZXJPd25lcih3b3JsZCwgZG9tT2JqZWN0
KTsKLSAgICBpZiAoc2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFw
cGVyLCBvd25lcikpCi0gICAgICAgIHJldHVybjsKLSAgICB3ZWFrQWRkKHdvcmxkLm1fd3JhcHBl
cnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+KHdyYXBw
ZXIsIG93bmVyLCAmd29ybGQpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5
cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVy
KQotewotICAgIGlmIChjbGVhcklubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwg
d3JhcHBlcikpCi0gICAgICAgIHJldHVybjsKLSAgICB3ZWFrUmVtb3ZlKHdvcmxkLm1fd3JhcHBl
cnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwgd3JhcHBlcik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBpbmxpbmUgYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIGRvbU9iamVjdCkgLT4gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVu
YW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+
Ojp0eXBlCi17Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gdHlwZW5hbWUgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzOwotCi0gICAgQVNTRVJUKCFn
ZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0KSk7Ci0gICAg
YXV0byogZG9tT2JqZWN0UHRyID0gZG9tT2JqZWN0LnB0cigpOwotICAgIGF1dG8qIHdyYXBwZXIg
PSBXcmFwcGVyQ2xhc3M6OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihnbG9i
YWxPYmplY3QtPnZtKCksICpnbG9iYWxPYmplY3QpLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoZG9t
T2JqZWN0KSk7Ci0gICAgY2FjaGVXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2Jq
ZWN0UHRyLCB3cmFwcGVyKTsKLSAgICByZXR1cm4gd3JhcHBlcjsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5
cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFz
cyo+Ojp0eXBlCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8RE9NQ2xhc3M+KGdsb2JhbE9i
amVjdCwgc3RhdGljX3JlZmVyZW5jZV9jYXN0PERPTUNsYXNzPihXVEZNb3ZlKGRvbU9iamVjdCkp
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUg
d3JhcChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIERPTUNsYXNzJiBkb21PYmplY3QpCi17Ci0gICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRD
YWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0KSkKLSAgICAgICAg
cmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgUmVmPERPTUNsYXNzPihkb21PYmplY3QpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgSlNDbGFzcz4gaW5saW5lIEpTQ2xhc3MmIGNhc3RUaGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlKQotewotICAgIGF1dG8gdGhpc1ZhbHVlID0gc3RhdGUudGhpc1ZhbHVlKCk7Ci0gICAg
YXV0byBjYXN0ZWRUaGlzID0ganNEeW5hbWljRG93bmNhc3Q8SlNDbGFzcyo+KHN0YXRlLnZtKCks
IHRoaXNWYWx1ZSk7Ci0gICAgQVNTRVJUKGNhc3RlZFRoaXMpOwotICAgIHJldHVybiAqY2FzdGVk
VGhpczsKLX0KLQotaW5saW5lIGludDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBib29sJiBva2F5KQotewotICAgIGRvdWJsZSBu
dW1iZXIgPSB2YWx1ZS50b051bWJlcihleGVjKTsKLSAgICBva2F5ID0gc3RkOjppc2Zpbml0ZShu
dW1iZXIpOwotICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKLX0KLQotLy8gVmFsaWRh
dGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9u
IDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCi1pbmxpbmUgSlNDOjpKU09iamVjdCogdG9KU1Nl
cXVlbmNlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIHVuc2lnbmVk
JiBsZW5ndGgpCi17Ci0gICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgSlNDOjpKU09iamVjdCogb2JqZWN0
ID0gdmFsdWUuZ2V0T2JqZWN0KCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgdGhyb3dT
ZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLQotICAgIEpTQzo6SlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0KCZleGVj
LCBleGVjLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOwotCi0gICAgaWYgKGxlbmd0aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGxlbmd0aCA9IGxlbmd0aFZhbHVlLnRv
VUludDMyKCZleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsK
LQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
QXJyYXlCdWZmZXImIGJ1ZmZlcikKLXsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBnZXRDYWNoZWRX
cmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLQotICAgIC8vIFRoZSBKU0FycmF5QnVmZmVyOjpjcmVhdGUgZnVuY3Rpb24gd2lsbCBy
ZWdpc3RlciB0aGUgd3JhcHBlciBpbiBmaW5pc2hDcmVhdGlvbi4KLSAgICByZXR1cm4gSlNDOjpK
U0FycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUtPnZtKCksIGdsb2JhbE9iamVjdC0+YXJyYXlCdWZm
ZXJTdHJ1Y3R1cmUoYnVmZmVyLnNoYXJpbmdNb2RlKCkpLCAmYnVmZmVyKTsKLX0KLQotaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyVmlldyYgdmlldykKLXsKLSAgICBy
ZXR1cm4gdmlldy53cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QpOwotfQotCi1pbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIp
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgIHJldHVybiB0b0pTKHN0YXRlLCBn
bG9iYWxPYmplY3QsICpidWZmZXIpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6QXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwg
KnZpZXcpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFJlZjxUPiYmIHB0cikKLXsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0
ci5nZXQoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUmVmUHRyPFQ+JiYgcHRyKQotewotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgcHRyLmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBWZWN0b3I8VD4mIHZlY3RvcikKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVj
LCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0pKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVj
dG9yPFJlZlB0cjxUPj4mIHZlY3RvcikKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRy
LCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpT
VmFsdWUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCB2ZWN0b3JbaV0uZ2V0KCkpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0K
LWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9i
YWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJiBwcml2YXRlTmFtZSkKLXsKLSAgICBy
ZXR1cm4gSlNDOjpTeW1ib2w6OmNyZWF0ZShleGVjLT52bSgpLCBwcml2YXRlTmFtZS51aWQoKSk7
Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0
dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwgdmFsdWUsIGZhbHNlKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3Io
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCBUJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3Qo
JnN0YXRlLCB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUpLCBmYWxzZSk7Ci19Ci0K
LWlubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCBKU0M6
OmpzVW5kZWZpbmVkKCksIHRydWUpOwotfQotCi1pbmxpbmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZm
ZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0
PEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqPih2bSwgdmFsdWUpOwotICAgIGlmICghd3JhcHBlcikK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHdyYXBwZXItPnBvc3NpYmx5U2hh
cmVkSW1wbCgpOwotfQotCi1pbmxpbmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vu
c2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17
Ci0gICAgYXV0byByZXN1bHQgPSB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KHZtLCB2
YWx1ZSk7Ci0gICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT5pc1NoYXJlZCgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgUmVmUHRyPEpT
Qzo6SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVk
VmlldzxKU0M6OkludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6
SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRW
aWV3PEpTQzo6SW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6
SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRW
aWV3PEpTQzo6SW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6
VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRW
aWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6
VWludDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6
OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFy
ZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENsYW1wZWRBZGFwdG9yPih2bSwgdmFsdWUpOyB9
Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZB
cnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9z
c2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MTZBZGFwdG9yPih2bSwgdmFsdWUp
OyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50
MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRv
UG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MzJBZGFwdG9yPih2bSwgdmFs
dWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVk
RmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpT
Qzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2
bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5
U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFw
dG9yPih2bSwgdmFsdWUpOyB9Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvVW5z
aGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
SlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1
ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Vuc2hhcmVkSW50MTZBcnJh
eShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFy
ZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGlu
ZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBl
ZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlND
OjpVaW50OEFycmF5PiB0b1Vuc2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpV
aW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50OENsYW1w
ZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpV
aW50MTZBcnJheT4gdG9VbnNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVp
bnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJh
eT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUp
IHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0
b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvVW5z
aGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1
cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZt
LCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRG
bG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1
ZSk7IH0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSlNUPiBpbmxpbmUgVmVjdG9y
PFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKCF2YWx1ZS5pc09iamVj
dCgpKSB7Ci0gICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8UmVmPFQ+PiByZXN1bHQ7Ci0g
ICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCB2YWx1ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZt
LCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoanNW
YWx1ZS5pbmhlcml0cyh2bSwgSlNUOjppbmZvKCkpKSB7Ci0gICAgICAgICAgICBhdXRvKiBvYmpl
Y3QgPSBKU1Q6OnRvV3JhcHBlZCh2bSwganNWYWx1ZSk7Ci0gICAgICAgICAgICBBU1NFUlQob2Jq
ZWN0KTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKm9iamVjdCk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoKnN0YXRlLCBzY29wZSk7
Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIFN0cmluZyBwcm9wZXJ0
eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgQVNT
RVJUKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSk7Ci0gICAgcmV0dXJuIHByb3BlcnR5TmFtZS51
aWQoKSA/IHByb3BlcnR5TmFtZS51aWQoKSA6IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7Ci19
Ci0KLWlubGluZSBBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBBdG9taWNTdHJpbmcocHJv
cGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVpZCgpIDogcHJvcGVydHlOYW1lLnB1Ymxp
Y05hbWUoKSk7Ci19Ci0KLXRlbXBsYXRlPEpTQzo6TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rp
b24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0
aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6
ZW5jb2RlKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpLCBuYXRpdmVG
dW5jdGlvbikpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRp
b24mJiBleGNlcHRpb24pCi17Ci0gICAgaWYgKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChzdGF0ZSwgdGhyb3dT
Y29wZSwgV1RGTW92ZShleGNlcHRpb24pKTsKLX0KLQotaW5saW5lIHZvaWQgcHJvcGFnYXRlRXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
LCBFeGNlcHRpb25Pcjx2b2lkPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5o
YXNFeGNlcHRpb24oKSkpCi0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dT
Y29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBF
eGNlcHRpb25PcjxUPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNl
cHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3Bl
LCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0K
LSAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1
cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25P
cjxUPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkp
IHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5y
ZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICByZXR1
cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIEJpbmRp
bmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBU
JiBub2RlKQotewotICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgJm5v
ZGUpID8gJm5vZGUgOiBudWxscHRyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
VCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIFQqIG5vZGUpCi17Ci0gICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0
YXRlLCBub2RlKSA/IG5vZGUgOiBudWxscHRyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5v
ZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb25PcjxUKj4mJiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5yZWxlYXNl
RXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGNoZWNrU2VjdXJpdHlGb3JOb2RlKHN0YXRlLCB2YWx1
ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQmPiYmIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVhc2VFeGNl
cHRpb24oKTsKLSAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIHZhbHVlLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nU2VjdXJpdHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5
LmNwcAkocmV2aXNpb24gMjExMzUzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuY3BwOjIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQmluZGluZ1NlY3VyaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMzQgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMSwgMjAxMywgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWlu
aWcgPHNhbUB3ZWJraXQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0
dCA8bWljaGFlbEA2OGsub3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorCisjaW5jbHVkZSAi
Q2FjaGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKKyNpbmNsdWRlICJET01Db25z
dHJ1Y3RvcldpdGhEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNs
dWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWFk
ZXJzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uSW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNl
RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01Q
cm9taXNlLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKKyNpbmNsdWRlICJKU0V4
Y2VwdGlvbkJhc2UuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgPGJ5
dGVjb2RlL0NvZGVCbG9jay5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2su
aD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+CisjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JIYW5kbGluZ1Njb3BlLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9FcnJvckluc3RhbmNlLmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KKyNpbmNs
dWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTRnVu
Y3Rpb24uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVEFUSUNfQVNTRVJU
X0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9NQ29uc3RydWN0b3JPYmplY3QpOworU1RBVElD
X0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yV2l0aERvY3Vt
ZW50KTsKKwordm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIHByb3Bl
cnR5TmFtZSkKK3sKKyAgICBjb21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFt
ZSk7Cit9CisKK0pTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgcykKK3sKKyAgICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOworICAgIHJldHVybiBqc093bmVkU3RyaW5nKGV4ZWMsIHMpOworfQorCitKU1ZhbHVl
IGpzU3RyaW5nT3JVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCit7
CisgICAgaWYgKHMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBzKTsKK30KKworSlNWYWx1ZSBqc1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVSTCYgdXJsKQoreworICAgIHJldHVybiBqc1N0cmlu
Z1dpdGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkpOworfQorCitKU1ZhbHVlIGpzU3RyaW5nT3JV
bmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICBpZiAodXJs
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4ganNT
dHJpbmdXaXRoQ2FjaGUoZXhlYywgdXJsLnN0cmluZygpKTsKK30KKworc3RhdGljIGlubGluZSBT
dHJpbmcgc3RyaW5nVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIFN0cmluZyYmIHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmluZy5jb250YWluc09u
bHlMYXRpbjEoKSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nOworfQorCitTdHJp
bmcgaWRlbnRpZmllclRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudGlmaWVyKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIHN0cmluZyA9IGlk
ZW50aWZpZXIuc3RyaW5nKCk7CisgICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwg
c2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK1N0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3Ry
aW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3Rh
dGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaGFz
VW5wYWlyZWRTdXJyb2dhdGUoU3RyaW5nVmlldyBzdHJpbmcpCit7CisgICAgLy8gRmFzdCBwYXRo
IGZvciA4LWJpdCBzdHJpbmdzOyB0aGV5IGNhbid0IGhhdmUgYW55IHN1cnJvZ2F0ZXMuCisgICAg
aWYgKHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoYXV0
byBjb2RlUG9pbnQgOiBzdHJpbmcuY29kZVBvaW50cygpKSB7CisgICAgICAgIGlmIChVX0lTX1NV
UlJPR0FURShjb2RlUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9VU1ZTdHJp
bmcoU3RyaW5nJiYgc3RyaW5nKQoreworICAgIC8vIEZhc3QgcGF0aCBmb3IgdGhlIGNhc2Ugd2hl
cmUgdGhlcmUgYXJlIG5vIHVucGFpcmVkIHN1cnJvZ2F0ZXMuCisgICAgaWYgKCFoYXNVbnBhaXJl
ZFN1cnJvZ2F0ZShzdHJpbmcpKQorICAgICAgICByZXR1cm4gc3RyaW5nOworCisgICAgLy8gU2xv
dyBwYXRoOiBodHRwOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1vYnRhaW4tdW5pY29k
ZQorICAgIC8vIFJlcGxhY2VzIHVucGFpcmVkIHN1cnJvZ2F0ZXMgd2l0aCB0aGUgcmVwbGFjZW1l
bnQgY2hhcmFjdGVyLgorICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNl
cnZlQ2FwYWNpdHkoc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBTdHJpbmdWaWV3IHZpZXcgeyBzdHJp
bmcgfTsKKyAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogdmlldy5jb2RlUG9pbnRzKCkpIHsKKyAg
ICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChjb2RlUG9pbnQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnRvU3Ry
aW5nKCk7Cit9CisKK1N0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRp
Zmllci5zdHJpbmcoKTsKKyAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJp
bmcpKTsKK30KKworU3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50
b1dURlN0cmluZygmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisKKyAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKK30KKwor
SlNWYWx1ZSBqc0RhdGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUpCit7CisgICAgcmV0
dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7Cit9CisKK2RvdWJsZSB2YWx1ZVRvRGF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzTnVt
YmVyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc051bWJlcigpOworICAgIGlmICghdmFsdWUu
aW5oZXJpdHMoZXhlYy0+dm0oKSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpKQorICAgICAgICByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odmFsdWUudG9PYmplY3QoZXhlYykpLT5pbnRlcm5h
bE51bWJlcigpOworfQorCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgZXhjZXB0aW9uVmFsdWUsIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQoreworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVh
ZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byogZXhjZXB0aW9uID0ganNEeW5hbWljRG93
bmNhc3Q8SlNDOjpFeGNlcHRpb24qPih2bSwgZXhjZXB0aW9uVmFsdWUpOworICAgIGlmICghZXhj
ZXB0aW9uKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IHZtLmxhc3RFeGNlcHRpb24oKTsKKyAgICAg
ICAgaWYgKCFleGNlcHRpb24pCisgICAgICAgICAgICBleGNlcHRpb24gPSBKU0M6OkV4Y2VwdGlv
bjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4Y2VwdGlvblZhbHVlLCBKU0M6OkV4Y2VwdGlvbjo6RG9O
b3RDYXB0dXJlU3RhY2spOworICAgIH0KKworICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNl
cHRpb24sIGNhY2hlZFNjcmlwdCk7Cit9CisKK1N0cmluZyByZXRyaWV2ZUVycm9yTWVzc2FnZShF
eGVjU3RhdGUmIHN0YXRlLCBWTSYgdm0sIEpTVmFsdWUgZXhjZXB0aW9uLCBDYXRjaFNjb3BlJiBj
YXRjaFNjb3BlKQoreworICAgIGlmIChhdXRvKiBleGNlcHRpb25CYXNlID0gdG9FeGNlcHRpb25C
YXNlKHZtLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gZXhjZXB0aW9uQmFzZS0+dG9TdHJp
bmcoKTsKKworICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJ
bnNwZWN0b3I6IFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbiBzaG91bGQgbm90IGV2YWx1YXRlIEph
dmFTY3JpcHQgaGFuZGxpbmcgZXhjZXB0aW9ucworICAgIC8vIElmIHRoaXMgaXMgYSBjdXN0b20g
ZXhjZXB0aW9uIG9iamVjdCwgY2FsbCB0b1N0cmluZyBvbiBpdCB0byB0cnkgYW5kIGdldCBhIG5p
Y2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZXhjZXB0aW9uLgorICAgIFN0cmluZyBl
cnJvck1lc3NhZ2U7CisgICAgaWYgKGF1dG8qIGVycm9yID0ganNEeW5hbWljRG93bmNhc3Q8RXJy
b3JJbnN0YW5jZSo+KHZtLCBleGNlcHRpb24pKQorICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJv
ci0+c2FuaXRpemVkVG9TdHJpbmcoJnN0YXRlKTsKKyAgICBlbHNlCisgICAgICAgIGVycm9yTWVz
c2FnZSA9IGV4Y2VwdGlvbi50b1dURlN0cmluZygmc3RhdGUpOworCisgICAgLy8gV2UgbmVlZCB0
byBjbGVhciBhbnkgbmV3IGV4Y2VwdGlvbiB0aGF0IG1heSBiZSB0aHJvd24gaW4gdGhlIHRvU3Ry
aW5nKCkgY2FsbCBhYm92ZS4KKyAgICAvLyByZXBvcnRFeGNlcHRpb24oKSBpcyBub3Qgc3VwcG9z
ZWQgdG8gYmUgbWFraW5nIG5ldyBleGNlcHRpb25zLgorICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKKyAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gZXJyb3JN
ZXNzYWdlOworfQorCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6
RXhjZXB0aW9uKiBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0LCBFeGNlcHRp
b25EZXRhaWxzKiBleGNlcHRpb25EZXRhaWxzKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgUkVMRUFT
RV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgaWYgKGlz
VGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbih2bSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoZXhlYy0+dm0oKSk7CisK
KyAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0
YWNrRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4Q2Fs
bFN0YWNrU2l6ZVRvQ2FwdHVyZSkpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
dm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7CisKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKTsKKyAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IGpzRHluYW1pY0Rvd25jYXN0
PEpTRE9NV2luZG93Kj4odm0sIGdsb2JhbE9iamVjdCkpIHsKKyAgICAgICAgaWYgKCF3aW5kb3ct
PndyYXBwZWQoKS5pc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpbnQgbGluZU51bWJlciA9IDA7CisgICAgaW50IGNvbHVtbk51
bWJlciA9IDA7CisgICAgU3RyaW5nIGV4Y2VwdGlvblNvdXJjZVVSTDsKKyAgICBpZiAoY29uc3Qg
U2NyaXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsU3RhY2stPmZpcnN0Tm9uTmF0aXZlQ2Fs
bEZyYW1lKCkpIHsKKyAgICAgICAgbGluZU51bWJlciA9IGNhbGxGcmFtZS0+bGluZU51bWJlcigp
OworICAgICAgICBjb2x1bW5OdW1iZXIgPSBjYWxsRnJhbWUtPmNvbHVtbk51bWJlcigpOworICAg
ICAgICBleGNlcHRpb25Tb3VyY2VVUkwgPSBjYWxsRnJhbWUtPnNvdXJjZVVSTCgpOworICAgIH0K
KworICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSByZXRyaWV2ZUVycm9yTWVzc2FnZSgqZXhlYywg
dm0sIGV4Y2VwdGlvbi0+dmFsdWUoKSwgc2NvcGUpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5yZXBvcnRFeGNlcHRpb24o
ZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGV4Y2VwdGlvblNvdXJjZVVS
TCwgZXhjZXB0aW9uLCBjYWxsU3RhY2stPnNpemUoKSA/IGNhbGxTdGFjayA6IG51bGxwdHIsIGNh
Y2hlZFNjcmlwdCk7CisKKyAgICBpZiAoZXhjZXB0aW9uRGV0YWlscykgeworICAgICAgICBleGNl
cHRpb25EZXRhaWxzLT5tZXNzYWdlID0gZXJyb3JNZXNzYWdlOworICAgICAgICBleGNlcHRpb25E
ZXRhaWxzLT5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAgICAgZXhjZXB0aW9uRGV0YWls
cy0+Y29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOworICAgICAgICBleGNlcHRpb25EZXRhaWxz
LT5zb3VyY2VVUkwgPSBleGNlcHRpb25Tb3VyY2VVUkw7CisgICAgfQorfQorCit2b2lkIHJlcG9y
dEN1cnJlbnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1
dG8qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7Cit9CisKK3N0YXRp
YyBKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNv
ZGUgZWMsIGNvbnN0IFN0cmluZyogbWVzc2FnZSA9IG51bGxwdHIpCit7CisgICAgaWYgKCFlYyB8
fCBlYyA9PSBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yKQorICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKworICAgIC8vIEZJWE1FOiBIYW5kbGUgb3RoZXIgV2ViSURMIGV4Y2VwdGlvbiB0eXBl
cy4KKyAgICBpZiAoZWMgPT0gVHlwZUVycm9yKSB7CisgICAgICAgIGlmICghbWVzc2FnZSB8fCBt
ZXNzYWdlLT5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4
ZWMpOworICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMsICptZXNzYWdlKTsKKyAg
ICB9CisKKyAgICBpZiAoZWMgPT0gUmFuZ2VFcnJvcikgeworICAgICAgICBpZiAoIW1lc3NhZ2Ug
fHwgbWVzc2FnZS0+aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJCYWQgdmFsdWUiKSk7CisgICAgICAgIHJldHVybiBjcmVh
dGVSYW5nZUVycm9yKGV4ZWMsICptZXNzYWdlKTsKKyAgICB9CisKKyAgICBpZiAoZWMgPT0gU3Rh
Y2tPdmVyZmxvd0Vycm9yKQorICAgICAgICByZXR1cm4gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9y
KGV4ZWMpOworCisgICAgLy8gRklYTUU6IEFsbCBjYWxsZXJzIHRvIGNyZWF0ZURPTUV4Y2VwdGlv
biBuZWVkIHRvIHBhc3MgaW4gdGhlIGNvcnJlY3QgZ2xvYmFsIG9iamVjdC4KKyAgICAvLyBGb3Ig
bm93LCB3ZSdyZSBnb2luZyB0byBhc3N1bWUgdGhlIGxleGljYWxHbG9iYWxPYmplY3QuIFdoaWNo
IGlzIHdyb25nIGluIGNhc2VzIGxpa2UgdGhpczoKKyAgICAvLyBmcmFtZXNbMF0uZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudChudWxsLCBudWxsKTsgLy8gdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGljaCBz
aG91bGQgaGF2ZSB0aGUgc3ViZnJhbWUncyBwcm90b3R5cGVzLgorICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4
ZWMpOworCisgICAgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKwor
ICAgIENTdHJpbmcgbWVzc2FnZUNTdHJpbmc7CisgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgIG1l
c3NhZ2VDU3RyaW5nID0gbWVzc2FnZS0+dXRmOCgpOworICAgIGlmIChtZXNzYWdlICYmICFtZXNz
YWdlLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gSXQgaXMgc2FmZSB0byBkbyB0aGlzIGJlY2F1
c2UgdGhlIGNoYXIqIGNvbnRlbnRzIG9mIHRoZSBDU3RyaW5nIGFyZSBjb3BpZWQgaW50byBhIG5l
dyBXVEY6OlN0cmluZyBiZWZvcmUgdGhlIENTdHJpbmcgaXMgZGVzdHJveWVkLgorICAgICAgICBk
ZXNjcmlwdGlvbi5kZXNjcmlwdGlvbiA9IG1lc3NhZ2VDU3RyaW5nLmRhdGEoKTsKKyAgICB9CisK
KyAgICBKU1ZhbHVlIGVycm9yT2JqZWN0OworICAgIHN3aXRjaCAoZGVzY3JpcHRpb24udHlwZSkg
eworICAgIGNhc2UgRE9NQ29yZUV4Y2VwdGlvblR5cGU6CisjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisgICAgY2FzZSBJREJEYXRhYmFzZUV4Y2VwdGlvblR5cGU6CisjZW5kaWYKKyAgICAg
ICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgRE9NQ29yZUV4Y2VwdGlv
bjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZUV4
Y2VwdGlvblR5cGU6CisgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIEZpbGVFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFNRTEV4Y2VwdGlvblR5cGU6CisgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIFNRTEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU1ZHRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJyb3JP
YmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHRXhjZXB0aW9uOjpjcmVhdGUoZGVz
Y3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYUGF0aEV4Y2VwdGlvblR5cGU6
CisgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFhQYXRoRXhj
ZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IAorICAgIEFTU0VSVChlcnJvck9iamVjdCk7CisgICAgYWRkRXJyb3JJbmZvKGV4ZWMsIGFzT2Jq
ZWN0KGVycm9yT2JqZWN0KSwgdHJ1ZSk7CisgICAgcmV0dXJuIGVycm9yT2JqZWN0OworfQorCitK
U1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUg
ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlRE9NRXhjZXB0
aW9uKGV4ZWMsIGVjLCAmbWVzc2FnZSk7Cit9CisKK0pTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4g
Y3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgZXhjZXB0aW9uLmNvZGUoKSwgZXhjZXB0aW9uLnJl
bGVhc2VNZXNzYWdlKCkpOworfQorCit2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRp
b24mJiBleGNlcHRpb24pCit7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsK
KyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlv
bihzdGF0ZSwgV1RGTW92ZShleGNlcHRpb24pKSk7Cit9CisKK2Jvb2wgaGFzSXRlcmF0b3JNZXRo
b2QoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgIENh
bGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlOworICAgIEpTVmFsdWUgYXBw
bHlNZXRob2QgPSBvYmplY3QtPmdldE1ldGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwg
dm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0
ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBmYWxzZSk7CisKKyAgICByZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5kZWZp
bmVkKCk7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJh
bWUoRXhlY1N0YXRlJiBzdGF0ZSwgRnJhbWUmIGZyYW1lLCBTdHJpbmcmIG1lc3NhZ2UpCit7Cisg
ICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKCZzdGF0ZSwg
JmZyYW1lLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBtZXNzYWdlID0gZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWlu
QWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9N
V2luZG93KEV4ZWNTdGF0ZSYgc3RhdGUsIERPTVdpbmRvdyYgZ2xvYmFsT2JqZWN0LCBTdHJpbmcm
IG1lc3NhZ2UpCit7CisgICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NU
b0RPTVdpbmRvdygmc3RhdGUsIGdsb2JhbE9iamVjdCwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9y
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgbWVzc2FnZSA9IGdsb2JhbE9iamVjdC5jcm9z
c0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUq
IGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFmcmFtZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+cHJpbnRFcnJv
ck1lc3NhZ2UobWVzc2FnZSk7Cit9CisKK1N0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJl
KEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvKQoreworICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0
LnN0cnVjdHVyZXMoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5n
ZXQoY2xhc3NJbmZvKS5nZXQoKTsKK30KKworU3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCit7CisgICAgYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5n
TWFya2luZyhnbG9iYWxPYmplY3Qudm0oKS5oZWFwLCBnbG9iYWxPYmplY3QuZ2NMb2NrKCkpOwor
ICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LnN0cnVjdHVy
ZXMobG9ja2VyKTsKKyAgICBBU1NFUlQoIXN0cnVjdHVyZXMuY29udGFpbnMoY2xhc3NJbmZvKSk7
CisgICAgcmV0dXJuIHN0cnVjdHVyZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4oZ2xvYmFsT2JqZWN0LnZtKCksICZnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJh
dG9yLT52YWx1ZS5nZXQoKTsKK30KKworc3RhdGljIGNvbnN0IGludDMyX3Qga01heEludDMyID0g
MHg3ZmZmZmZmZjsKK3N0YXRpYyBjb25zdCBpbnQzMl90IGtNaW5JbnQzMiA9IC1rTWF4SW50MzIg
LSAxOworc3RhdGljIGNvbnN0IHVpbnQzMl90IGtNYXhVSW50MzIgPSAweGZmZmZmZmZmVTsKK3N0
YXRpYyBjb25zdCBpbnQ2NF90IGtKU01heEludGVnZXIgPSAweDIwMDAwMDAwMDAwMDAwTEwgLSAx
OyAvLyAyXjUzIC0gMSwgbGFyZ2VzdCBpbnRlZ2VyIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBpbiBF
Q01BU2NyaXB0LgorCitzdGF0aWMgU3RyaW5nIHJhbmdlRXJyb3JTdHJpbmcoZG91YmxlIHZhbHVl
LCBkb3VibGUgbWluLCBkb3VibGUgbWF4KQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJWYWx1
ZSAiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdCh2YWx1ZSksICIgaXMgb3V0c2lk
ZSB0aGUgcmFuZ2UgWyIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1pbiksICIs
ICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1heCksICJdIik7Cit9CisKK3N0
YXRpYyBkb3VibGUgZW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB4LCBkb3Vi
bGUgbWluaW11bSwgZG91YmxlIG1heGltdW0pCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoc3Rk
Ojppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgeCA9IHRydW5jKHgpOworICAgIGlmICh4IDwgbWlu
aW11bSB8fCB4ID4gbWF4aW11bSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlLCByYW5nZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIHJldHVybiB4OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K3N0cnVjdCBJbnRUeXBlTGltaXRzIHsKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlw
ZUxpbWl0czxpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgaW50OF90IG1pblZhbHVlID0gLTEy
ODsKKyAgICBzdGF0aWMgY29uc3QgaW50OF90IG1heFZhbHVlID0gMTI3OworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDI1NjsgLy8gMl44Cit9OworCit0ZW1wbGF0
ZSA8Pgorc3RydWN0IEludFR5cGVMaW1pdHM8dWludDhfdD4geworICAgIHN0YXRpYyBjb25zdCB1
aW50OF90IG1heFZhbHVlID0gMjU1OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJP
ZlZhbHVlcyA9IDI1NjsgLy8gMl44Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVM
aW1pdHM8aW50MTZfdD4geworICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtaW5WYWx1ZSA9IC0zMjc2
ODsKKyAgICBzdGF0aWMgY29uc3Qgc2hvcnQgbWF4VmFsdWUgPSAzMjc2NzsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgorfTsKKwordGVt
cGxhdGUgPD4KK3N0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQxNl90PiB7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHNob3J0IG1heFZhbHVlID0gNjU1MzU7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG51bWJlck9mVmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKK307CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorc3RhdGljIGlubGluZSBUIHRvU21hbGxlckludChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zaWduZWQ8
VD46OnZhbHVlICYmIHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUg
dXNlZCBmb3Igc2lnbmVkIGludGVncmFsIHR5cGVzIik7CisKKyAgICB0eXBlZGVmIEludFR5cGVM
aW1pdHM8VD4gTGltaXRzVHJhaXQ7CisgICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBh
bHJlYWR5IGEgMzItYml0IHNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KKyAgICBp
ZiAodmFsdWUuaXNJbnQzMigpKSB7CisgICAgICAgIGludDMyX3QgZCA9IHZhbHVlLmFzSW50MzIo
KTsKKyAgICAgICAgaWYgKGQgPj0gTGltaXRzVHJhaXQ6Om1pblZhbHVlICYmIGQgPD0gTGltaXRz
VHJhaXQ6Om1heFZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwor
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1w
OgorICAgICAgICAgICAgcmV0dXJuIGQgPCBMaW1pdHNUcmFpdDo6bWluVmFsdWUgPyBMaW1pdHNU
cmFpdDo6bWluVmFsdWUgOiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7CisgICAgICAgIH0KKyAgICAg
ICAgZCAlPSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXM7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUPihkID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8gZCAtIExpbWl0c1RyYWl0Ojpu
dW1iZXJPZlZhbHVlcyA6IGQpOworICAgIH0KKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1i
ZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKworICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgIHJldHVybiBlbmZvcmNlUmFu
Z2Uoc3RhdGUsIHgsIExpbWl0c1RyYWl0OjptaW5WYWx1ZSwgTGltaXRzVHJhaXQ6Om1heFZhbHVl
KTsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAg
ICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7CisgICAgfQorCisg
ICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICB4ID0geCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgp
KTsKKyAgICB4ID0gZm1vZCh4LCBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMpOworCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KHggPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyB4IC0gTGlt
aXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzIDogeCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
Pgorc3RhdGljIGlubGluZSBUIHRvU21hbGxlclVJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZh
bHVlICYmIHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBm
b3IgdW5zaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKKworICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0
czxUPiBMaW1pdHNUcmFpdDsKKyAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVh
ZHkgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCisgICAgaWYg
KHZhbHVlLmlzVUludDMyKCkpIHsKKyAgICAgICAgdWludDMyX3QgZCA9IHZhbHVlLmFzVUludDMy
KCk7CisgICAgICAgIGlmIChkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAg
ICAgICByZXR1cm4gTGltaXRzVHJhaXQ6Om1heFZhbHVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIDApOworCisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
KyAgICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwgTGltaXRzVHJhaXQ6Om1h
eFZhbHVlKTsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6
CisgICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7CisgICAg
fQorCisgICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICB4ID0geCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihm
YWJzKHgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZm1vZCh4LCBMaW1pdHNUcmFpdDo6
bnVtYmVyT2ZWYWx1ZXMpKTsKK30KKworaW50OF90IHRvSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlcklu
dDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2UpOworfQorCit1aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50
PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2UpOworfQorCitpbnQ4X3QgdG9JbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90Pihz
dGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQor
Cit1aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKworLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvV2ViSURMLyNlcy1ieXRlCitpbnQ4X3QgdG9JbnQ4KEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0
YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQor
CisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLW9jdGV0Cit1aW50OF90IHRvVUlu
dDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFs
bGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKTsKK30KKworaW50MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQx
Nl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlKTsKK30KKwordWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZf
dD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZSk7Cit9CisKK2ludDE2X3QgdG9JbnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQorCit1aW50MTZf
dCB0b1VJbnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
cmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1dlYklETC8jZXMtc2hvcnQKK2ludDE2X3QgdG9JbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0
dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtc2hvcnQKK3VpbnQxNl90IHRv
VUludDE2KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRv
U21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwv
I2VzLWxvbmcKK2ludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkK
KyAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAg
ICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBrTWluSW50MzIsIGtNYXhJbnQzMik7Cit9
CisKK2ludDMyX3QgdG9JbnQzMkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50
MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1
cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPGludDMyX3Q+KHgpOworfQorCit1aW50MzJf
dCB0b1VJbnQzMkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwor
CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6
OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88dWludDMyX3Q+KHgpOworfQorCisvLyBodHRwOi8vd3d3
LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmcKK3VpbnQzMl90IHRvVUludDMyRW5m
b3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUlu
dDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0
ZSwgeCwgMCwga01heFVJbnQzMik7Cit9CisKK2ludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgLWtKU01h
eEludGVnZXIsIGtKU01heEludGVnZXIpOworfQorCit1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VS
YW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwg
MCwga0pTTWF4SW50ZWdlcik7Cit9CisKK2ludDY0X3QgdG9JbnQ2NENsYW1wKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8
aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+KHgsIC1rSlNNYXhJbnRl
Z2VyKSwga0pTTWF4SW50ZWdlcikpOworfQorCit1aW50NjRfdCB0b1VJbnQ2NENsYW1wKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVl
LnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAwKSwg
a0pTTWF4SW50ZWdlcikpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2Vz
LWxvbmctbG9uZworaW50NjRfdCB0b0ludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworCisgICAgLy8g
TWFwIE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1
bG8gMl42NC4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbjsKKyAgICBkb3VibGVUb0ludGVnZXIo
eCwgbik7CisgICAgcmV0dXJuIG47Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklE
TC8jZXMtdW5zaWduZWQtbG9uZy1sb25nCit1aW50NjRfdCB0b1VJbnQ2NChFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0
YXRlKTsKKworICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZp
bml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG47CisgICAg
ZG91YmxlVG9JbnRlZ2VyKHgsIG4pOworICAgIHJldHVybiBuOworfQorCitjbGFzcyBHZXRDYWxs
ZXJHbG9iYWxPYmplY3RGdW5jdG9yIHsKK3B1YmxpYzoKKyAgICBHZXRDYWxsZXJHbG9iYWxPYmpl
Y3RGdW5jdG9yKCkgPSBkZWZhdWx0OworCisgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0
b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1f
aGFzU2tpcHBlZEZpcnN0RnJhbWUpIHsKKyAgICAgICAgICAgIG1faGFzU2tpcHBlZEZpcnN0RnJh
bWUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoYXV0byogY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJs
b2NrKCkpCisgICAgICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHZpc2l0b3ItPmNhbGxl
ZSgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYWxsZWUgaXMgbm90IGFuIG9iamVjdCBpZiB0
aGUgY2FsbGVyIGlzIFdlYiBBc3NlbWJseS4KKyAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hh
dCB0byBkbyBoZXJlLiBXZSBjYW4gcHJvYmFibHkgZ2V0IHRoZSBnbG9iYWwgb2JqZWN0CisgICAg
ICAgICAgICAvLyBmcm9tIHRoZSB0b3AtbW9zdCBXYXNtIEluc3RhbmNlLiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzIxCisgICAgICAgICAgICBpZiAodmlzaXRv
ci0+Y2FsbGVlKCktPmlzT2JqZWN0KCkpCisgICAgICAgICAgICAgICAgbV9nbG9iYWxPYmplY3Qg
PSBqc0Nhc3Q8SlNPYmplY3QqPih2aXNpdG9yLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CisgICAgfQorCisg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFs
T2JqZWN0OyB9CisKK3ByaXZhdGU6CisgICAgbXV0YWJsZSBib29sIG1faGFzU2tpcHBlZEZpcnN0
RnJhbWUgeyBmYWxzZSB9OworICAgIG11dGFibGUgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2Jq
ZWN0IHsgbnVsbHB0ciB9OworfTsKKworRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coRXhlY1N0
YXRlKiBleGVjKQoreworICAgIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgaXRlcjsKKyAg
ICBleGVjLT5pdGVyYXRlKGl0ZXIpOworICAgIHJldHVybiBpdGVyLmdsb2JhbE9iamVjdCgpID8g
YXNKU0RPTVdpbmRvdyhpdGVyLmdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpIDogZmlyc3RET01X
aW5kb3coZXhlYyk7Cit9CisKK0RPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLT53cmFwcGVkKCk7Cit9CisKK0RPTVdpbmRvdyYgZmlyc3RET01XaW5kb3coRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKSktPndyYXBwZWQoKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGNhbkFjY2Vz
c0RvY3VtZW50KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRG9jdW1lbnQqIHRhcmdldERvY3VtZW50
LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCit7CisgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgaWYgKCF0YXJnZXREb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgRE9NV2luZG93JiBhY3RpdmUgPSBhY3RpdmVET01XaW5kb3coc3RhdGUpOworCisgICAgaWYg
KGFjdGl2ZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLmNhbkFjY2Vzcyh0YXJnZXREb2N1
bWVudC0+c2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3dp
dGNoIChyZXBvcnRpbmdPcHRpb24pIHsKKyAgICBjYXNlIFRocm93U2VjdXJpdHlFcnJvcjoKKyAg
ICAgICAgdGhyb3dTZWN1cml0eUVycm9yKCpzdGF0ZSwgc2NvcGUsIHRhcmdldERvY3VtZW50LT5k
b21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTG9nU2VjdXJpdHlFcnJvcjoKKyAgICAgICAgcHJpbnRFcnJv
ck1lc3NhZ2VGb3JGcmFtZSh0YXJnZXREb2N1bWVudC0+ZnJhbWUoKSwgdGFyZ2V0RG9jdW1lbnQt
PmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3I6CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCaW5kaW5nU2Vj
dXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBET01XaW5kb3cmIHRhcmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0
aW9uKQoreworICAgIHJldHVybiBjYW5BY2Nlc3NEb2N1bWVudChzdGF0ZSwgdGFyZ2V0LmRvY3Vt
ZW50KCksIHJlcG9ydGluZ09wdGlvbik7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBGcmFtZSogdGFyZ2V0
LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCit7CisgICAgcmV0dXJu
IHRhcmdldCAmJiBjYW5BY2Nlc3NEb2N1bWVudChzdGF0ZSwgdGFyZ2V0LT5kb2N1bWVudCgpLCBy
ZXBvcnRpbmdPcHRpb24pOworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb05vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBOb2RlKiB0YXJnZXQpCit7CisgICAg
cmV0dXJuICF0YXJnZXQgfHwgY2FuQWNjZXNzRG9jdW1lbnQoJnN0YXRlLCAmdGFyZ2V0LT5kb2N1
bWVudCgpLCBMb2dTZWN1cml0eUVycm9yKTsKK30KKyAgICAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1
ZSB0aHJvd1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGVycm9yTWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lk
IGFwcGVuZEFyZ3VtZW50TXVzdEJlKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIHVuc2lnbmVkIGFy
Z3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiQXJndW1lbnQgIik7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoYXJndW1lbnRJ
bmRleCArIDEpOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICgnIik7CisgICAgYnVpbGRl
ci5hcHBlbmQoYXJndW1lbnROYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIicpIHRv
ICIpOworICAgIGlmICghZnVuY3Rpb25OYW1lKSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgidGhlICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChpbnRlcmZhY2VOYW1lKTsKKyAg
ICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgY29uc3RydWN0b3IiKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBidWlsZGVyLmFwcGVuZChpbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJy4nKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZnVuY3Rpb25OYW1lKTsKKyAg
ICB9CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgbXVzdCBiZSAiKTsKK30KKworSlNDOjpF
bmNvZGVkSlNWYWx1ZSByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKQoreworICAgIGF1dG8mIGNvbnRleHQgPSAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgIGNvbnRleHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VM
ZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJv
cGVydHkgJyIsIGF0dHJpYnV0ZU5hbWUsICInIG9uIGEgbm9uLSIsIGludGVyZmFjZU5hbWUsICIg
b2JqZWN0LiIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
fQorICAgIAordm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKQoreworICAgIGF1dG8mIGNvbnRleHQgPSAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgIGNvbnRleHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VM
ZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBzZXQgcHJvcGVy
dHkgJyIsIGF0dHJpYnV0ZU5hbWUsICInIG9uIGEgbm9uLSIsIGludGVyZmFjZU5hbWUsICIgb2Jq
ZWN0LiIpKTsKK30KKwordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4
Y2VwdGlvbigpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01F
eGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUikpOworfQorCit2b2lkIHRocm93Tm90
U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkpOworICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOworICAgIHRocm93RXhjZXB0
aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JU
RURfRVJSLCAmbWVzc2FnZVN0cmluZykpOworfQorCit2b2lkIHRocm93SW52YWxpZFN0YXRlRXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBj
aGFyKiBtZXNzYWdlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIFN0
cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElOVkFMSURfU1RBVEVfRVJSLCAmbWVz
c2FnZVN0cmluZykpOworfQorCit2b2lkIHRocm93U2VjdXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigm
c3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTRUNVUklUWV9FUlIsIG1l
c3NhZ2UpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51
bUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5z
aWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3Qg
Y2hhciogZXhwZWN0ZWRWYWx1ZXMpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAg
IGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFt
ZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOworICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgib25lIG9mOiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFZhbHVl
cyk7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50
b1N0cmluZygpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJl
RnVuY3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVy
LCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFt
ZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJhIGZ1bmN0aW9uIik7CisgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKK30K
KworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRl
eCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFj
ZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBl
KQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBhcHBlbmRBcmd1bWVudE11c3RC
ZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNl
TmFtZSwgZnVuY3Rpb25OYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImFuIGluc3Rh
bmNlIG9mICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVHlwZSk7CisgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKK30K
Kwordm9pZCB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlLCBBU0NJSUxpdGVyYWwoIkludmFsaWQgQXJyYXkgZWxlbWVudCB0eXBlIikpOworfQorCit2
b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQoreworICAgIHRocm93VHlw
ZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcu
JywgYXR0cmlidXRlTmFtZSwgIiBhdHRyaWJ1dGUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiLCBl
eHBlY3RlZFR5cGUpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1JlcXVpcmVkTWVt
YmVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSwgY29uc3QgY2hhciogbWVtYmVyTmFtZSwgY29uc3QgY2hhciogZGljdGlvbmFyeU5hbWUsIGNv
bnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJNZW1iZXIgIik7CisgICAgYnVpbGRlci5hcHBlbmQo
ZGljdGlvbmFyeU5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7CisgICAgYnVpbGRlci5h
cHBlbmQobWVtYmVyTmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgaXMgcmVxdWly
ZWQgYW5kIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIik7CisgICAgYnVpbGRlci5hcHBlbmQoZXhw
ZWN0ZWRUeXBlKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBi
dWlsZGVyLnRvU3RyaW5nKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93Q29uc3Ry
dWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUpCit7CisgICAgcmV0dXJuIHRocm93Vk1FcnJvcigmc3RhdGUsIHNjb3BlLCBjcmVhdGVSZWZl
cmVuY2VFcnJvcigmc3RhdGUsIG1ha2VTdHJpbmcoaW50ZXJmYWNlTmFtZSwgIiBjb25zdHJ1Y3Rv
ciBhc3NvY2lhdGVkIGV4ZWN1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIikpKTsKK30KKwor
dm9pZCB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiVmFsdWUgaXMgbm90IGEgc2VxdWVuY2UiKSk7Cit9CisKK3ZvaWQgdGhyb3dO
b25GaW5pdGVUeXBlRXJyb3IoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlRo
ZSBwcm92aWRlZCB2YWx1ZSBpcyBub24tZmluaXRlIikpOworfQorCitTdHJpbmcgbWFrZUdldHRl
clR5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFj
ZU5hbWUsICcuJywgYXR0cmlidXRlTmFtZSwgIiBnZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBp
bnN0YW5jZXMgb2YgIiwgaW50ZXJmYWNlTmFtZSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKQoreworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIG1h
a2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGF0dHJpYnV0ZU5hbWUpKTsK
K30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlz
ZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFj
ZU5hbWUsIGF0dHJpYnV0ZU5hbWUpKTsKK30KKworYm9vbCB0aHJvd1NldHRlclR5cGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIq
IGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgdGhyb3dU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwg
Jy4nLCBhdHRyaWJ1dGVOYW1lLCAiIHNldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNl
cyBvZiAiLCBpbnRlcmZhY2VOYW1lKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcg
bWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiQ2FuIG9ubHkg
Y2FsbCAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGZ1bmN0aW9uTmFtZSwgIiBvbiBpbnN0YW5jZXMg
b2YgIiwgaW50ZXJmYWNlTmFtZSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3Nh
Z2UoaW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFs
dWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKERlZmVycmVkUHJvbWlzZSYgcHJvbWlz
ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKK3sK
KyAgICBwcm9taXNlLnJlamVjdChUeXBlRXJyb3IsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShp
bnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0
aFRoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZh
Y2VOYW1lLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lKQoreworICAgIHJldHVybiBjcmVhdGVSZWpl
Y3RlZFByb21pc2VXaXRoVHlwZUVycm9yKHN0YXRlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2Uo
aW50ZXJmYWNlTmFtZSwgbWV0aG9kTmFtZSkpOworfQorCit2b2lkIGNhbGxGdW5jdGlvbldpdGhD
dXJyZW50QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCYgdGhp
c09iamVjdCwgSlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBKU0M6OkNhbGxEYXRh
IGNhbGxEYXRhOworICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENhbGxEYXRh
KCZmdW5jdGlvbiwgY2FsbERhdGEpOworICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6
Tm9uZSk7CisKKyAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgIEpT
Qzo6Y2FsbCgmc3RhdGUsICZmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmdGhpc09iamVj
dCwgYXJndW1lbnRzKTsKK30KKwordm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PERPTUNvbnN0cnVjdG9ySlNCdWls
dGluT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVuY3Rpb24p
OworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsVGhyb3dUeXBl
RXJyb3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIG9w
ZXJhdG9yIikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworfQorCitD
YWxsVHlwZSBET01Db25zdHJ1Y3Rvck9iamVjdDo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERh
dGEmIGNhbGxEYXRhKQoreworICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxUaHJv
d1R5cGVFcnJvcjsKKyAgICByZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7Cit9CisKK3ZvaWQgdGhyb3dE
T01TeW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRp
b24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU1lOVEFYX0VSUikp
OworfQorCit2b2lkIHRocm93RGF0YUNsb25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigm
c3RhdGUsIERBVEFfQ0xPTkVfRVJSKSk7Cit9CisKK3ZvaWQgdGhyb3dJbmRleFNpemVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5ERVhfU0laRV9FUlIpKTsKK30KKwordm9p
ZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0
aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBU
WVBFX01JU01BVENIX0VSUikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3Bw
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5jcHAJKHJldmlzaW9uIDIxMTM1
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjAsMzY3ICsyMCwyMCBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRp
bmdTZWN1cml0eS5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiQ29t
bW9uVk0uaCIKLSNpbmNsdWRlICJET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oIgotI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24u
aCIKLSNpbmNsdWRlICJFeGNlcHRpb25IZWFkZXJzLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uSW50
ZXJmYWNlcy5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIK
LSNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5o
IgotI2luY2x1ZGUgIkpTRXhjZXB0aW9uQmFzZS5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9u
SGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKICNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgPGJ5dGVjb2RlL0NvZGVCbG9jay5oPgotI2luY2x1ZGUg
PGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0
Q2FsbFN0YWNrRmFjdG9yeS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JIYW5kbGlu
Z1Njb3BlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvckluc3RhbmNlLmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9FeGNlcHRpb24uaD4KLSNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
aD4KLSNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4K
LSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJh
Y3Rlck5hbWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9NQ29uc3RydWN0b3JPYmplY3QpOwotU1RB
VElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yV2l0aERv
Y3VtZW50KTsKLQotdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIHBy
b3BlcnR5TmFtZSkKLXsKLSAgICBjb21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5
TmFtZSk7Ci19Ci0KLUpTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFN0cmluZyYgcykKLXsKLSAgICBpZiAocy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOwotICAgIHJldHVybiBqc093bmVkU3RyaW5nKGV4ZWMsIHMpOwotfQotCi1KU1Zh
bHVlIGpzU3RyaW5nT3JVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMp
Ci17Ci0gICAgaWYgKHMuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBzKTsKLX0KLQotSlNWYWx1ZSBqc1N0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVSTCYgdXJsKQotewotICAgIHJldHVybiBqc1N0
cmluZ1dpdGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkpOwotfQotCi1KU1ZhbHVlIGpzU3RyaW5n
T3JVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKLXsKLSAgICBpZiAo
dXJsLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4g
anNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdXJsLnN0cmluZygpKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBTdHJpbmcgc3RyaW5nVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUsIFN0cmluZyYmIHN0cmluZykKLXsKLSAgICBpZiAoIXN0cmluZy5jb250YWlu
c09ubHlMYXRpbjEoKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RyaW5nOwotfQotCi1T
dHJpbmcgaWRlbnRpZmllclRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgU3RyaW5nIHN0cmluZyA9
IGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0
ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Ci19Ci0KLVN0cmluZyB2YWx1ZVRvQnl0ZVN0cmlu
ZyhFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAg
U3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmco
c3RhdGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wg
aGFzVW5wYWlyZWRTdXJyb2dhdGUoU3RyaW5nVmlldyBzdHJpbmcpCi17Ci0gICAgLy8gRmFzdCBw
YXRoIGZvciA4LWJpdCBzdHJpbmdzOyB0aGV5IGNhbid0IGhhdmUgYW55IHN1cnJvZ2F0ZXMuCi0g
ICAgaWYgKHN0cmluZy5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAo
YXV0byBjb2RlUG9pbnQgOiBzdHJpbmcuY29kZVBvaW50cygpKSB7Ci0gICAgICAgIGlmIChVX0lT
X1NVUlJPR0FURShjb2RlUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9VU1ZT
dHJpbmcoU3RyaW5nJiYgc3RyaW5nKQotewotICAgIC8vIEZhc3QgcGF0aCBmb3IgdGhlIGNhc2Ug
d2hlcmUgdGhlcmUgYXJlIG5vIHVucGFpcmVkIHN1cnJvZ2F0ZXMuCi0gICAgaWYgKCFoYXNVbnBh
aXJlZFN1cnJvZ2F0ZShzdHJpbmcpKQotICAgICAgICByZXR1cm4gc3RyaW5nOwotCi0gICAgLy8g
U2xvdyBwYXRoOiBodHRwOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1vYnRhaW4tdW5p
Y29kZQotICAgIC8vIFJlcGxhY2VzIHVucGFpcmVkIHN1cnJvZ2F0ZXMgd2l0aCB0aGUgcmVwbGFj
ZW1lbnQgY2hhcmFjdGVyLgotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIHJlc3VsdC5y
ZXNlcnZlQ2FwYWNpdHkoc3RyaW5nLmxlbmd0aCgpKTsKLSAgICBTdHJpbmdWaWV3IHZpZXcgeyBz
dHJpbmcgfTsKLSAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogdmlldy5jb2RlUG9pbnRzKCkpIHsK
LSAgICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCi0gICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChjb2RlUG9pbnQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LnRv
U3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKLXsKLSAgICBTdHJpbmcgc3RyaW5nID0gaWRl
bnRpZmllci5zdHJpbmcoKTsKLSAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShz
dHJpbmcpKTsKLX0KLQotU3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1
ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0KLSAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKLX0K
LQotSlNWYWx1ZSBqc0RhdGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUpCi17Ci0gICAg
cmV0dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7Ci19Ci0KLWRvdWJsZSB2YWx1ZVRv
RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlz
TnVtYmVyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc051bWJlcigpOwotICAgIGlmICghdmFs
dWUuaW5oZXJpdHMoZXhlYy0+dm0oKSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpKQotICAgICAgICBy
ZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odmFsdWUudG9PYmplY3QoZXhlYykpLT5pbnRl
cm5hbE51bWJlcigpOwotfQotCi12b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQotewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRo
cmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0gICAgYXV0byogZXhjZXB0aW9uID0ganNEeW5hbWlj
RG93bmNhc3Q8SlNDOjpFeGNlcHRpb24qPih2bSwgZXhjZXB0aW9uVmFsdWUpOwotICAgIGlmICgh
ZXhjZXB0aW9uKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IHZtLmxhc3RFeGNlcHRpb24oKTsKLSAg
ICAgICAgaWYgKCFleGNlcHRpb24pCi0gICAgICAgICAgICBleGNlcHRpb24gPSBKU0M6OkV4Y2Vw
dGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4Y2VwdGlvblZhbHVlLCBKU0M6OkV4Y2VwdGlvbjo6
RG9Ob3RDYXB0dXJlU3RhY2spOwotICAgIH0KLQotICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBl
eGNlcHRpb24sIGNhY2hlZFNjcmlwdCk7Ci19Ci0KLVN0cmluZyByZXRyaWV2ZUVycm9yTWVzc2Fn
ZShFeGVjU3RhdGUmIHN0YXRlLCBWTSYgdm0sIEpTVmFsdWUgZXhjZXB0aW9uLCBDYXRjaFNjb3Bl
JiBjYXRjaFNjb3BlKQotewotICAgIGlmIChhdXRvKiBleGNlcHRpb25CYXNlID0gdG9FeGNlcHRp
b25CYXNlKHZtLCBleGNlcHRpb24pKQotICAgICAgICByZXR1cm4gZXhjZXB0aW9uQmFzZS0+dG9T
dHJpbmcoKTsKLQotICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdl
YiBJbnNwZWN0b3I6IFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbiBzaG91bGQgbm90IGV2YWx1YXRl
IEphdmFTY3JpcHQgaGFuZGxpbmcgZXhjZXB0aW9ucwotICAgIC8vIElmIHRoaXMgaXMgYSBjdXN0
b20gZXhjZXB0aW9uIG9iamVjdCwgY2FsbCB0b1N0cmluZyBvbiBpdCB0byB0cnkgYW5kIGdldCBh
IG5pY2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZXhjZXB0aW9uLgotICAgIFN0cmlu
ZyBlcnJvck1lc3NhZ2U7Ci0gICAgaWYgKGF1dG8qIGVycm9yID0ganNEeW5hbWljRG93bmNhc3Q8
RXJyb3JJbnN0YW5jZSo+KHZtLCBleGNlcHRpb24pKQotICAgICAgICBlcnJvck1lc3NhZ2UgPSBl
cnJvci0+c2FuaXRpemVkVG9TdHJpbmcoJnN0YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIGVycm9y
TWVzc2FnZSA9IGV4Y2VwdGlvbi50b1dURlN0cmluZygmc3RhdGUpOwotCi0gICAgLy8gV2UgbmVl
ZCB0byBjbGVhciBhbnkgbmV3IGV4Y2VwdGlvbiB0aGF0IG1heSBiZSB0aHJvd24gaW4gdGhlIHRv
U3RyaW5nKCkgY2FsbCBhYm92ZS4KLSAgICAvLyByZXBvcnRFeGNlcHRpb24oKSBpcyBub3Qgc3Vw
cG9zZWQgdG8gYmUgbWFraW5nIG5ldyBleGNlcHRpb25zLgotICAgIGNhdGNoU2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKLSAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gZXJy
b3JNZXNzYWdlOwotfQotCi12b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
Qzo6RXhjZXB0aW9uKiBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0LCBFeGNl
cHRpb25EZXRhaWxzKiBleGNlcHRpb25EZXRhaWxzKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgUkVM
RUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0gICAgaWYg
KGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbih2bSwgZXhjZXB0aW9uKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoZXhlYy0+dm0oKSk7
Ci0KLSAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2Fs
bFN0YWNrRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4
Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVyZSkpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0g
ICAgdm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7Ci0KLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKTsKLSAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTRE9NV2luZG93Kj4odm0sIGdsb2JhbE9iamVjdCkpIHsKLSAgICAgICAgaWYgKCF3aW5k
b3ctPndyYXBwZWQoKS5pc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgbGluZU51bWJlciA9IDA7Ci0gICAgaW50IGNvbHVt
bk51bWJlciA9IDA7Ci0gICAgU3RyaW5nIGV4Y2VwdGlvblNvdXJjZVVSTDsKLSAgICBpZiAoY29u
c3QgU2NyaXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsU3RhY2stPmZpcnN0Tm9uTmF0aXZl
Q2FsbEZyYW1lKCkpIHsKLSAgICAgICAgbGluZU51bWJlciA9IGNhbGxGcmFtZS0+bGluZU51bWJl
cigpOwotICAgICAgICBjb2x1bW5OdW1iZXIgPSBjYWxsRnJhbWUtPmNvbHVtbk51bWJlcigpOwot
ICAgICAgICBleGNlcHRpb25Tb3VyY2VVUkwgPSBjYWxsRnJhbWUtPnNvdXJjZVVSTCgpOwotICAg
IH0KLQotICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSByZXRyaWV2ZUVycm9yTWVzc2FnZSgqZXhl
Yywgdm0sIGV4Y2VwdGlvbi0+dmFsdWUoKSwgc2NvcGUpOwotICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKLSAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5yZXBvcnRFeGNlcHRp
b24oZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGV4Y2VwdGlvblNvdXJj
ZVVSTCwgZXhjZXB0aW9uLCBjYWxsU3RhY2stPnNpemUoKSA/IGNhbGxTdGFjayA6IG51bGxwdHIs
IGNhY2hlZFNjcmlwdCk7Ci0KLSAgICBpZiAoZXhjZXB0aW9uRGV0YWlscykgewotICAgICAgICBl
eGNlcHRpb25EZXRhaWxzLT5tZXNzYWdlID0gZXJyb3JNZXNzYWdlOwotICAgICAgICBleGNlcHRp
b25EZXRhaWxzLT5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICAgICAgZXhjZXB0aW9uRGV0
YWlscy0+Y29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOwotICAgICAgICBleGNlcHRpb25EZXRh
aWxzLT5zb3VyY2VVUkwgPSBleGNlcHRpb25Tb3VyY2VVUkw7Ci0gICAgfQotfQotCi12b2lkIHJl
cG9ydEN1cnJlbnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotICAg
IGF1dG8qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwotICAgIHNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7Ci0gICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlv
bkNvZGUgZWMsIGNvbnN0IFN0cmluZyogbWVzc2FnZSA9IG51bGxwdHIpCi17Ci0gICAgaWYgKCFl
YyB8fCBlYyA9PSBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yKQotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLQotICAgIC8vIEZJWE1FOiBIYW5kbGUgb3RoZXIgV2ViSURMIGV4Y2VwdGlvbiB0
eXBlcy4KLSAgICBpZiAoZWMgPT0gVHlwZUVycm9yKSB7Ci0gICAgICAgIGlmICghbWVzc2FnZSB8
fCBtZXNzYWdlLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9y
KGV4ZWMpOwotICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMsICptZXNzYWdlKTsK
LSAgICB9Ci0KLSAgICBpZiAoZWMgPT0gUmFuZ2VFcnJvcikgewotICAgICAgICBpZiAoIW1lc3Nh
Z2UgfHwgbWVzc2FnZS0+aXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJhbmdl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJCYWQgdmFsdWUiKSk7Ci0gICAgICAgIHJldHVybiBj
cmVhdGVSYW5nZUVycm9yKGV4ZWMsICptZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBpZiAoZWMgPT0g
U3RhY2tPdmVyZmxvd0Vycm9yKQotICAgICAgICByZXR1cm4gY3JlYXRlU3RhY2tPdmVyZmxvd0Vy
cm9yKGV4ZWMpOwotCi0gICAgLy8gRklYTUU6IEFsbCBjYWxsZXJzIHRvIGNyZWF0ZURPTUV4Y2Vw
dGlvbiBuZWVkIHRvIHBhc3MgaW4gdGhlIGNvcnJlY3QgZ2xvYmFsIG9iamVjdC4KLSAgICAvLyBG
b3Igbm93LCB3ZSdyZSBnb2luZyB0byBhc3N1bWUgdGhlIGxleGljYWxHbG9iYWxPYmplY3QuIFdo
aWNoIGlzIHdyb25nIGluIGNhc2VzIGxpa2UgdGhpczoKLSAgICAvLyBmcmFtZXNbMF0uZG9jdW1l
bnQuY3JlYXRlRWxlbWVudChudWxsLCBudWxsKTsgLy8gdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGlj
aCBzaG91bGQgaGF2ZSB0aGUgc3ViZnJhbWUncyBwcm90b3R5cGVzLgotICAgIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBl
KGV4ZWMpOwotCi0gICAgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsK
LQotICAgIENTdHJpbmcgbWVzc2FnZUNTdHJpbmc7Ci0gICAgaWYgKG1lc3NhZ2UpCi0gICAgICAg
IG1lc3NhZ2VDU3RyaW5nID0gbWVzc2FnZS0+dXRmOCgpOwotICAgIGlmIChtZXNzYWdlICYmICFt
ZXNzYWdlLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gSXQgaXMgc2FmZSB0byBkbyB0aGlzIGJl
Y2F1c2UgdGhlIGNoYXIqIGNvbnRlbnRzIG9mIHRoZSBDU3RyaW5nIGFyZSBjb3BpZWQgaW50byBh
IG5ldyBXVEY6OlN0cmluZyBiZWZvcmUgdGhlIENTdHJpbmcgaXMgZGVzdHJveWVkLgotICAgICAg
ICBkZXNjcmlwdGlvbi5kZXNjcmlwdGlvbiA9IG1lc3NhZ2VDU3RyaW5nLmRhdGEoKTsKLSAgICB9
Ci0KLSAgICBKU1ZhbHVlIGVycm9yT2JqZWN0OwotICAgIHN3aXRjaCAoZGVzY3JpcHRpb24udHlw
ZSkgewotICAgIGNhc2UgRE9NQ29yZUV4Y2VwdGlvblR5cGU6Ci0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0gICAgY2FzZSBJREJEYXRhYmFzZUV4Y2VwdGlvblR5cGU6Ci0jZW5kaWYKLSAg
ICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgRE9NQ29yZUV4Y2Vw
dGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmls
ZUV4Y2VwdGlvblR5cGU6Ci0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIEZpbGVFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFNRTEV4Y2VwdGlvblR5cGU6Ci0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIFNRTEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXJy
b3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHRXhjZXB0aW9uOjpjcmVhdGUo
ZGVzY3JpcHRpb24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYUGF0aEV4Y2VwdGlvblR5
cGU6Ci0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFhQYXRo
RXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIAotICAgIEFTU0VSVChlcnJvck9iamVjdCk7Ci0gICAgYWRkRXJyb3JJbmZvKGV4ZWMsIGFz
T2JqZWN0KGVycm9yT2JqZWN0KSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIGVycm9yT2JqZWN0OwotfQot
Ci1KU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNv
ZGUgZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlRE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjLCAmbWVzc2FnZSk7Ci19Ci0KLUpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKLXsKLSAgICByZXR1
cm4gY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgZXhjZXB0aW9uLmNvZGUoKSwgZXhjZXB0aW9u
LnJlbGVhc2VNZXNzYWdlKCkpOwotfQotCi12b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRo
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNl
cHRpb24mJiBleGNlcHRpb24pCi17Ci0gICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZURPTUV4Y2Vw
dGlvbihzdGF0ZSwgV1RGTW92ZShleGNlcHRpb24pKSk7Ci19Ci0KLWJvb2wgaGFzSXRlcmF0b3JN
ZXRob2QoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
YXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLQotICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAg
IENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlOwotICAgIEpTVmFsdWUg
YXBwbHlNZXRob2QgPSBvYmplY3QtPmdldE1ldGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlw
ZSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9s
Lml0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0KLSAgICByZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5k
ZWZpbmVkKCk7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1Rv
RnJhbWUoRXhlY1N0YXRlJiBzdGF0ZSwgRnJhbWUmIGZyYW1lLCBTdHJpbmcmIG1lc3NhZ2UpCi17
Ci0gICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKCZzdGF0
ZSwgJmZyYW1lLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBtZXNzYWdlID0gZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmNyb3NzRG9t
YWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1Rv
RE9NV2luZG93KEV4ZWNTdGF0ZSYgc3RhdGUsIERPTVdpbmRvdyYgZ2xvYmFsT2JqZWN0LCBTdHJp
bmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nl
c3NUb0RPTVdpbmRvdygmc3RhdGUsIGdsb2JhbE9iamVjdCwgRG9Ob3RSZXBvcnRTZWN1cml0eUVy
cm9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgbWVzc2FnZSA9IGdsb2JhbE9iamVjdC5j
cm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJh
bWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgaWYgKCFmcmFtZSkKQEAg
LTM4OCwzODEgKzQxLDYgQEAgdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiBm
cgogICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+cHJpbnRFcnJvck1lc3NhZ2Uo
bWVzc2FnZSk7CiB9CiAKLVN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQotewot
ICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LnN0cnVjdHVy
ZXMoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKLSAgICByZXR1cm4gc3RydWN0dXJlcy5nZXQoY2xhc3NJ
bmZvKS5nZXQoKTsKLX0KLQotU3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8pCi17Ci0gICAgYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFya2luZyhn
bG9iYWxPYmplY3Qudm0oKS5oZWFwLCBnbG9iYWxPYmplY3QuZ2NMb2NrKCkpOwotICAgIEpTRE9N
U3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LnN0cnVjdHVyZXMobG9ja2Vy
KTsKLSAgICBBU1NFUlQoIXN0cnVjdHVyZXMuY29udGFpbnMoY2xhc3NJbmZvKSk7Ci0gICAgcmV0
dXJuIHN0cnVjdHVyZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4oZ2xv
YmFsT2JqZWN0LnZtKCksICZnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJhdG9yLT52YWx1
ZS5nZXQoKTsKLX0KLQotc3RhdGljIGNvbnN0IGludDMyX3Qga01heEludDMyID0gMHg3ZmZmZmZm
ZjsKLXN0YXRpYyBjb25zdCBpbnQzMl90IGtNaW5JbnQzMiA9IC1rTWF4SW50MzIgLSAxOwotc3Rh
dGljIGNvbnN0IHVpbnQzMl90IGtNYXhVSW50MzIgPSAweGZmZmZmZmZmVTsKLXN0YXRpYyBjb25z
dCBpbnQ2NF90IGtKU01heEludGVnZXIgPSAweDIwMDAwMDAwMDAwMDAwTEwgLSAxOyAvLyAyXjUz
IC0gMSwgbGFyZ2VzdCBpbnRlZ2VyIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBpbiBFQ01BU2NyaXB0
LgotCi1zdGF0aWMgU3RyaW5nIHJhbmdlRXJyb3JTdHJpbmcoZG91YmxlIHZhbHVlLCBkb3VibGUg
bWluLCBkb3VibGUgbWF4KQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJWYWx1ZSAiLCBTdHJp
bmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdCh2YWx1ZSksICIgaXMgb3V0c2lkZSB0aGUgcmFu
Z2UgWyIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1pbiksICIsICIsIFN0cmlu
Zzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1heCksICJdIik7Ci19Ci0KLXN0YXRpYyBkb3Vi
bGUgZW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB4LCBkb3VibGUgbWluaW11
bSwgZG91YmxlIG1heGltdW0pCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoc3RkOjppc25hbih4
KSB8fCBzdGQ6OmlzaW5mKHgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgeCA9IHRydW5jKHgpOwotICAgIGlmICh4IDwgbWluaW11bSB8fCB4
ID4gbWF4aW11bSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5n
ZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIHJldHVybiB4OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBJ
bnRUeXBlTGltaXRzIHsKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czxp
bnQ4X3Q+IHsKLSAgICBzdGF0aWMgY29uc3QgaW50OF90IG1pblZhbHVlID0gLTEyODsKLSAgICBz
dGF0aWMgY29uc3QgaW50OF90IG1heFZhbHVlID0gMTI3OwotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBudW1iZXJPZlZhbHVlcyA9IDI1NjsgLy8gMl44Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3Ry
dWN0IEludFR5cGVMaW1pdHM8dWludDhfdD4gewotICAgIHN0YXRpYyBjb25zdCB1aW50OF90IG1h
eFZhbHVlID0gMjU1OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9
IDI1NjsgLy8gMl44Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8aW50
MTZfdD4gewotICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtaW5WYWx1ZSA9IC0zMjc2ODsKLSAgICBz
dGF0aWMgY29uc3Qgc2hvcnQgbWF4VmFsdWUgPSAzMjc2NzsKLSAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgotfTsKLQotdGVtcGxhdGUgPD4K
LXN0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQxNl90PiB7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIHNob3J0IG1heFZhbHVlID0gNjU1MzU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51
bWJlck9mVmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
Pgotc3RhdGljIGlubGluZSBUIHRvU21hbGxlckludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsK
LSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zaWduZWQ8VD46OnZhbHVl
ICYmIHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Ig
c2lnbmVkIGludGVncmFsIHR5cGVzIik7Ci0KLSAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4g
TGltaXRzVHJhaXQ7Ci0gICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEg
MzItYml0IHNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KLSAgICBpZiAodmFsdWUu
aXNJbnQzMigpKSB7Ci0gICAgICAgIGludDMyX3QgZCA9IHZhbHVlLmFzSW50MzIoKTsKLSAgICAg
ICAgaWYgKGQgPj0gTGltaXRzVHJhaXQ6Om1pblZhbHVlICYmIGQgPD0gTGltaXRzVHJhaXQ6Om1h
eFZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwotICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAg
ICAgICAgcmV0dXJuIGQgPCBMaW1pdHNUcmFpdDo6bWluVmFsdWUgPyBMaW1pdHNUcmFpdDo6bWlu
VmFsdWUgOiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgZCAlPSBM
aW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXM7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
PihkID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8gZCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZh
bHVlcyA6IGQpOwotICAgIH0KLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLQotICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgewotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUs
IHgsIExpbWl0c1RyYWl0OjptaW5WYWx1ZSwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKLSAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgIHJldHVy
biBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7Ci0gICAgfQotCi0gICAgaWYgKHN0
ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICB4ID0geCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsKLSAgICB4
ID0gZm1vZCh4LCBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMpOwotCi0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KHggPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyB4IC0gTGltaXRzVHJhaXQ6
Om51bWJlck9mVmFsdWVzIDogeCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGlj
IGlubGluZSBUIHRvU21hbGxlclVJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgVk0m
IHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZhbHVlICYmIHN0
ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdW5zaWdu
ZWQgaW50ZWdyYWwgdHlwZXMiKTsKLQotICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBMaW1p
dHNUcmFpdDsKLSAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1i
aXQgdW5zaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCi0gICAgaWYgKHZhbHVlLmlz
VUludDMyKCkpIHsKLSAgICAgICAgdWludDMyX3QgZCA9IHZhbHVlLmFzVUludDMyKCk7Ci0gICAg
ICAgIGlmIChkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPihkKTsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1
cm4gTGltaXRzVHJhaXQ6Om1heFZhbHVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIDApOwotCi0gICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAg
cmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsK
LSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAg
IHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7Ci0gICAgfQotCi0gICAg
aWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICB4ID0geCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZm1vZCh4LCBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZW
YWx1ZXMpKTsKLX0KLQotaW50OF90IHRvSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+
KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2UpOwotfQotCi11aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+
KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2UpOwotfQotCi1pbnQ4X3QgdG9JbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi11aW50OF90
IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvV2ViSURMLyNlcy1ieXRlCi1pbnQ4X3QgdG9JbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi0vLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLW9jdGV0Ci11aW50OF90IHRvVUludDgoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1
aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKTsKLX0KLQotaW50MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0
ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsK
LX0KLQotdWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUs
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19
Ci0KLWludDE2X3QgdG9JbnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi11aW50MTZfdCB0b1VJbnQx
NkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRv
U21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8j
ZXMtc2hvcnQKLWludDE2X3QgdG9JbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cu
dzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtc2hvcnQKLXVpbnQxNl90IHRvVUludDE2KEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJ
bnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmcK
LWludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAg
cmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4g
ZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBrTWluSW50MzIsIGtNYXhJbnQzMik7Ci19Ci0KLWludDMy
X3QgdG9JbnQzMkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
aWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQot
ICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjpp
c25hbih4KSA/IDAgOiBjbGFtcFRvPGludDMyX3Q+KHgpOwotfQotCi11aW50MzJfdCB0b1VJbnQz
MkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
LmlzVUludDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgZG91
YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgp
ID8gMCA6IGNsYW1wVG88dWludDMyX3Q+KHgpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9U
Ui9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmcKLXVpbnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdl
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBp
ZiAodmFsdWUuaXNVSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0K
LSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgMCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwg
a01heFVJbnQzMik7Ci19Ci0KLWludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBkb3VibGUg
eCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgMCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgLWtKU01heEludGVnZXIs
IGtKU01heEludGVnZXIpOwotfQotCi11aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBk
b3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgMCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga0pTTWF4
SW50ZWdlcik7Ci19Ci0KLWludDY0X3QgdG9JbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8aW50NjRfdD4o
c3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+KHgsIC1rSlNNYXhJbnRlZ2VyKSwga0pT
TWF4SW50ZWdlcikpOwotfQotCi11aW50NjRfdCB0b1VJbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAwKSwga0pTTWF4SW50
ZWdlcikpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmctbG9u
ZwotaW50NjRfdCB0b0ludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotCi0gICAgLy8gTWFwIE5hTnMg
YW5kICsvLUluZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4K
LSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbjsKLSAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7Ci0g
ICAgcmV0dXJuIG47Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5z
aWduZWQtbG9uZy1sb25nCi11aW50NjRfdCB0b1VJbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLQot
ICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1
ZXMgbW9kdWxvIDJeNjQuCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIG47Ci0gICAgZG91YmxlVG9J
bnRlZ2VyKHgsIG4pOwotICAgIHJldHVybiBuOwotfQotCi1jbGFzcyBHZXRDYWxsZXJHbG9iYWxP
YmplY3RGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9y
KCkgPSBkZWZhdWx0OwotCi0gICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFj
a1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW1faGFzU2tpcHBl
ZEZpcnN0RnJhbWUpIHsKLSAgICAgICAgICAgIG1faGFzU2tpcHBlZEZpcnN0RnJhbWUgPSB0cnVl
OwotICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoYXV0byogY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCkpCi0g
ICAgICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHZpc2l0b3ItPmNhbGxlZSgpKTsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYWxsZWUgaXMgbm90IGFuIG9iamVjdCBpZiB0aGUgY2FsbGVy
IGlzIFdlYiBBc3NlbWJseS4KLSAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyBo
ZXJlLiBXZSBjYW4gcHJvYmFibHkgZ2V0IHRoZSBnbG9iYWwgb2JqZWN0Ci0gICAgICAgICAgICAv
LyBmcm9tIHRoZSB0b3AtbW9zdCBXYXNtIEluc3RhbmNlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzIxCi0gICAgICAgICAgICBpZiAodmlzaXRvci0+Y2FsbGVl
KCktPmlzT2JqZWN0KCkpCi0gICAgICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBqc0Nhc3Q8
SlNPYmplY3QqPih2aXNpdG9yLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7Ci0gICAgfQotCi0gICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0OyB9
Ci0KLXByaXZhdGU6Ci0gICAgbXV0YWJsZSBib29sIG1faGFzU2tpcHBlZEZpcnN0RnJhbWUgeyBm
YWxzZSB9OwotICAgIG11dGFibGUgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0IHsgbnVs
bHB0ciB9OwotfTsKLQotRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coRXhlY1N0YXRlKiBleGVj
KQotewotICAgIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgaXRlcjsKLSAgICBleGVjLT5p
dGVyYXRlKGl0ZXIpOwotICAgIHJldHVybiBpdGVyLmdsb2JhbE9iamVjdCgpID8gYXNKU0RPTVdp
bmRvdyhpdGVyLmdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpIDogZmlyc3RET01XaW5kb3coZXhl
Yyk7Ci19Ci0KLURPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT53
cmFwcGVkKCk7Ci19Ci0KLURPTVdpbmRvdyYgZmlyc3RET01XaW5kb3coRXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3Qo
KSktPndyYXBwZWQoKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGNhbkFjY2Vzc0RvY3VtZW50
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRG9jdW1lbnQqIHRhcmdldERvY3VtZW50LCBTZWN1cml0
eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CkBAIC03OTAsMjQ1ICs2OCwzNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuQWNjZXNz
RG9jdW1lbnQoSlNDCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEJpbmRpbmdTZWN1cml0
eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERP
TVdpbmRvdyYgdGFyZ2V0LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24p
Ci17Ci0gICAgcmV0dXJuIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJnZXQuZG9jdW1lbnQo
KSwgcmVwb3J0aW5nT3B0aW9uKTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEZyYW1lKiB0YXJnZXQsIFNl
Y3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKLXsKLSAgICByZXR1cm4gdGFy
Z2V0ICYmIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJnZXQtPmRvY3VtZW50KCksIHJlcG9y
dGluZ09wdGlvbik7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vz
c1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIE5vZGUqIHRhcmdldCkKLXsKLSAgICByZXR1
cm4gIXRhcmdldCB8fCBjYW5BY2Nlc3NEb2N1bWVudCgmc3RhdGUsICZ0YXJnZXQtPmRvY3VtZW50
KCksIExvZ1NlY3VyaXR5RXJyb3IpOwotfQotICAgIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIHRo
cm93VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKLX0KLQotc3RhdGljIHZvaWQgYXBw
ZW5kQXJndW1lbnRNdXN0QmUoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgdW5zaWduZWQgYXJndW1l
bnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJBcmd1bWVudCAiKTsKLSAgICBidWlsZGVyLmFwcGVuZE51bWJlcihhcmd1bWVudEluZGV4
ICsgMSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgKCciKTsKLSAgICBidWlsZGVyLmFw
cGVuZChhcmd1bWVudE5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJykgdG8gIik7
Ci0gICAgaWYgKCFmdW5jdGlvbk5hbWUpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJ0aGUgIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5hbWUpOwotICAgICAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBjb25zdHJ1Y3RvciIpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5hbWUpOwotICAgICAgICBidWlsZGVyLmFw
cGVuZCgnLicpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChmdW5jdGlvbk5hbWUpOwotICAgIH0K
LSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBtdXN0IGJlICIpOwotfQotCi1KU0M6OkVuY29k
ZWRKU1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUp
Ci17Ci0gICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0
ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAg
Y29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVs
OjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0
eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNlTmFtZSwgIiBvYmpl
Y3QuIikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0g
ICAgCi12b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUp
Ci17Ci0gICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0
ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAg
Y29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVs
OjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIHNldCBwcm9wZXJ0eSAn
IiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNlTmFtZSwgIiBvYmplY3Qu
IikpOwotfQotCi12b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2Vw
dGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSKSk7Ci19Ci0KLXZvaWQgdGhyb3dOb3RTdXBw
b3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUs
IGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7
Ci0gICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7Ci0gICAgdGhyb3dFeGNlcHRpb24o
JnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9F
UlIsICZtZXNzYWdlU3RyaW5nKSk7Ci19Ci0KLXZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIq
IG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgU3RyaW5n
IG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5WQUxJRF9TVEFURV9FUlIsICZtZXNzYWdl
U3RyaW5nKSk7Ci19Ci0KLXZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewot
ICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNFQ1VSSVRZX0VSUiwgbWVzc2Fn
ZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25l
ZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFy
KiBleHBlY3RlZFZhbHVlcykKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBw
ZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBm
dW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJvbmUgb2Y6ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVmFsdWVzKTsK
LSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3Ry
aW5nKCkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVGdW5j
dGlvbkVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
dW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwotICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFy
Z3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgaW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsK
LSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImEgZnVuY3Rpb24iKTsKLSAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOwotfQotCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBj
b25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCi17
Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1
aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1l
LCBmdW5jdGlvbk5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYW4gaW5zdGFuY2Ug
b2YgIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRUeXBlKTsKLSAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOwotfQotCi12
b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBBcnJheSBlbGVtZW50IHR5cGUiKSk7Ci19Ci0KLXZvaWQg
dGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRy
aWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCi17Ci0gICAgdGhyb3dUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBh
dHRyaWJ1dGVOYW1lLCAiIGF0dHJpYnV0ZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICIsIGV4cGVj
dGVkVHlwZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJU
eXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBj
b25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3Qg
Y2hhciogZXhwZWN0ZWRUeXBlKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIk1lbWJlciAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChkaWN0
aW9uYXJ5TmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJy4nKTsKLSAgICBidWlsZGVyLmFwcGVu
ZChtZW1iZXJOYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBpcyByZXF1aXJlZCBh
bmQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChleHBlY3Rl
ZFR5cGUpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxk
ZXIudG9TdHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3Rv
clNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSkK
LXsKLSAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZVJlZmVyZW5j
ZUVycm9yKCZzdGF0ZSwgbWFrZVN0cmluZyhpbnRlcmZhY2VOYW1lLCAiIGNvbnN0cnVjdG9yIGFz
c29jaWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKSkpOwotfQotCi12b2lk
IHRocm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKQotewotICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlM
aXRlcmFsKCJWYWx1ZSBpcyBub3QgYSBzZXF1ZW5jZSIpKTsKLX0KLQotdm9pZCB0aHJvd05vbkZp
bml0ZVR5cGVFcnJvcihFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQot
ewotICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIHBy
b3ZpZGVkIHZhbHVlIGlzIG5vbi1maW5pdGUiKSk7Ci19Ci0KLVN0cmluZyBtYWtlR2V0dGVyVHlw
ZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRy
aWJ1dGVOYW1lKQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFt
ZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGdldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3Rh
bmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJv
d0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUpCi17Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgbWFrZUdl
dHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgYXR0cmlidXRlTmFtZSkpOwotfQot
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0
aFR5cGVFcnJvcihzdGF0ZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFt
ZSwgYXR0cmlidXRlTmFtZSkpOwotfQotCi1ib29sIHRocm93U2V0dGVyVHlwZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKK2Jvb2wgQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoRXhlY1N0YXRlJiBzdGF0ZSwgRnJhbWUmIGZy
YW1lLCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
LCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAi
IHNldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1l
KSk7CisgICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKCZz
dGF0ZSwgJmZyYW1lLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBtZXNzYWdlID0gZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmNyb3Nz
RG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpKTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVN0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQotewotICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJDYW4gb25seSBjYWxsICIsIGludGVyZmFjZU5hbWUsICcuJywgZnVu
Y3Rpb25OYW1lLCAiIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKLX0KLQotRW5j
b2RlZEpTVmFsdWUgdGhyb3dUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lKQotewotICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUp
KTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJy
b3IoRGVmZXJyZWRQcm9taXNlJiBwcm9taXNlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBtZXRob2ROYW1lKQotewotICAgIHByb21pc2UucmVqZWN0KFR5cGVFcnJvciwg
bWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1KU0M6OkVuY29k
ZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUp
Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUs
IG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7Ci19
Ci0KLXZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0
aW9uKQotewotICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7Ci0gICAgSlNDOjpDYWxsVHlwZSBj
YWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoJmZ1bmN0aW9uLCBjYWxsRGF0YSk7Ci0gICAgQVNT
RVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKLQotICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgYXJndW1lbnRzOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5h
cmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZChzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgSlNDOjpjYWxsKCZzdGF0ZSwgJmZ1bmN0aW9uLCBjYWxs
VHlwZSwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVudHMpOwotfQotCi12b2lkIERPTUNv
bnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiBjZWxs
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QqPihjZWxsKTsKLSAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2luaXRpYWxpemVGdW5jdGlvbik7Ci19Ci0KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ29u
c3RydWN0b3IgcmVxdWlyZXMgJ25ldycgb3BlcmF0b3IiKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSk7Ci19Ci0KLUNhbGxUeXBlIERPTUNvbnN0cnVjdG9yT2JqZWN0Ojpn
ZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCi17Ci0gICAgY2FsbERhdGEu
bmF0aXZlLmZ1bmN0aW9uID0gY2FsbFRocm93VHlwZUVycm9yOwotICAgIHJldHVybiBDYWxsVHlw
ZTo6SG9zdDsKLX0KLQotdm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEV4ZWNTdGF0ZSYgc3RhdGUsIERPTVdpbmRvdyYgZ2xv
YmFsT2JqZWN0LCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0
aW9uKCZzdGF0ZSwgU1lOVEFYX0VSUikpOworICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3Vs
ZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRlLCBnbG9iYWxPYmplY3QsIERvTm90UmVwb3J0
U2VjdXJpdHlFcnJvcikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIG1lc3NhZ2UgPSBnbG9i
YWxPYmplY3QuY3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZz
dGF0ZSkpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCB0aHJvd0RhdGFDbG9uZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK2Jvb2wgQmlu
ZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgRE9NV2luZG93JiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9y
dGluZ09wdGlvbikKIHsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBEQVRB
X0NMT05FX0VSUikpOworICAgIHJldHVybiBjYW5BY2Nlc3NEb2N1bWVudChzdGF0ZSwgdGFyZ2V0
LmRvY3VtZW50KCksIHJlcG9ydGluZ09wdGlvbik7CiB9CiAKLXZvaWQgdGhyb3dJbmRleFNpemVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCitib29s
IEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgRnJhbWUqIHRhcmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5n
T3B0aW9uKQogewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhj
ZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElOREVYX1NJ
WkVfRVJSKSk7CisgICAgcmV0dXJuIHRhcmdldCAmJiBjYW5BY2Nlc3NEb2N1bWVudChzdGF0ZSwg
dGFyZ2V0LT5kb2N1bWVudCgpLCByZXBvcnRpbmdPcHRpb24pOwogfQogCi12b2lkIHRocm93VHlw
ZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKQorYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgTm9kZSogdGFyZ2V0KQogewotICAgIEFTU0VSVCghc2NvcGUuZXhj
ZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4
Y2VwdGlvbigmc3RhdGUsIFRZUEVfTUlTTUFUQ0hfRVJSKSk7CisgICAgcmV0dXJuICF0YXJnZXQg
fHwgY2FuQWNjZXNzRG9jdW1lbnQoJnN0YXRlLCAmdGFyZ2V0LT5kb2N1bWVudCgpLCBMb2dTZWN1
cml0eUVycm9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nU2VjdXJpdHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5oCShyZXZpc2lv
biAyMTEzNTMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5o
OjIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3Vy
aXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MjUgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAwNiwgMjAwOC0yMDA5LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2Ft
QHdlYmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxMiBFcmljc3NvbiBBQi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgTWljaGFlbCBQcnVldHQgPG1p
Y2hhZWxANjhrLm9yZz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCisjaW5jbHVkZSAiSlNET01HbG9iYWxP
YmplY3QuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJKU0R5bmFtaWNE
b3duY2FzdC5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgorI2luY2x1ZGUgIlNjcmlw
dFdyYXBwYWJsZUlubGluZXMuaCIKKyNpbmNsdWRlICJXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4K
KyNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvV2Vh
ay5oPgorI2luY2x1ZGUgPGhlYXAvV2Vha0lubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0F1
eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8cnVudGltZS9K
U0FycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDZWxsSW5s
aW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGltZS9Mb29rdXAuaD4KKyNp
bmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1dy
aXRlQmFycmllci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBmaWxlIGEgbG90IGVhc2llciB0
byByZWFkIGJ5IHB1dHRpbmcgYWxsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBhdCB0aGUgdG9wLAor
Ly8gYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zIGJlbG93LCBldmVuIGZvciB0ZW1wbGF0ZSBhbmQg
aW5saW5lIGZ1bmN0aW9ucy4KKworbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBKU0Z1bmN0aW9uOwor
fQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZFNjcmlwdDsKK2NsYXNzIERl
ZmVycmVkUHJvbWlzZTsKK2NsYXNzIERPTVdpbmRvdzsKK2NsYXNzIEZyYW1lOworY2xhc3MgVVJM
OworY2xhc3MgTm9kZTsKKworc3RydWN0IEV4Y2VwdGlvbkRldGFpbHMgeworICAgIFN0cmluZyBt
ZXNzYWdlOworICAgIGludCBsaW5lTnVtYmVyIHsgMCB9OworICAgIGludCBjb2x1bW5OdW1iZXIg
eyAwIH07CisgICAgU3RyaW5nIHNvdXJjZVVSTDsKK307CisKKy8vIEJhc2UgY2xhc3MgZm9yIGFs
bCBjb25zdHJ1Y3RvciBvYmplY3RzIGluIHRoZSBKU0MgYmluZGluZ3MuCitjbGFzcyBET01Db25z
dHJ1Y3Rvck9iamVjdCA6IHB1YmxpYyBKU0RPTU9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBKU0RPTU9iamVjdCBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2Ug
fCBKU0M6OkltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UgfCBKU0M6OlR5cGVPZlNob3VsZENh
bGxHZXRDYWxsRGF0YTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNWYWx1ZSk7CisKK3Byb3Rl
Y3RlZDoKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xv
YmFsT2JqZWN0Jik7CisKKyAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVj
dCopOworICAgIHN0YXRpYyBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIEpTQzo6
Q2FsbERhdGEmKTsKK307CisKK2NsYXNzIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0IDog
cHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNv
bnN0cnVjdG9yT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBET01Db25zdHJ1Y3RvckpT
QnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KTsKKworICAgIEpTQzo6SlNGdW5jdGlvbiogaW5pdGlhbGl6ZUZ1bmN0aW9uKCk7CisgICAgdm9p
ZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYsIEpTQzo6SlNGdW5jdGlvbiYpOworCitw
cml2YXRlOgorICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNGdW5jdGlvbj4gbV9pbml0aWFs
aXplRnVuY3Rpb247Cit9OworCitET01XaW5kb3cmIGNhbGxlckRPTVdpbmRvdyhKU0M6OkV4ZWNT
dGF0ZSopOworRE9NV2luZG93JiBhY3RpdmVET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKK0RP
TVdpbmRvdyYgZmlyc3RET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKKworV0VCQ09SRV9FWFBP
UlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9y
KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSk7CisKK3ZvaWQgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOworV0VCQ09S
RV9FWFBPUlQgYm9vbCB0aHJvd1NldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJp
YnV0ZU5hbWUpOworCit2b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93RGF0YUNsb25lRXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dET01TeW50YXhFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOyAvLyBOb3QgdGhlIHNhbWUgYXMgYSBK
YXZhU2NyaXB0IHN5bnRheCBlcnJvci4KK3ZvaWQgdGhyb3dJbmRleFNpemVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVzc2FnZSk7
CitXRUJDT1JFX0VYUE9SVCB2b2lkIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpOwordm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworV0VCQ09SRV9FWFBPUlQgdm9pZCB0aHJv
d1NlcXVlbmNlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2
b2lkIHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmKTsKKworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50
TXVzdEJlRW51bUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWdu
ZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBm
dW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hh
ciogZXhwZWN0ZWRWYWx1ZXMpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVz
dEJlRnVuY3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2ln
bmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciog
ZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOworV0VCQ09S
RV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29u
c3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK1dF
QkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lbWJl
ck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5
cGUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9u
Q29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKTsKKworU3RyaW5nIG1ha2VHZXR0ZXJUeXBlRXJy
b3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0
ZU5hbWUpOworU3RyaW5nIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKKworV0VCQ09SRV9FWFBPUlQg
SlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJv
d1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOworCitXRUJDT1JF
X0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogYXR0cmlidXRlTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJl
amVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmLCBjb25zdCBjaGFy
KiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKTsKK1dFQkNPUkVfRVhQ
T1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3Bl
cmF0aW9uTmFtZSk7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJlKiBnZXRDYWNoZWRE
T01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwor
V0VCQ09SRV9FWFBPUlQgSlNDOjpTdHJ1Y3R1cmUqIGNhY2hlRE9NU3RydWN0dXJlKEpTRE9NR2xv
YmFsT2JqZWN0JiwgSlNDOjpTdHJ1Y3R1cmUqLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6U3RydWN0dXJlKiBnZXRET01TdHJ1
Y3R1cmUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBX
cmFwcGVyQ2xhc3M+IEpTQzo6U3RydWN0dXJlKiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlKEpT
Qzo6RXhlY1N0YXRlKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNP
YmplY3QqIGdldERPTVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwor
Cit2b2lkIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgSlNDOjpKU0Z1bmN0aW9uJik7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEpTQ2xhc3M+IEpTQzo6RW5jb2RlZEpTVmFsdWUgY3JlYXRlSlNCdWlsdGluKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU0Z1bmN0aW9uJiBpbml0aWFsaXplRnVuY3Rpb24sIEpTRE9N
R2xvYmFsT2JqZWN0Jik7CisKK0pTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9N
V3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciopOwordm9pZCogd3JhcHBlcktleShKU0M6
OkFycmF5QnVmZmVyKik7CisKK0pTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYsIHZvaWQqKTsKK0pTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFw
cGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSopOworSlNDOjpKU0FycmF5QnVm
ZmVyKiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlC
dWZmZXIqKTsKKworYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYs
IHZvaWQqLCBKU0RPTU9iamVjdCosIEpTQzo6V2Vha0hhbmRsZU93bmVyKik7Citib29sIHNldElu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgU2NyaXB0V3JhcHBhYmxlKiwgSlNE
T01PYmplY3QqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpOwor
Ym9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlC
dWZmZXIqLCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVy
KiB3cmFwcGVyT3duZXIpOworCitib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqKTsKK2Jvb2wgY2xlYXJJbmxpbmVDYWNoZWRX
cmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9NT2JqZWN0KiB3
cmFwcGVyKTsKK2Jvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYs
IEpTQzo6QXJyYXlCdWZmZXIqLCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmLCBET01DbGFzcyYpOwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+
IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYg
d29ybGQsIFJlZjxET01DbGFzcz4mIG9iamVjdCkgeyByZXR1cm4gZ2V0Q2FjaGVkV3JhcHBlcih3
b3JsZCwgb2JqZWN0LmdldCgpKTsgfQordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVu
YW1lIFdyYXBwZXJDbGFzcz4gdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgRE9N
Q2xhc3MqLCBXcmFwcGVyQ2xhc3MqKTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBl
bmFtZSBXcmFwcGVyQ2xhc3M+IHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwg
RE9NQ2xhc3MqLCBXcmFwcGVyQ2xhc3MqKTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0
eXBlbmFtZSBUPiBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4m
JikgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6
dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46Oldy
YXBwZXJDbGFzcyo+Ojp0eXBlOwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1l
IFQ+IGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUPiYmKSAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUs
IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJD
bGFzcyo+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gSlNDOjpKU1ZhbHVl
IHdyYXAoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIERPTUNsYXNzJik7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IEpTQ2xhc3MmIGNhc3RUaGlzVmFsdWUoSlNDOjpF
eGVjU3RhdGUmKTsKKwordm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcm
KTsKKworY29uc3QgSlNDOjpIYXNoVGFibGUmIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoSlND
OjpWTSYsIGNvbnN0IEpTQzo6SGFzaFRhYmxlJiBzdGF0aWNUYWJsZSk7CisKK1N0cmluZyByZXRy
aWV2ZUVycm9yTWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUg
ZXhjZXB0aW9uLCBKU0M6OkNhdGNoU2NvcGUmKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0
RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2FjaGVk
U2NyaXB0KiA9IG51bGxwdHIpOworV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiosIENhY2hlZFNjcmlwdCogPSBudWxscHRy
LCBFeGNlcHRpb25EZXRhaWxzKiA9IG51bGxwdHIpOwordm9pZCByZXBvcnRDdXJyZW50RXhjZXB0
aW9uKEpTQzo6RXhlY1N0YXRlKik7CisKK0pTQzo6SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb24mJik7CitKU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgRXhjZXB0aW9uQ29kZSwgY29uc3QgU3RyaW5nJik7CisK
Ky8vIENvbnZlcnQgYSBET00gaW1wbGVtZW50YXRpb24gZXhjZXB0aW9uIGludG8gYSBKYXZhU2Ny
aXB0IGV4Y2VwdGlvbiBpbiB0aGUgZXhlY3V0aW9uIHN0YXRlLgordm9pZCBwcm9wYWdhdGVFeGNl
cHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb24mJik7CitX
RUJDT1JFX0VYUE9SVCB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOworCitKU0M6OkpTVmFsdWUganNT
dHJpbmcoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBVUkwmKTsgLy8gZW1wdHkgaWYgdGhlIFVSTCBp
cyBudWxsCisKK0pTQzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgU3RyaW5nJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgc3RyaW5nIGlzIG51bGwKK0pT
Qzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgVVJM
Jik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgVVJMIGlzIG51bGwKKworLy8gU2VlIEphdmFTY3JpcHRD
b3JlIGZvciBleHBsYW5hdGlvbjogU2hvdWxkIGJlIHVzZWQgZm9yIGFueSBzdHJpbmcgdGhhdCBp
cyBhbHJlYWR5IG93bmVkIGJ5IGFub3RoZXIKKy8vIG9iamVjdCwgdG8gbGV0IHRoZSBlbmdpbmUg
a25vdyB0aGF0IGNvbGxlY3RpbmcgdGhlIEpTU3RyaW5nIHdyYXBwZXIgaXMgdW5saWtlbHkgdG8g
c2F2ZSBtZW1vcnkuCitKU0M6OkpTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYpOworCitTdHJpbmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlND
OjpQcm9wZXJ0eU5hbWUpOworCitBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJp
bmcoSlNDOjpQcm9wZXJ0eU5hbWUpOworCitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmll
clRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwor
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9CeXRlU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJp
bmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK1dFQkNPUkVfRVhQ
T1JUIFN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKKworaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWYWx1ZSwgSlNDOjpFeGVjU3Rh
dGUqLCBib29sJiBva2F5KTsKKworLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY29udmVydCB2
YWx1ZXMgdG8gaW50ZWdlcnMgYXMgcGVyIHRoZSBXZWJJREwgc3BlY2lmaWNhdGlvbi4KKy8vIFRo
ZSBjb252ZXJzaW9uIGZhaWxzIGlmIHRoZSB2YWx1ZSBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEg
bnVtYmVyIG9yLCBpZiBFbmZvcmNlUmFuZ2UgaXMgc3BlY2lmaWVkLAorLy8gdGhlIHZhbHVlIGlz
IG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSBkZXN0aW5hdGlvbiBpbnRlZ2VyIHR5cGUuCisKK1dF
QkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDE2X3Qg
dG9JbnQxNkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJD
T1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJFbmZvcmNlUmFu
Z2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDMy
X3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
V0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IHRvVUludDY0RW5mb3Jj
ZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworV0VCQ09SRV9FWFBPUlQg
aW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNP
UkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNkNsYW1wKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2Q2xhbXAo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0
b0ludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBP
UlQgdWludDMyX3QgdG9VSW50MzJDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
CitXRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjRDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NENsYW1wKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50
OChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50OF90
IHRvVUludDgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQg
aW50MTZfdCB0b0ludDE2KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVf
RVhQT1JUIHVpbnQxNl90IHRvVUludDE2KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
K1dFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7CisKK0pTQzo6SlNWYWx1ZSBqc0RhdGUoSlNDOjpFeGVjU3RhdGUqLCBk
b3VibGUgdmFsdWUpOworCisvLyBOYU4gaWYgdGhlIHZhbHVlIGNhbid0IGJlIGNvbnZlcnRlZCB0
byBhIGRhdGUuCitkb3VibGUgdmFsdWVUb0RhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUpOworCisvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNlcXVlbmNl
IHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KK0pTQzo6SlNPYmpl
Y3QqIHRvSlNTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgdW5zaWduZWQm
IGxlbmd0aCk7CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyJik7CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyYpOwor
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpT
Qzo6QXJyYXlCdWZmZXIqKTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Kik7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgUmVmPFQ+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZlB0cjxUPiYmKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBjb25zdCBWZWN0b3I8VD4mKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25z
dCBWZWN0b3I8UmVmUHRyPFQ+PiYpOworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5hbWUmKTsKKworSlNDOjpK
U1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
SlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTSXRl
cmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIGNvbnN0IFQmKTsKK0pT
Qzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUmKTsKKworUmVmUHRyPEpT
Qzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hh
cmVkSW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50MTZB
cnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
CitSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MzJBcnJheShKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvUG9zc2libHlT
aGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWlu
dDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hh
cmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50
MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOworUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFy
cmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0
b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworCitS
ZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5zaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJ
bnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQxNkFycmF5
PiB0b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxK
U0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOworUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9VbnNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNo
YXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpT
Qzo6VWludDE2QXJyYXk+IHRvVW5zaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1Zh
bHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hhcmVkVWludDMyQXJyYXkoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvVW5zaGFy
ZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpGbG9h
dDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEpTVHlwZT4gVmVjdG9yPFJlZjxUPj4g
dG9SZWZOYXRpdmVBcnJheShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JF
X0VYUE9SVCBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKKworZW51bSBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiB7IERvTm90UmVwb3J0U2VjdXJp
dHlFcnJvciwgTG9nU2VjdXJpdHlFcnJvciwgVGhyb3dTZWN1cml0eUVycm9yIH07CituYW1lc3Bh
Y2UgQmluZGluZ1NlY3VyaXR5IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBjaGVja1Nl
Y3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIFQmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIFQqKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNlcHRpb25PcjxUKj4gY2hlY2tTZWN1cml0eUZvck5vZGUo
SlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb25PcjxUKj4mJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRl
JiwgRXhjZXB0aW9uT3I8VCY+JiYpOworICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdp
bmRvdyhKU0M6OkV4ZWNTdGF0ZSosIERPTVdpbmRvdyYsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9u
ID0gTG9nU2VjdXJpdHlFcnJvcik7CisgICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2lu
ZG93KEpTQzo6RXhlY1N0YXRlJiwgRE9NV2luZG93JiwgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICBi
b29sIHNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSosIEZyYW1lKiwgU2Vj
dXJpdHlSZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1cml0eUVycm9yKTsKKyAgICBib29sIHNob3Vs
ZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSYsIEZyYW1lJiwgU3RyaW5nJiBtZXNz
YWdlKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKEpTQzo6RXhlY1N0YXRlJiwg
Tm9kZSopOworfTsKKwordm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKTsKKworU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6
UHJvcGVydHlOYW1lKTsKK0F0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhK
U0M6OlByb3BlcnR5TmFtZSk7CisKK3RlbXBsYXRlPEpTQzo6TmF0aXZlRnVuY3Rpb24sIGludCBs
ZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworCisKK2VudW0gY2xhc3MgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3IgeyBUaHJvdywgUmV0dXJu
RWFybHksIFJlamVjdFByb21pc2UsIEFzc2VydCB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0Ns
YXNzPgorc3RydWN0IEJpbmRpbmdDYWxsZXIgeworICAgIHVzaW5nIEF0dHJpYnV0ZVNldHRlckZ1
bmN0aW9uID0gYm9vbChKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6VGhyb3dTY29wZSYpOworICAgIHVzaW5nIEF0dHJpYnV0ZUdldHRlckZ1bmN0aW9uID0gSlND
OjpKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgSlNDbGFzcyYsIEpTQzo6VGhyb3dTY29wZSYpOwor
ICAgIHVzaW5nIE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICB1c2luZyBQ
cm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDbGFzcyosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dT
Y29wZSYpOworCisgICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RGb3JBdHRyaWJ1dGUoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKyAgICBzdGF0aWMgSlNDbGFzcyogY2FzdEZv
ck9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYpOworCisgICAgdGVtcGxhdGU8UHJvbWlzZU9wZXJh
dGlvbkNhbGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNhbGxlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmVqZWN0UHJvbWlzZT4K
KyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxsUHJvbWlzZU9wZXJhdGlvbihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgY29uc3Qg
Y2hhciogb3BlcmF0aW9uTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7CisgICAg
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwor
ICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3RhdGUpOworICAg
ICAgICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCAm
JiBVTkxJS0VMWSghdGhpc09iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlz
ZVdpdGhUaGlzVHlwZUVycm9yKHByb21pc2UuZ2V0KCksIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NO
YW1lLCBvcGVyYXRpb25OYW1lKTsKKyAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QpOworICAgICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIEpTQ2xhc3M6OmluZm8oKSk7
CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJh
dGVkIGNvZGUgdG8gdXNlIHJlZmVyZW5jZXMgZm9yIHN0YXRlIGFuZCB0aGlzT2JqZWN0LgorICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uQ2FsbGVyKHN0YXRlLCB0aGlzT2JqZWN0LCBXVEZNb3ZlKHBy
b21pc2UpLCB0aHJvd1Njb3BlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxPcGVyYXRpb25DYWxs
ZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3Vs
ZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgorICAgIHN0YXRpYyBKU0M6
OkVuY29kZWRKU1ZhbHVlIGNhbGxPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBjb25z
dCBjaGFyKiBvcGVyYXRpb25OYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlKTsKKyAg
ICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7
CisgICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yT3BlcmF0aW9uKCpzdGF0ZSk7Cisg
ICAgICAgIGlmIChzaG91bGRUaHJvdyAhPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0
ICYmIFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93
ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygp
LT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOworICAgICAgICAgICAgLy8gRm9yIGN1c3RvbSBw
cm9taXNlLXJldHVybmluZyBvcGVyYXRpb25zCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJv
bWlzZVdpdGhUaGlzVHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUs
IG9wZXJhdGlvbk5hbWUpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsK
KyAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjpp
bmZvKCkpOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5n
IGdlbmVyYXRlZCBjb2RlIHRvIHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVj
dC4KKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhy
b3dTY29wZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8QXR0cmlidXRlU2V0dGVyRnVuY3Rpb24g
c2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0aWMgYm9vbCBzZXRBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCisgICAg
eworICAgICAgICBBU1NFUlQoc3RhdGUpOworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byogdGhpc09iamVjdCA9
IGNhc3RGb3JBdHRyaWJ1dGUoKnN0YXRlLCB0aGlzVmFsdWUpOworICAgICAgICBpZiAoVU5MSUtF
TFkoIXRoaXNPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIChzaG91bGRUaHJvdyA9PSBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpID8gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSkg
OiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHNldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCBKU0M6
OkpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0aHJvd1Njb3BlKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTxBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiBnZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93Pgor
ICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlKTsKKyAgICAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBjYXN0Rm9yQXR0cmlidXRlKCpzdGF0ZSwgdGhpc1ZhbHVlKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRo
cm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjpp
bmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSk7CisgICAgICAgICAgICBpZiAoc2hvdWxk
VGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2UpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
SlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOworICAgICAgICAgICAg
cmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNVbmRlZmluZWQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKGdldHRlcigqc3RhdGUsICp0
aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7CisgICAgfQorfTsKKworLy8gRXhjZXB0aW9uT3IgaGFu
ZGxpbmcuCit2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6
VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpOworCisvLyBJ
bmxpbmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0ZSBkZWZpbml0aW9ucy4KKworaW5saW5lIEpTQzo6
U3RydWN0dXJlKiBET01Db25zdHJ1Y3Rvck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCit7CisgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworfQorCitpbmxpbmUgRE9NQ29uc3RydWN0b3JPYmplY3Q6OkRPTUNv
bnN0cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCisgICAgOiBKU0RPTU9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9i
amVjdCkKK3sKK30KKworaW5saW5lIFN0cmluZyBET01Db25zdHJ1Y3Rvck9iamVjdDo6Y2xhc3NO
YW1lKGNvbnN0IEpTT2JqZWN0KikKK3sKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJGdW5jdGlv
biIpOworfQorCitpbmxpbmUgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OkRPTUNvbnN0
cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3sKK30KKworaW5saW5lIEpTQzo6SlNGdW5jdGlvbiogRE9N
Q29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OmluaXRpYWxpemVGdW5jdGlvbigpCit7CisgICAg
cmV0dXJuIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLmdldCgpOworfQorCitpbmxpbmUgdm9pZCBET01D
b25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6c2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQoreworICAgIG1faW5pdGlhbGl6ZUZ1bmN0
aW9uLnNldCh2bSwgdGhpcywgJmZ1bmN0aW9uKTsKK30KKworaW5saW5lIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiBl
eGVjKQoreworICAgIC8vIEZJWE1FOiBDYWxsZXJzIHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJl
IHVzaW5nIHRoZSBnbG9iYWwgb2JqZWN0CisgICAgLy8gZnJvbSB3aGljaCB0aGUgb2JqZWN0IGlz
IGJlaW5nIGNyZWF0ZWQsIGluc3RlYWQgb2YgYXNzdW1pbmcgdGhlIGxleGljYWwgb25lLgorICAg
IC8vIGUuZy4gc3ViZnJhbWUuZG9jdW1lbnQuYm9keSBzaG91bGQgdXNlIHRoZSBzdWJmcmFtZSdz
IGdsb2JhbCBvYmplY3QsIG5vdCB0aGUgbGV4aWNhbCBvbmUuCisgICAgcmV0dXJuIEpTQzo6anND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUq
IGdldERPTVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKK3sKKyAgICBpZiAoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldENhY2hlZERP
TVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFzczo6aW5mbygpKSkKKyAgICAgICAg
cmV0dXJuIHN0cnVjdHVyZTsKKyAgICByZXR1cm4gY2FjaGVET01TdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgV3Jh
cHBlckNsYXNzOjpjcmVhdGVQcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpKSwgV3JhcHBlckNs
YXNzOjppbmZvKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGlu
ZSBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBpcyB3cm9uZy4gSXQgdXNl
cyB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdCBmb3IgY3JlYXRpbmcgdGhlIHByb3RvdHlwZSBzdHJ1
Y3R1cmUuCisgICAgcmV0dXJuIGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMtPnZt
KCksICpkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0RE9N
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTQzo6SlNPYmplY3QqPihhc09iamVjdChnZXRE
T01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPih2bSwgKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KSktPnN0b3JlZFByb3RvdHlwZSgpKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVp
bHRpbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1
bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIEpTQzo6SlNP
YmplY3QqIG9iamVjdCA9IEpTQ2xhc3M6OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNDbGFzcz4o
Z2xvYmFsT2JqZWN0LnZtKCksIGdsb2JhbE9iamVjdCksICZnbG9iYWxPYmplY3QpOworICAgIGNh
bGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKHN0YXRlLCAqb2JqZWN0LCBpbml0aWFsaXpl
RnVuY3Rpb24pOworICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShvYmplY3QpOworfQor
CitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29y
bGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKj4od29ybGQudm0oKS5tX3R5cGVkQXJyYXlDb250
cm9sbGVyLmdldCgpKS0+d3JhcHBlck93bmVyKCk7Cit9CisKK2lubGluZSB2b2lkKiB3cmFwcGVy
S2V5KEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCkKK3sKKyAgICByZXR1cm4gZG9tT2JqZWN0
OworfQorCitpbmxpbmUgSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkJiwgdm9pZCopIHsgcmV0dXJuIG51bGxwdHI7IH0KK2lubGluZSBib29sIHNldElu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0Kiwg
SlNDOjpXZWFrSGFuZGxlT3duZXIqKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgY2xl
YXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVj
dCopIHsgcmV0dXJuIGZhbHNlOyB9CisKK2lubGluZSBKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9i
amVjdCkKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIHJldHVybiBkb21PYmplY3QtPndyYXBwZXIoKTsKK30KKworaW5saW5lIEpTQzo6
SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKCF3b3JsZC5pc05vcm1h
bCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYnVmZmVyLT5tX3dyYXBw
ZXIuZ2V0KCk7Cit9CisKK2lubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0
KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKQoreworICAgIGlm
ICghd29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvbU9iamVj
dC0+c2V0V3JhcHBlcih3cmFwcGVyLCB3cmFwcGVyT3duZXIsICZ3b3JsZCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2lubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlC
dWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpCit7Cisg
ICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZG9t
T2JqZWN0LT5tX3dyYXBwZXIgPSBKU0M6OldlYWs8SlNDOjpKU0FycmF5QnVmZmVyPih3cmFwcGVy
LCB3cmFwcGVyT3duZXIsICZ3b3JsZCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBi
b29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBTY3Jp
cHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01PYmplY3QqIHdyYXBwZXIpCit7CisgICAgaWYg
KCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZG9tT2JqZWN0
LT5jbGVhcldyYXBwZXIod3JhcHBlcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBi
b29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6
OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlcikKK3sK
KyAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB3
ZWFrQ2xlYXIoZG9tT2JqZWN0LT5tX3dyYXBwZXIsIHdyYXBwZXIpOworICAgIHJldHVybiB0cnVl
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3Qq
IGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MmIGRvbU9i
amVjdCkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIo
d29ybGQsICZkb21PYmplY3QpKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICByZXR1cm4g
d29ybGQubV93cmFwcGVycy5nZXQod3JhcHBlcktleSgmZG9tT2JqZWN0KSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lk
IGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0
LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCit7CisgICAgSlNDOjpXZWFrSGFuZGxlT3duZXIqIG93
bmVyID0gd3JhcHBlck93bmVyKHdvcmxkLCBkb21PYmplY3QpOworICAgIGlmIChzZXRJbmxpbmVD
YWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBwZXIsIG93bmVyKSkKKyAgICAgICAg
cmV0dXJuOworICAgIHdlYWtBZGQod29ybGQubV93cmFwcGVycywgd3JhcHBlcktleShkb21PYmpl
Y3QpLCBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4od3JhcHBlciwgb3duZXIsICZ3b3JsZCkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBp
bmxpbmUgdm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFz
cyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCit7CisgICAgaWYgKGNsZWFySW5s
aW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyKSkKKyAgICAgICAgcmV0
dXJuOworICAgIHdlYWtSZW1vdmUod29ybGQubV93cmFwcGVycywgd3JhcHBlcktleShkb21PYmpl
Y3QpLCB3cmFwcGVyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1l
IFQ+IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6
OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGUKK3sKKyAgICB1c2luZyBX
cmFwcGVyQ2xhc3MgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xh
c3M+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICBBU1NFUlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFs
T2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKTsKKyAgICBhdXRvKiBkb21PYmplY3RQdHIgPSBk
b21PYmplY3QucHRyKCk7CisgICAgYXV0byogd3JhcHBlciA9IFdyYXBwZXJDbGFzczo6Y3JlYXRl
KGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGdsb2JhbE9iamVjdC0+dm0oKSwgKmdsb2Jh
bE9iamVjdCksIGdsb2JhbE9iamVjdCwgV1RGTW92ZShkb21PYmplY3QpKTsKKyAgICBjYWNoZVdy
YXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3RQdHIsIHdyYXBwZXIpOworICAg
IHJldHVybiB3cmFwcGVyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5h
bWUgVD4gaW5saW5lIGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBSZWY8VD4mJiBkb21PYmplY3QpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFz
dGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGUKK3sKKyAgICByZXR1
cm4gY3JlYXRlV3JhcHBlcjxET01DbGFzcz4oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8RE9NQ2xhc3M+KFdURk1vdmUoZG9tT2JqZWN0KSkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRE9NQ2xhc3MmIGRvbU9iamVj
dCkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2Jq
ZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICBy
ZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBSZWY8RE9NQ2xhc3M+
KGRvbU9iamVjdCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlND
bGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCit7CisgICAgYXV0byB0
aGlzVmFsdWUgPSBzdGF0ZS50aGlzVmFsdWUoKTsKKyAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNEb3duY2FzdDxKU0NsYXNzKj4oc3RhdGUudm0oKSwgdGhpc1ZhbHVlKTsKKyAgICBBU1NF
UlQoY2FzdGVkVGhpcyk7CisgICAgcmV0dXJuICpjYXN0ZWRUaGlzOworfQorCitpbmxpbmUgaW50
MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGJvb2wmIG9rYXkpCit7CisgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVy
KGV4ZWMpOworICAgIG9rYXkgPSBzdGQ6OmlzZmluaXRlKG51bWJlcik7CisgICAgcmV0dXJuIEpT
Qzo6dG9JbnQzMihudW1iZXIpOworfQorCisvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9i
amVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwg
c3BlYy4KK2lubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUm
IGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQmIGxlbmd0aCkKK3sKKyAgICBKU0M6
OlZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsK
KyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMs
IHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgSlNDOjpKU1Zh
bHVlIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoJmV4ZWMsIGV4ZWMucHJvcGVydHlOYW1lcygp
Lmxlbmd0aCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKKyAg
ICBpZiAobGVuZ3RoVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICB0aHJvd1Nl
cXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgbGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9VSW50MzIoJmV4ZWMpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAgcmV0dXJuIG9iamVjdDsK
K30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlciYgYnVmZmVyKQor
eworICAgIGlmIChhdXRvIHJlc3VsdCA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53
b3JsZCgpLCBidWZmZXIpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgLy8gVGhlIEpT
QXJyYXlCdWZmZXI6OmNyZWF0ZSBmdW5jdGlvbiB3aWxsIHJlZ2lzdGVyIHRoZSB3cmFwcGVyIGlu
IGZpbmlzaENyZWF0aW9uLgorICAgIHJldHVybiBKU0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZShz
dGF0ZS0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZShidWZmZXIuc2hh
cmluZ01vZGUoKSksICZidWZmZXIpOworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6QXJyYXlCdWZmZXJWaWV3JiB2aWV3KQoreworICAgIHJldHVybiB2aWV3LndyYXAoc3RhdGUs
IGdsb2JhbE9iamVjdCk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlC
dWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNOdWxsKCk7CisgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmJ1ZmZlcik7
Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlclZpZXcqIHZp
ZXcpCit7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAg
ICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqdmlldyk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgcHRyKQoreworICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4mJiBwdHIpCit7
CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBwdHIuZ2V0KCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxU
PiYgdmVjdG9yKQoreworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTQzo6SlNBcnJh
eSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXpl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBh
cnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZl
Y3RvcltpXSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFs
dWUoKSk7CisgICAgfQorICAgIHJldHVybiBhcnJheTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPFQ+PiYgdmVjdG9y
KQoreworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTQzo6SlNBcnJheSogYXJyYXkg
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXplKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBhcnJheS0+cHV0
RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXS5n
ZXQoKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUo
KSk7CisgICAgfQorICAgIHJldHVybiBhcnJheTsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6
UHJpdmF0ZU5hbWUmIHByaXZhdGVOYW1lKQoreworICAgIHJldHVybiBKU0M6OlN5bWJvbDo6Y3Jl
YXRlKGV4ZWMtPnZtKCksIHByaXZhdGVOYW1lLnVpZCgpKTsKK30KKworaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1
bHRPYmplY3QoJnN0YXRlLCB2YWx1ZSwgZmFsc2UpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIHZhbHVlKQoreworICAg
IHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIHRvSlMoJnN0YXRlLCAm
Z2xvYmFsT2JqZWN0LCB2YWx1ZSksIGZhbHNlKTsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQoreworICAgIHJldHVybiBjcmVh
dGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIEpTQzo6anNVbmRlZmluZWQoKSwgdHJ1ZSk7
Cit9CisKK2lubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvUG9zc2libHlTaGFy
ZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNhc3Q8SlNDOjpKU0FycmF5QnVmZmVyVmll
dyo+KHZtLCB2YWx1ZSk7CisgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICByZXR1cm4gd3JhcHBlci0+cG9zc2libHlTaGFyZWRJbXBsKCk7Cit9CisKK2lubGlu
ZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5zaGFyZWRBcnJheUJ1ZmZlclZpZXco
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHRv
UG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcodm0sIHZhbHVlKTsKKyAgICBpZiAoIXJlc3Vs
dCB8fCByZXN1bHQtPmlzU2hhcmVkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2li
bHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1
cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+
KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5
U2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQxNkFkYXB0b3I+
KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5
U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+
KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5
U2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+
KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9Q
b3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpV
aW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVk
VmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlND
OjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBK
U0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5
cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8
SlNDOjpGbG9hdDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYg
dm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0
aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBS
ZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDY0QXJyYXkoSlND
OjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hh
cmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KKwor
aW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9VbnNoYXJlZEludDhBcnJheShKU0M6OlZN
JiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVU
eXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxK
U0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OkludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkludDMyQXJy
YXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUp
IHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDMyQWRhcHRv
cj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFy
ZWRVaW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpT
Qzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRvcj4odm0sIHZhbHVl
KTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Vuc2hhcmVkVWlu
dDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
SlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcj4o
dm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0b1Vuc2hhcmVk
VWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDE2QWRhcHRvcj4odm0sIHZhbHVl
KTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hhcmVkVWludDMyQXJy
YXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hh
cmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5s
aW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6
OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRp
dmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJl
ZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBl
ZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVlKTsgfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBKU1Q+IGlubGluZSBWZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFy
cmF5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIEpT
Qzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgdGhyb3dT
ZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKworICAgIFZlY3RvcjxSZWY8VD4+IHJlc3VsdDsKKyAgICBmb3JFYWNoSW5JdGVyYWJsZSgm
c3RhdGUsIHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmIChqc1ZhbHVlLmluaGVyaXRzKHZtLCBKU1Q6
OmluZm8oKSkpIHsKKyAgICAgICAgICAgIGF1dG8qIG9iamVjdCA9IEpTVDo6dG9XcmFwcGVkKHZt
LCBqc1ZhbHVlKTsKKyAgICAgICAgICAgIEFTU0VSVChvYmplY3QpOworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgqb2JqZWN0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0aHJvd0Fy
cmF5RWxlbWVudFR5cGVFcnJvcigqc3RhdGUsIHNjb3BlKTsKKyAgICB9KTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitpbmxpbmUgU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBBU1NFUlQoIXByb3BlcnR5TmFtZS5pc1N5
bWJvbCgpKTsKKyAgICByZXR1cm4gcHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVp
ZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKK30KKworaW5saW5lIEF0b21pY1N0cmlu
ZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCit7CisgICAgcmV0dXJuIEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUudWlkKCkgPyBwcm9w
ZXJ0eU5hbWUudWlkKCkgOiBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKK30KKwordGVtcGxh
dGU8SlNDOjpOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpF
bmNvZGVkSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKK3sKKyAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpKU0Z1bmN0aW9u
OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBsZW5ndGgs
IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5hdGl2ZUZ1bmN0aW9uKSk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK3sKKyAg
ICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuOworICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvblNsb3dQYXRoKHN0YXRlLCB0aHJvd1Njb3BlLCBXVEZNb3ZlKGV4Y2VwdGlv
bikpOworfQorCitpbmxpbmUgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYg
dmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkKKyAgICAg
ICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhj
ZXB0aW9uKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUp
Cit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBw
cm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRp
b24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorICAgIHJldHVybiB0b0pTKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpCit7CisgICAg
aWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVF
eGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZz
dGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3Vy
aXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQmIG5vZGUpCit7CisgICAgcmV0dXJu
IHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCAmbm9kZSkgPyAmbm9kZSA6IG51bGxwdHI7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBCaW5kaW5nU2VjdXJpdHk6OmNo
ZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVCogbm9kZSkKK3sKKyAg
ICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIG5vZGUpID8gbm9kZSA6IG51
bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBFeGNlcHRpb25PcjxUKj4g
QmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEV4Y2VwdGlvbk9yPFQqPiYmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICByZXR1
cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEV4Y2VwdGlvbk9yPFQqPiBCaW5k
aW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
RXhjZXB0aW9uT3I8VCY+JiYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmhhc0V4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpOworICAgIHJldHVybiBj
aGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHBy
b3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1
cml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZ1NlY3VyaXR5LmgJKHJldmlzaW9uIDIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDI4MCAr
MjMsMjMgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIK
LSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKLSNp
bmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgot
I2luY2x1ZGUgIkpTRHluYW1pY0Rvd25jYXN0LmgiCi0jaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxl
LmgiCi0jaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oIgotI2luY2x1ZGUgIldlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlci5oIgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8
aGVhcC9IZWFwSW5saW5lcy5oPgotI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+
Ci0jaW5jbHVkZSA8aGVhcC9XZWFrLmg+Ci0jaW5jbHVkZSA8aGVhcC9XZWFrSW5saW5lcy5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaD4K
LSNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlC
dWZmZXIuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU0NlbGxJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdElu
bGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0xvb2t1cC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4K
LSNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1l
L1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0vLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlz
IGZpbGUgYSBsb3QgZWFzaWVyIHRvIHJlYWQgYnkgcHV0dGluZyBhbGwgZnVuY3Rpb24gZGVjbGFy
YXRpb25zIGF0IHRoZSB0b3AsCi0vLyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYmVsb3csIGV2
ZW4gZm9yIHRlbXBsYXRlIGFuZCBpbmxpbmUgZnVuY3Rpb25zLgogCiBuYW1lc3BhY2UgSlNDIHsK
LWNsYXNzIEpTRnVuY3Rpb247CitjbGFzcyBFeGVjU3RhdGU7CiB9CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgQ2FjaGVkU2NyaXB0OwotY2xhc3MgRGVmZXJyZWRQcm9taXNlOwogY2xh
c3MgRE9NV2luZG93OwogY2xhc3MgRnJhbWU7Ci1jbGFzcyBVUkw7CiBjbGFzcyBOb2RlOwogCi1z
dHJ1Y3QgRXhjZXB0aW9uRGV0YWlscyB7Ci0gICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgaW50IGxp
bmVOdW1iZXIgeyAwIH07Ci0gICAgaW50IGNvbHVtbk51bWJlciB7IDAgfTsKLSAgICBTdHJpbmcg
c291cmNlVVJMOwotfTsKLQotLy8gQmFzZSBjbGFzcyBmb3IgYWxsIGNvbnN0cnVjdG9yIG9iamVj
dHMgaW4gdGhlIEpTQyBiaW5kaW5ncy4KLWNsYXNzIERPTUNvbnN0cnVjdG9yT2JqZWN0IDogcHVi
bGljIEpTRE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTRE9NT2JqZWN0IEJhc2U7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IEpTQzo6SW1wbGVtZW50c0Rl
ZmF1bHRIYXNJbnN0YW5jZSB8IEpTQzo6VHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRhOwotICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKLQotcHJvdGVjdGVkOgotICAgIERPTUNvbnN0
cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQotICAg
IHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpT
Qzo6Q2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgSlNDOjpDYWxsRGF0YSYpOwotfTsKLQot
Y2xhc3MgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QgOiBwdWJsaWMgRE9NQ29uc3RydWN0
b3JPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFz
ZTsKLQotcHJvdGVjdGVkOgotICAgIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOwotCi0gICAgSlNDOjpKU0Z1
bmN0aW9uKiBpbml0aWFsaXplRnVuY3Rpb24oKTsKLSAgICB2b2lkIHNldEluaXRpYWxpemVGdW5j
dGlvbihKU0M6OlZNJiwgSlNDOjpKU0Z1bmN0aW9uJik7Ci0KLXByaXZhdGU6Ci0gICAgSlNDOjpX
cml0ZUJhcnJpZXI8SlNDOjpKU0Z1bmN0aW9uPiBtX2luaXRpYWxpemVGdW5jdGlvbjsKLX07Ci0K
LURPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci1ET01XaW5kb3cm
IGFjdGl2ZURPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwotRE9NV2luZG93JiBmaXJzdERPTVdp
bmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwotCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1Zh
bHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9F
WFBPUlQgdm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLQot
dm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1XRUJDT1JFX0VYUE9SVCBib29sIHRocm93
U2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci0KLXZvaWQg
dGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmKTsKLXZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYpOwotdm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJik7IC8vIE5vdCB0aGUgc2FtZSBhcyBhIEphdmFTY3JpcHQgc3ludGF4IGVy
cm9yLgotdm9pZCB0aHJvd0luZGV4U2l6ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJik7Ci12b2lkIHRocm93SW52YWxpZFN0YXRlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKLVdFQkNPUkVfRVhQT1JUIHZv
aWQgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmKTsKLXZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVzc2FnZSk7Ci12b2lkIHRocm93U2Vj
dXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHRocm93U2VxdWVuY2VUeXBlRXJyb3Io
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLXZvaWQgdGhyb3dUeXBlTWlzbWF0
Y2hFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotCi1XRUJDT1JFX0VY
UE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBj
b25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFZhbHVlcyk7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwg
Y29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5h
bWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVtYmVyTmFtZSwgY29uc3QgY2hhciog
ZGljdGlvbmFyeU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVy
ZmFjZU5hbWUpOwotCi1TdHJpbmcgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci1TdHJpbmcgbWFr
ZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIGF0dHJpYnV0ZU5hbWUpOwotCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVl
IHRocm93R2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci1X
RUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsK
LVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlz
VHlwZUVycm9yKERlZmVycmVkUHJvbWlzZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNW
YWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25z
dCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKTsKLQotV0VC
Q09SRV9FWFBPUlQgSlNDOjpTdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShKU0RPTUds
b2JhbE9iamVjdCYsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6
OlN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlN0
cnVjdHVyZSosIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFdy
YXBwZXJDbGFzcz4gSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVjdHVyZShKU0M6OlZNJiwgSlNE
T01HbG9iYWxPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpT
dHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90
eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0KLXZvaWQgY2FsbEZ1bmN0aW9u
V2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0JiB0aGlz
T2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4g
SlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTRnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQot
SlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBKU0M6
OkFycmF5QnVmZmVyKik7Ci12b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIqKTsKLQot
SlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9p
ZCopOwotSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxk
JiwgU2NyaXB0V3JhcHBhYmxlKik7Ci1KU0M6OkpTQXJyYXlCdWZmZXIqIGdldElubGluZUNhY2hl
ZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciopOwotCi1ib29sIHNl
dElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0
KiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqKTsKLWJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3JhcHBlciwg
SlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcik7Ci1ib29sIHNldElubGluZUNhY2hl
ZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciosIEpTQzo6SlNBcnJh
eUJ1ZmZlciogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcik7Ci0K
LWJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBK
U0RPTU9iamVjdCopOwotYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiwgU2NyaXB0V3JhcHBhYmxlKiwgSlNET01PYmplY3QqIHdyYXBwZXIpOwotYm9vbCBjbGVh
cklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlcios
IEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlcik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNs
YXNzPiBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERP
TUNsYXNzJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNPYmpl
Y3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgUmVmPERPTUNsYXNz
PiYgb2JqZWN0KSB7IHJldHVybiBnZXRDYWNoZWRXcmFwcGVyKHdvcmxkLCBvYmplY3QuZ2V0KCkp
OyB9Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiB2
b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyosIFdyYXBwZXJDbGFz
cyopOwotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4g
dm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyosIFdyYXBwZXJD
bGFzcyopOwotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGF1dG8gY3Jl
YXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUPiYmKSAtPiB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGU7
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gYXV0byBjcmVhdGVXcmFw
cGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPCFzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGU7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0
ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgRE9NQ2xhc3MmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
SlNDbGFzcz4gSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYpOwotCi12b2lk
IGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYpOwotCi1jb25zdCBKU0M6Okhh
c2hUYWJsZSYgZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShKU0M6OlZNJiwgY29uc3QgSlNDOjpI
YXNoVGFibGUmIHN0YXRpY1RhYmxlKTsKLQotU3RyaW5nIHJldHJpZXZlRXJyb3JNZXNzYWdlKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIEpTQzo6Q2F0
Y2hTY29wZSYpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7
Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RXhjZXB0aW9uKiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIsIEV4Y2VwdGlvbkRldGFpbHMq
ID0gbnVsbHB0cik7Ci12b2lkIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUq
KTsKLQotSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEV4
Y2VwdGlvbiYmKTsKLUpTQzo6SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGVjU3Rh
dGUqLCBFeGNlcHRpb25Db2RlLCBjb25zdCBTdHJpbmcmKTsKLQotLy8gQ29udmVydCBhIERPTSBp
bXBsZW1lbnRhdGlvbiBleGNlcHRpb24gaW50byBhIEphdmFTY3JpcHQgZXhjZXB0aW9uIGluIHRo
ZSBleGVjdXRpb24gc3RhdGUuCi12b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQg
cHJvcGFnYXRlRXhjZXB0aW9uU2xvd1BhdGgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmLCBFeGNlcHRpb24mJik7Ci0KLUpTQzo6SlNWYWx1ZSBqc1N0cmluZyhKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IFVSTCYpOyAvLyBlbXB0eSBpZiB0aGUgVVJMIGlzIG51bGwKLQotSlNDOjpKU1Zh
bHVlIGpzU3RyaW5nT3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsg
Ly8gdW5kZWZpbmVkIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAotSlNDOjpKU1ZhbHVlIGpzU3RyaW5n
T3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBVUkwmKTsgLy8gdW5kZWZpbmVkIGlm
IHRoZSBVUkwgaXMgbnVsbAotCi0vLyBTZWUgSmF2YVNjcmlwdENvcmUgZm9yIGV4cGxhbmF0aW9u
OiBTaG91bGQgYmUgdXNlZCBmb3IgYW55IHN0cmluZyB0aGF0IGlzIGFscmVhZHkgb3duZWQgYnkg
YW5vdGhlcgotLy8gb2JqZWN0LCB0byBsZXQgdGhlIGVuZ2luZSBrbm93IHRoYXQgY29sbGVjdGlu
ZyB0aGUgSlNTdHJpbmcgd3JhcHBlciBpcyB1bmxpa2VseSB0byBzYXZlIG1lbW9yeS4KLUpTQzo6
SlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5n
Jik7Ci0KLVN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7Ci0K
LUF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFt
ZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEpTQzo6
RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci1XRUJDT1JFX0VYUE9SVCBTdHJp
bmcgdmFsdWVUb0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9V
U1ZTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi1pbnQzMl90IGZpbml0
ZUludDMyVmFsdWUoSlNDOjpKU1ZhbHVlLCBKU0M6OkV4ZWNTdGF0ZSosIGJvb2wmIG9rYXkpOwot
Ci0vLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBjb252ZXJ0IHZhbHVlcyB0byBpbnRlZ2VycyBh
cyBwZXIgdGhlIFdlYklETCBzcGVjaWZpY2F0aW9uLgotLy8gVGhlIGNvbnZlcnNpb24gZmFpbHMg
aWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgb3IsIGlmIEVuZm9y
Y2VSYW5nZSBpcyBzcGVjaWZpZWQsCi0vLyB0aGUgdmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ug
b2YgdGhlIGRlc3RpbmF0aW9uIGludGVnZXIgdHlwZS4KLQotV0VCQ09SRV9FWFBPUlQgaW50OF90
IHRvSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJD
T1JFX0VYUE9SVCB1aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQxNl90
IHRvVUludDE2RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdF
QkNPUkVfRVhQT1JUIGludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VS
YW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQ2
NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
V0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOwotCi1XRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4Q2xhbXAo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0
b1VJbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBP
UlQgaW50MTZfdCB0b0ludDE2Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
V0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJDbGFtcChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQz
MkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGlu
dDY0X3QgdG9JbnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNP
UkVfRVhQT1JUIHVpbnQ2NF90IHRvVUludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotCi1XRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTYoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9V
SW50MTYoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50
NjRfdCB0b0ludDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQ
T1JUIHVpbnQ2NF90IHRvVUludDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQot
SlNDOjpKU1ZhbHVlIGpzRGF0ZShKU0M6OkV4ZWNTdGF0ZSosIGRvdWJsZSB2YWx1ZSk7Ci0KLS8v
IE5hTiBpZiB0aGUgdmFsdWUgY2FuJ3QgYmUgY29udmVydGVkIHRvIGEgZGF0ZS4KLWRvdWJsZSB2
YWx1ZVRvRGF0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7Ci0KLS8vIFZhbGlkYXRl
cyB0aGF0IHRoZSBwYXNzZWQgb2JqZWN0IGlzIGEgc2VxdWVuY2UgdHlwZSBwZXIgc2VjdGlvbiA0
LjEuMTMgb2YgdGhlIFdlYklETCBzcGVjLgotSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCB1bnNpZ25lZCYgbGVuZ3RoKTsKLQotSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpTQzo6QXJy
YXlCdWZmZXImKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Jik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciopOwot
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpBcnJheUJ1ZmZlclZpZXcqKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJik7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgUmVmUHRyPFQ+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0
IFZlY3RvcjxUPiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFZlY3RvcjxSZWZQdHI8VD4+
Jik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgY29uc3QgSlNDOjpQcml2YXRlTmFtZSYpOwotCi1KU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9y
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgVCYpOwotSlNDOjpKU1ZhbHVlIHRvSlNJdGVy
YXRvckVuZChKU0M6OkV4ZWNTdGF0ZSYpOwotCi1SZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+
IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
Ci1SZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hh
cmVkSW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDMy
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUp
OwotUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4QXJyYXkoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9Q
b3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwot
UmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Bvc3NpYmx5
U2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpG
bG9hdDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9h
dDY0QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVJlZlB0cjxKU0M6OkFycmF5QnVm
ZmVyVmlldz4gdG9VbnNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKLVJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9VbnNoYXJlZEludDhBcnJheShKU0M6OlZNJiwg
SlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFy
cmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9V
bnNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpV
aW50OEFycmF5PiB0b1Vuc2hhcmVkVWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsK
LVJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJy
YXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9V
bnNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6
VWludDMyQXJyYXk+IHRvVW5zaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKLVJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJl
ZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgSlNUeXBlPiBWZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSXRl
cmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordm9pZCBwcmludEVy
cm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAogZW51
bSBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiB7IERvTm90UmVwb3J0U2VjdXJpdHlFcnJvciwgTG9n
U2VjdXJpdHlFcnJvciwgVGhyb3dTZWN1cml0eUVycm9yIH07CisKIG5hbWVzcGFjZSBCaW5kaW5n
U2VjdXJpdHkgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JO
b2RlKEpTQzo6RXhlY1N0YXRlJiwgVCYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNo
ZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgVCopOwpAQCAtMzA5LDQ5NSArNTIs
NiBAQCBuYW1lc3BhY2UgQmluZGluZ1NlY3VyaXR5IHsKICAgICBib29sIHNob3VsZEFsbG93QWNj
ZXNzVG9Ob2RlKEpTQzo6RXhlY1N0YXRlJiwgTm9kZSopOwogfTsKIAotdm9pZCBwcmludEVycm9y
TWVzc2FnZUZvckZyYW1lKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotU3RyaW5n
IHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKLUF0b21pY1N0cmluZyBw
cm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7Ci0KLXRlbXBsYXRl
PEpTQzo6TmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9u
Q2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotCi0KLWVudW0gY2xhc3MgQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3IgeyBUaHJvdywgUmV0dXJuRWFybHksIFJlamVjdFByb21pc2UsIEFzc2VydCB9
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPgotc3RydWN0IEJpbmRpbmdDYWxsZXIgewot
ICAgIHVzaW5nIEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9uID0gYm9vbChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQ2xhc3MmLCBKU0M6OkpTVmFsdWUsIEpTQzo6VGhyb3dTY29wZSYpOwotICAgIHVzaW5nIEF0
dHJpYnV0ZUdldHRlckZ1bmN0aW9uID0gSlNDOjpKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgSlND
bGFzcyYsIEpTQzo6VGhyb3dTY29wZSYpOwotICAgIHVzaW5nIE9wZXJhdGlvbkNhbGxlckZ1bmN0
aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBKU0M6
OlRocm93U2NvcGUmKTsKLSAgICB1c2luZyBQcm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24g
PSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDbGFzcyosIFJlZjxEZWZl
cnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOwotCi0gICAgc3RhdGljIEpTQ2xhc3Mq
IGNhc3RGb3JBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
LSAgICBzdGF0aWMgSlNDbGFzcyogY2FzdEZvck9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYpOwot
Ci0gICAgdGVtcGxhdGU8UHJvbWlzZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNh
bGxlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJy
b3JCZWhhdmlvcjo6UmVqZWN0UHJvbWlzZT4KLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBjYWxsUHJvbWlzZU9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJl
ZFByb21pc2U+JiYgcHJvbWlzZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2Fz
dEZvck9wZXJhdGlvbigqc3RhdGUpOwotICAgICAgICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCAmJiBVTkxJS0VMWSghdGhpc09iamVjdCkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKHByb21pc2UuZ2V0
KCksIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25OYW1lKTsKLSAgICAgICAg
QVNTRVJUKHRoaXNPYmplY3QpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIEpTQ2xhc3M6OmluZm8oKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
cmVmYWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgdG8gdXNlIHJlZmVyZW5jZXMgZm9y
IHN0YXRlIGFuZCB0aGlzT2JqZWN0LgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uQ2FsbGVyKHN0
YXRlLCB0aGlzT2JqZWN0LCBXVEZNb3ZlKHByb21pc2UpLCB0aHJvd1Njb3BlKTsKLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTxPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OlRocm93PgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxPcGVyYXRpb24o
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBj
YXN0Rm9yT3BlcmF0aW9uKCpzdGF0ZSk7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdyAhPSBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0ICYmIFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgewot
ICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpU
aHJvdykKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwg
dGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOwot
ICAgICAgICAgICAgLy8gRm9yIGN1c3RvbSBwcm9taXNlLXJldHVybmluZyBvcGVyYXRpb25zCi0g
ICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKCpzdGF0ZSwg
SlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOwotICAgICAgICB9Ci0g
ICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZvKCkpOwotICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2RlIHRvIHVzZSByZWZlcmVu
Y2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkNh
bGxlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8QXR0cmlidXRlU2V0dGVyRnVuY3Rpb24gc2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
ciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KLSAgICBzdGF0
aWMgYm9vbCBzZXRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGNvbnN0
IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi0gICAgewotICAgICAgICBBU1NFUlQoc3RhdGUpOwotICAg
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsK
LSAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JBdHRyaWJ1dGUoKnN0YXRlLCB0aGlz
VmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3QpKQotICAgICAgICAgICAg
cmV0dXJuIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpID8g
dGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCkt
PmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSkgOiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHNldHRl
cigqc3RhdGUsICp0aGlzT2JqZWN0LCBKU0M6OkpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
LCB0aHJvd1Njb3BlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxBdHRyaWJ1dGVHZXR0ZXJGdW5j
dGlvbiBnZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVl
IGF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShz
dGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yQXR0cmlidXRl
KCpzdGF0ZSwgdGhpc1ZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkg
ewotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
OjpUaHJvdykKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFt
ZSk7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OlJlamVjdFByb21pc2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VX
aXRoR2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0
dHJpYnV0ZU5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpT
Qzo6anNVbmRlZmluZWQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1
ZTo6ZW5jb2RlKGdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7Ci0gICAg
fQotfTsKLQotLy8gRXhjZXB0aW9uT3IgaGFuZGxpbmcuCi12b2lkIHByb3BhZ2F0ZUV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYp
OwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
LCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+JiYp
OwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2Vw
dGlvbk9yPFQ+JiYgdmFsdWUpOwotCi0vLyBJbmxpbmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0ZSBk
ZWZpbml0aW9ucy4KLQotaW5saW5lIEpTQzo6U3RydWN0dXJlKiBET01Db25zdHJ1Y3Rvck9iamVj
dDo6Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi17Ci0gICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotfQotCi1pbmxpbmUg
RE9NQ29uc3RydWN0b3JPYmplY3Q6OkRPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgOiBKU0RP
TU9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0KLQotaW5saW5lIFN0cmluZyBE
T01Db25zdHJ1Y3Rvck9iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KikKLXsKLSAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsKCJGdW5jdGlvbiIpOwotfQotCi1pbmxpbmUgRE9NQ29uc3RydWN0
b3JKU0J1aWx0aW5PYmplY3Q6OkRPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAg
OiBET01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0KLQot
aW5saW5lIEpTQzo6SlNGdW5jdGlvbiogRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6Omlu
aXRpYWxpemVGdW5jdGlvbigpCi17Ci0gICAgcmV0dXJuIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLmdl
dCgpOwotfQotCi1pbmxpbmUgdm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6c2V0
SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mIHZtLCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9u
KQotewotICAgIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLnNldCh2bSwgdGhpcywgJmZ1bmN0aW9uKTsK
LX0KLQotaW5saW5lIEpTRE9NR2xvYmFsT2JqZWN0KiBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9y
UHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIEZJWE1FOiBDYWxsZXJz
IHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzaW5nIHRoZSBnbG9iYWwgb2JqZWN0Ci0gICAg
Ly8gZnJvbSB3aGljaCB0aGUgb2JqZWN0IGlzIGJlaW5nIGNyZWF0ZWQsIGluc3RlYWQgb2YgYXNz
dW1pbmcgdGhlIGxleGljYWwgb25lLgotICAgIC8vIGUuZy4gc3ViZnJhbWUuZG9jdW1lbnQuYm9k
eSBzaG91bGQgdXNlIHRoZSBzdWJmcmFtZSdzIGdsb2JhbCBvYmplY3QsIG5vdCB0aGUgbGV4aWNh
bCBvbmUuCi0gICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNs
YXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBpZiAoSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGdldENhY2hlZERPTVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIFdyYXBw
ZXJDbGFzczo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAgICByZXR1cm4g
Y2FjaGVET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVN0cnVj
dHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVQcm90b3R5cGUodm0s
ICZnbG9iYWxPYmplY3QpKSwgV3JhcHBlckNsYXNzOjppbmZvKCkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdl
dERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAvLyBGSVhNRTogVGhp
cyBmdW5jdGlvbiBpcyB3cm9uZy4gSXQgdXNlcyB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdCBmb3Ig
Y3JlYXRpbmcgdGhlIHByb3RvdHlwZSBzdHJ1Y3R1cmUuCi0gICAgcmV0dXJuIGdldERPTVN0cnVj
dHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMtPnZtKCksICpkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9y
UHJvdG90eXBlKGV4ZWMpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBp
bmxpbmUgSlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTQzo6anNDYXN0PEpT
Qzo6SlNPYmplY3QqPihhc09iamVjdChnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPih2bSwg
KkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSktPnN0b3JlZFBy
b3RvdHlwZSgpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQotewotICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQ2xhc3M6OmNyZWF0
ZShnZXRET01TdHJ1Y3R1cmU8SlNDbGFzcz4oZ2xvYmFsT2JqZWN0LnZtKCksIGdsb2JhbE9iamVj
dCksICZnbG9iYWxPYmplY3QpOwotICAgIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRz
KHN0YXRlLCAqb2JqZWN0LCBpbml0aWFsaXplRnVuY3Rpb24pOwotICAgIHJldHVybiBKU0M6OkpT
VmFsdWU6OmVuY29kZShvYmplY3QpOwotfQotCi1pbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIq
IHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKikK
LXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKj4o
d29ybGQudm0oKS5tX3R5cGVkQXJyYXlDb250cm9sbGVyLmdldCgpKS0+d3JhcHBlck93bmVyKCk7
Ci19Ci0KLWlubGluZSB2b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVj
dCkKLXsKLSAgICByZXR1cm4gZG9tT2JqZWN0OwotfQotCi1pbmxpbmUgSlNET01PYmplY3QqIGdl
dElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCopIHsgcmV0dXJuIG51
bGxwdHI7IH0KLWlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0KiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqKSB7IHJldHVy
biBmYWxzZTsgfQotaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBw
ZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCopIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLWlubGlu
ZSBKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCkKLXsKLSAgICBpZiAoIXdvcmxkLmlzTm9y
bWFsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBkb21PYmplY3QtPndy
YXBwZXIoKTsKLX0KLQotaW5saW5lIEpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVk
V3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIp
Ci17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gYnVmZmVyLT5tX3dyYXBwZXIuZ2V0KCk7Ci19Ci0KLWlubGluZSBib29sIHNl
dElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBh
YmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25l
ciogd3JhcHBlck93bmVyKQotewotICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGRvbU9iamVjdC0+c2V0V3JhcHBlcih3cmFwcGVyLCB3cmFwcGVy
T3duZXIsICZ3b3JsZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIHNldElu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZl
ciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRs
ZU93bmVyKiB3cmFwcGVyT3duZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0LT5tX3dyYXBwZXIgPSBKU0M6OldlYWs8
SlNDOjpKU0FycmF5QnVmZmVyPih3cmFwcGVyLCB3cmFwcGVyT3duZXIsICZ3b3JsZCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01P
YmplY3QqIHdyYXBwZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0LT5jbGVhcldyYXBwZXIod3JhcHBlcik7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6
SlNBcnJheUJ1ZmZlciogd3JhcHBlcikKLXsKLSAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB3ZWFrQ2xlYXIoZG9tT2JqZWN0LT5tX3dyYXBwZXIs
IHdyYXBwZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01D
bGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiB3b3JsZCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKLXsKLSAgICBpZiAoYXV0byogd3JhcHBl
ciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsICZkb21PYmplY3QpKQotICAgICAgICBy
ZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gd29ybGQubV93cmFwcGVycy5nZXQod3JhcHBlcktl
eSgmZG9tT2JqZWN0KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFt
ZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQm
IHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCi17Ci0g
ICAgSlNDOjpXZWFrSGFuZGxlT3duZXIqIG93bmVyID0gd3JhcHBlck93bmVyKHdvcmxkLCBkb21P
YmplY3QpOwotICAgIGlmIChzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3Qs
IHdyYXBwZXIsIG93bmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdlYWtBZGQod29ybGQubV93
cmFwcGVycywgd3JhcHBlcktleShkb21PYmplY3QpLCBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4o
d3JhcHBlciwgb3duZXIsICZ3b3JsZCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFz
cywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCB1bmNhY2hlV3JhcHBlcihET01X
cmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdy
YXBwZXIpCi17Ci0gICAgaWYgKGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2Jq
ZWN0LCB3cmFwcGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdlYWtSZW1vdmUod29ybGQubV93
cmFwcGVycywgd3JhcHBlcktleShkb21PYmplY3QpLCB3cmFwcGVyKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIo
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwg
dHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNs
YXNzKj46OnR5cGUKLXsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSB0eXBlbmFtZSBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICBBU1NF
UlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKTsK
LSAgICBhdXRvKiBkb21PYmplY3RQdHIgPSBkb21PYmplY3QucHRyKCk7Ci0gICAgYXV0byogd3Jh
cHBlciA9IFdyYXBwZXJDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+
KGdsb2JhbE9iamVjdC0+dm0oKSwgKmdsb2JhbE9iamVjdCksIGdsb2JhbE9iamVjdCwgV1RGTW92
ZShkb21PYmplY3QpKTsKLSAgICBjYWNoZVdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBk
b21PYmplY3RQdHIsIHdyYXBwZXIpOwotICAgIHJldHVybiB3cmFwcGVyOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gaW5saW5lIGF1dG8gY3JlYXRlV3JhcHBl
cihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VD4mJiBkb21PYmplY3QpIC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1
ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBl
ckNsYXNzKj46OnR5cGUKLXsKLSAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxET01DbGFzcz4oZ2xv
YmFsT2JqZWN0LCBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8RE9NQ2xhc3M+KFdURk1vdmUoZG9tT2Jq
ZWN0KSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKLXsKLSAgICBpZiAoYXV0byogd3JhcHBlciA9
IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKQotICAg
ICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBSZWY8RE9NQ2xhc3M+KGRvbU9iamVjdCkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUpCi17Ci0gICAgYXV0byB0aGlzVmFsdWUgPSBzdGF0ZS50aGlzVmFsdWUoKTsK
LSAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0NsYXNzKj4oc3RhdGUu
dm0oKSwgdGhpc1ZhbHVlKTsKLSAgICBBU1NFUlQoY2FzdGVkVGhpcyk7Ci0gICAgcmV0dXJuICpj
YXN0ZWRUaGlzOwotfQotCi1pbmxpbmUgaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rYXkpCi17Ci0gICAgZG91
YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIG9rYXkgPSBzdGQ6OmlzZmlu
aXRlKG51bWJlcik7Ci0gICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOwotfQotCi0vLyBW
YWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNl
Y3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KLWlubGluZSBKU0M6OkpTT2JqZWN0KiB0
b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgdW5z
aWduZWQmIGxlbmd0aCkKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBv
YmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICB0
aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotCi0gICAgSlNDOjpKU1ZhbHVlIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5nZXQo
JmV4ZWMsIGV4ZWMucHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7Ci0KLSAgICBpZiAobGVuZ3RoVmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkgewotICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgbGVuZ3RoID0gbGVuZ3RoVmFs
dWUudG9VSW50MzIoJmV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpBcnJheUJ1ZmZlciYgYnVmZmVyKQotewotICAgIGlmIChhdXRvIHJlc3VsdCA9IGdldENh
Y2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBidWZmZXIpKQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotCi0gICAgLy8gVGhlIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSBmdW5jdGlvbiB3
aWxsIHJlZ2lzdGVyIHRoZSB3cmFwcGVyIGluIGZpbmlzaENyZWF0aW9uLgotICAgIHJldHVybiBK
U0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0ZS0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJh
eUJ1ZmZlclN0cnVjdHVyZShidWZmZXIuc2hhcmluZ01vZGUoKSksICZidWZmZXIpOwotfQotCi1p
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3JiB2aWV3KQotewot
ICAgIHJldHVybiB2aWV3LndyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLWlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgcmV0dXJuIHRvSlMoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgKmJ1ZmZlcik7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgaWYgKCF2aWV3KQotICAgICAg
ICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCAqdmlldyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmPFQ+JiYgcHRyKQotewotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgcHRyLmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBSZWZQdHI8VD4mJiBwdHIpCi17Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBwdHIuZ2V0KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQotewotICAgIEpTQzo6Vk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLQotICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5
KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXplKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rv
ci5zaXplKCk7ICsraSkgewotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwg
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXSkpOwotICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJh
eTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBWZWN0b3I8UmVmUHRyPFQ+PiYgdmVjdG9yKQotewotICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LQotICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51
bGxwdHIsIHZlY3Rvci5zaXplKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
Qzo6SlNWYWx1ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7
ICsraSkgewotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXS5nZXQoKSkpOwotICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsK
LX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5hbWUmIHByaXZhdGVOYW1lKQotewot
ICAgIHJldHVybiBKU0M6OlN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHByaXZhdGVOYW1lLnVp
ZCgpKTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB2YWx1ZSwgZmFsc2Up
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVy
YXRvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFQmIHZhbHVlKQotewotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9i
amVjdCgmc3RhdGUsIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZSksIGZhbHNlKTsK
LX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlKQotewotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUs
IEpTQzo6anNVbmRlZmluZWQoKSwgdHJ1ZSk7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpBcnJh
eUJ1ZmZlclZpZXc+IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0s
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93
bmNhc3Q8SlNDOjpKU0FycmF5QnVmZmVyVmlldyo+KHZtLCB2YWx1ZSk7Ci0gICAgaWYgKCF3cmFw
cGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gd3JhcHBlci0+cG9zc2li
bHlTaGFyZWRJbXBsKCk7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+
IHRvVW5zaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICBhdXRvIHJlc3VsdCA9IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXco
dm0sIHZhbHVlKTsKLSAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPmlzU2hhcmVkKCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSBSZWZQ
dHI8SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0s
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZl
VHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8
SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVU
eXBlZFZpZXc8SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8
SlNDOjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVU
eXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8
SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVU
eXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8
SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJs
eVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1
ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVp
bnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6
dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJl
ZFVpbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpT
Qzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZt
LCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvUG9zc2libHlT
aGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1
cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0
b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9z
c2libHlTaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkg
eyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2
NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLQotaW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4g
dG9VbnNoYXJlZEludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0s
IHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQx
NkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9V
bnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQot
aW5saW5lIFJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2
ZVR5cGVkVmlldzxKU0M6OkludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0
cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxK
U0M6OlVpbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4
Q2xhbXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3
PEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxK
U0M6OlVpbnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpT
Qzo6VWludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQz
MkFycmF5PiB0b1Vuc2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDMy
QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4g
dG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7
IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRv
cj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNo
YXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0s
IHZhbHVlKTsgfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1Q+IGlubGluZSBW
ZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotewotICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoIXZhbHVlLmlz
T2JqZWN0KCkpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUp
OwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIFZlY3RvcjxSZWY8VD4+IHJlc3Vs
dDsKLSAgICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpW
TSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlm
IChqc1ZhbHVlLmluaGVyaXRzKHZtLCBKU1Q6OmluZm8oKSkpIHsKLSAgICAgICAgICAgIGF1dG8q
IG9iamVjdCA9IEpTVDo6dG9XcmFwcGVkKHZtLCBqc1ZhbHVlKTsKLSAgICAgICAgICAgIEFTU0VS
VChvYmplY3QpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqb2JqZWN0KTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcigqc3RhdGUsIHNj
b3BlKTsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgU3RyaW5nIHBy
b3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAg
ICBBU1NFUlQoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKTsKLSAgICByZXR1cm4gcHJvcGVydHlO
YW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVpZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUo
KTsKLX0KLQotaW5saW5lIEF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhK
U0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIEF0b21pY1N0cmlu
Zyhwcm9wZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlkKCkgOiBwcm9wZXJ0eU5hbWUu
cHVibGljTmFtZSgpKTsKLX0KLQotdGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiBuYXRpdmVG
dW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBub25DYWNoaW5nU3RhdGlj
RnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSlNDOjpKU1Zh
bHVlOjplbmNvZGUoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBsZW5ndGgsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5h
dGl2ZUZ1bmN0aW9uKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBwcm9wYWdhdGVFeGNlcHRp
b24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4
Y2VwdGlvbiYmIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKHN0YXRlLCB0
aHJvd1Njb3BlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpOwotfQotCi1pbmxpbmUgdm9pZCBwcm9wYWdh
dGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZh
bHVlLmhhc0V4Y2VwdGlvbigpKSkKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0
aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhh
c0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93
U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0g
ICAgfQotICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFz
ZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2Vw
dGlvbk9yPFQ+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlv
bigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZh
bHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVs
ZWFzZVJldHVyblZhbHVlKCkpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCog
QmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIFQmIG5vZGUpCiB7CiAgICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRl
LCAmbm9kZSkgPyAmbm9kZSA6IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjExMzUzKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOjIxMTM1MykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAzNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDEx
LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0
IChDKSAyMDEzIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCisKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJDb21tb25W
TS5oIgorI2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmgiCisjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbkhlYWRlcnMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25JbnRlcmZh
Y2VzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgi
CisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZl
cnQuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0N1
c3RvbS5oIgorI2luY2x1ZGUgIkpTRXhjZXB0aW9uQmFzZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCisjaW5jbHVkZSA8Ynl0ZWNvZGUvQ29kZUJsb2NrLmg+CisjaW5jbHVkZSA8aW5z
cGVjdG9yL1NjcmlwdENhbGxTdGFjay5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxs
U3RhY2tGYWN0b3J5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9FcnJvckhhbmRsaW5nU2Nv
cGUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0Vycm9ySW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0V4Y2VwdGlvbi5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVy
TmFtZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25z
dHJ1Y3Rvck9iamVjdCk7CitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUo
RE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQpOworCit2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNv
bnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGNvbW1vblZNKCkuYWRkSW1w
dXJlUHJvcGVydHkocHJvcGVydHlOYW1lKTsKK30KKworSlNWYWx1ZSBqc093bmVkU3RyaW5nT3JO
dWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQoreworICAgIGlmIChzLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgcmV0dXJuIGpzT3duZWRTdHJpbmco
ZXhlYywgcyk7Cit9CisKK0pTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFN0cmluZyYgcykKK3sKKyAgICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHMp
OworfQorCitKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwp
Cit7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Cit9
CisKK0pTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVS
TCYgdXJsKQoreworICAgIGlmICh1cmwuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkp
OworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb0J5dGVTdHJpbmcoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgU3RyaW5nJiYgc3RyaW5nKQoreworICAg
IGlmICghc3RyaW5nLmNvbnRhaW5zT25seUxhdGluMSgpKSB7CisgICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJl
dHVybiBzdHJpbmc7Cit9CisKK1N0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEV4ZWNTdGF0
ZSYgc3RhdGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmcoKTsKKyAgICByZXR1cm4gc3Ry
aW5nVG9CeXRlU3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKK30KKworU3Ry
aW5nIHZhbHVlVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0
YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgcmV0dXJu
IHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBoYXNVbnBhaXJlZFN1cnJvZ2F0ZShTdHJpbmdWaWV3IHN0cmlu
ZykKK3sKKyAgICAvLyBGYXN0IHBhdGggZm9yIDgtYml0IHN0cmluZ3M7IHRoZXkgY2FuJ3QgaGF2
ZSBhbnkgc3Vycm9nYXRlcy4KKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkp
IHsKKyAgICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5l
IFN0cmluZyBzdHJpbmdUb1VTVlN0cmluZyhTdHJpbmcmJiBzdHJpbmcpCit7CisgICAgLy8gRmFz
dCBwYXRoIGZvciB0aGUgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbm8gdW5wYWlyZWQgc3Vycm9nYXRl
cy4KKyAgICBpZiAoIWhhc1VucGFpcmVkU3Vycm9nYXRlKHN0cmluZykpCisgICAgICAgIHJldHVy
biBzdHJpbmc7CisKKyAgICAvLyBTbG93IHBhdGg6IGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dl
YmlkbC8jZGZuLW9idGFpbi11bmljb2RlCisgICAgLy8gUmVwbGFjZXMgdW5wYWlyZWQgc3Vycm9n
YXRlcyB3aXRoIHRoZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCisgICAgU3RyaW5nQnVpbGRlciBy
ZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShzdHJpbmcubGVuZ3RoKCkpOworICAg
IFN0cmluZ1ZpZXcgdmlldyB7IHN0cmluZyB9OworICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiB2
aWV3LmNvZGVQb2ludHMoKSkgeworICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50
KSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVQb2ludCk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIGlkZW50aWZpZXJUb1VT
VlN0cmluZyhFeGVjU3RhdGUmLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQoreworICAg
IFN0cmluZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOworICAgIHJldHVybiBzdHJpbmdU
b1VTVlN0cmluZyhXVEZNb3ZlKHN0cmluZykpOworfQorCitTdHJpbmcgdmFsdWVUb1VTVlN0cmlu
ZyhFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
U3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhX
VEZNb3ZlKHN0cmluZykpOworfQorCitKU1ZhbHVlIGpzRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGRv
dWJsZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0o
KSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsK
K30KKworZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzTnVt
YmVyKCk7CisgICAgaWYgKCF2YWx1ZS5pbmhlcml0cyhleGVjLT52bSgpLCBEYXRlSW5zdGFuY2U6
OmluZm8oKSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1
aWV0X05hTigpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50
b09iamVjdChleGVjKSktPmludGVybmFsTnVtYmVyKCk7Cit9CisKK3ZvaWQgcmVwb3J0RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgQ2FjaGVkU2NyaXB0
KiBjYWNoZWRTY3JpcHQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRvKiBl
eGNlcHRpb24gPSBqc0R5bmFtaWNEb3duY2FzdDxKU0M6OkV4Y2VwdGlvbio+KHZtLCBleGNlcHRp
b25WYWx1ZSk7CisgICAgaWYgKCFleGNlcHRpb24pIHsKKyAgICAgICAgZXhjZXB0aW9uID0gdm0u
bGFzdEV4Y2VwdGlvbigpOworICAgICAgICBpZiAoIWV4Y2VwdGlvbikKKyAgICAgICAgICAgIGV4
Y2VwdGlvbiA9IEpTQzo6RXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhjZXB0aW9uVmFs
dWUsIEpTQzo6RXhjZXB0aW9uOjpEb05vdENhcHR1cmVTdGFjayk7CisgICAgfQorCisgICAgcmVw
b3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgY2FjaGVkU2NyaXB0KTsKK30KKworU3RyaW5n
IHJldHJpZXZlRXJyb3JNZXNzYWdlKEV4ZWNTdGF0ZSYgc3RhdGUsIFZNJiB2bSwgSlNWYWx1ZSBl
eGNlcHRpb24sIENhdGNoU2NvcGUmIGNhdGNoU2NvcGUpCit7CisgICAgaWYgKGF1dG8qIGV4Y2Vw
dGlvbkJhc2UgPSB0b0V4Y2VwdGlvbkJhc2Uodm0sIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVy
biBleGNlcHRpb25CYXNlLT50b1N0cmluZygpOworCisgICAgLy8gRklYTUU6IDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3BlY3RvcjogV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9u
IHNob3VsZCBub3QgZXZhbHVhdGUgSmF2YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCisgICAg
Ly8gSWYgdGhpcyBpcyBhIGN1c3RvbSBleGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9u
IGl0IHRvIHRyeSBhbmQgZ2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBl
eGNlcHRpb24uCisgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKKyAgICBpZiAoYXV0byogZXJyb3Ig
PSBqc0R5bmFtaWNEb3duY2FzdDxFcnJvckluc3RhbmNlKj4odm0sIGV4Y2VwdGlvbikpCisgICAg
ICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLT5zYW5pdGl6ZWRUb1N0cmluZygmc3RhdGUpOworICAg
IGVsc2UKKyAgICAgICAgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLnRvV1RGU3RyaW5nKCZzdGF0
ZSk7CisKKyAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIGFueSBuZXcgZXhjZXB0aW9uIHRoYXQgbWF5
IGJlIHRocm93biBpbiB0aGUgdG9TdHJpbmcoKSBjYWxsIGFib3ZlLgorICAgIC8vIHJlcG9ydEV4
Y2VwdGlvbigpIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBtYWtpbmcgbmV3IGV4Y2VwdGlvbnMuCisg
ICAgY2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlv
bigpOworICAgIHJldHVybiBlcnJvck1lc3NhZ2U7Cit9CisKK3ZvaWQgcmVwb3J0RXhjZXB0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0
KiBjYWNoZWRTY3JpcHQsIEV4Y2VwdGlvbkRldGFpbHMqIGV4Y2VwdGlvbkRldGFpbHMpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
QVBJTG9jaygpKTsKKyAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLCBl
eGNlcHRpb24pKQorICAgICAgICByZXR1cm47CisKKyAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJy
b3JTY29wZShleGVjLT52bSgpKTsKKworICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxT
dGFjayhjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwg
U2NyaXB0Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKSk7CisgICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKKworICAgIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIGlmIChKU0RPTVdpbmRvdyogd2lu
ZG93ID0ganNEeW5hbWljRG93bmNhc3Q8SlNET01XaW5kb3cqPih2bSwgZ2xvYmFsT2JqZWN0KSkg
eworICAgICAgICBpZiAoIXdpbmRvdy0+d3JhcHBlZCgpLmlzQ3VycmVudGx5RGlzcGxheWVkSW5G
cmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBsaW5lTnVtYmVy
ID0gMDsKKyAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsKKyAgICBTdHJpbmcgZXhjZXB0aW9uU291
cmNlVVJMOworICAgIGlmIChjb25zdCBTY3JpcHRDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxT
dGFjay0+Zmlyc3ROb25OYXRpdmVDYWxsRnJhbWUoKSkgeworICAgICAgICBsaW5lTnVtYmVyID0g
Y2FsbEZyYW1lLT5saW5lTnVtYmVyKCk7CisgICAgICAgIGNvbHVtbk51bWJlciA9IGNhbGxGcmFt
ZS0+Y29sdW1uTnVtYmVyKCk7CisgICAgICAgIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGNhbGxGcmFt
ZS0+c291cmNlVVJMKCk7CisgICAgfQorCisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHJldHJp
ZXZlRXJyb3JNZXNzYWdlKCpleGVjLCB2bSwgZXhjZXB0aW9uLT52YWx1ZSgpLCBzY29wZSk7Cisg
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdsb2Jh
bE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPnJlcG9ydEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51
bWJlciwgZXhjZXB0aW9uU291cmNlVVJMLCBleGNlcHRpb24sIGNhbGxTdGFjay0+c2l6ZSgpID8g
Y2FsbFN0YWNrIDogbnVsbHB0ciwgY2FjaGVkU2NyaXB0KTsKKworICAgIGlmIChleGNlcHRpb25E
ZXRhaWxzKSB7CisgICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPm1lc3NhZ2UgPSBlcnJvck1lc3Nh
Z2U7CisgICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwor
ICAgICAgICBleGNlcHRpb25EZXRhaWxzLT5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7Cisg
ICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPnNvdXJjZVVSTCA9IGV4Y2VwdGlvblNvdXJjZVVSTDsK
KyAgICB9Cit9CisKK3ZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CisgICAgYXV0byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7
CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICByZXBvcnRFeGNlcHRpb24oZXhlYywg
ZXhjZXB0aW9uKTsKK30KKworc3RhdGljIEpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nKiBtZXNzYWdlID0gbnVs
bHB0cikKK3sKKyAgICBpZiAoIWVjIHx8IGVjID09IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IpCisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgLy8gRklYTUU6IEhhbmRsZSBvdGhl
ciBXZWJJREwgZXhjZXB0aW9uIHR5cGVzLgorICAgIGlmIChlYyA9PSBUeXBlRXJyb3IpIHsKKyAg
ICAgICAgaWYgKCFtZXNzYWdlIHx8IG1lc3NhZ2UtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgKm1lc3NhZ2UpOworICAgIH0KKworICAgIGlmIChlYyA9PSBSYW5nZUVycm9yKSB7
CisgICAgICAgIGlmICghbWVzc2FnZSB8fCBtZXNzYWdlLT5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkJhZCB2YWx1ZSIp
KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgKm1lc3NhZ2UpOworICAg
IH0KKworICAgIGlmIChlYyA9PSBTdGFja092ZXJmbG93RXJyb3IpCisgICAgICAgIHJldHVybiBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisKKyAgICAvLyBGSVhNRTogQWxsIGNhbGxl
cnMgdG8gY3JlYXRlRE9NRXhjZXB0aW9uIG5lZWQgdG8gcGFzcyBpbiB0aGUgY29ycmVjdCBnbG9i
YWwgb2JqZWN0LgorICAgIC8vIEZvciBub3csIHdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGUgbGV4
aWNhbEdsb2JhbE9iamVjdC4gV2hpY2ggaXMgd3JvbmcgaW4gY2FzZXMgbGlrZSB0aGlzOgorICAg
IC8vIGZyYW1lc1swXS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KG51bGwsIG51bGwpOyAvLyB0aHJv
d3MgYW4gZXhjZXB0aW9uIHdoaWNoIHNob3VsZCBoYXZlIHRoZSBzdWJmcmFtZSdzIHByb3RvdHlw
ZXMuCisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGRlcHJlY2F0ZWRHbG9i
YWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyk7CisKKyAgICBFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZGVzY3JpcHRpb24oZWMpOworCisgICAgQ1N0cmluZyBtZXNzYWdlQ1N0cmluZzsKKyAgICBp
ZiAobWVzc2FnZSkKKyAgICAgICAgbWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlLT51dGY4KCk7Cisg
ICAgaWYgKG1lc3NhZ2UgJiYgIW1lc3NhZ2UtPmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJdCBp
cyBzYWZlIHRvIGRvIHRoaXMgYmVjYXVzZSB0aGUgY2hhciogY29udGVudHMgb2YgdGhlIENTdHJp
bmcgYXJlIGNvcGllZCBpbnRvIGEgbmV3IFdURjo6U3RyaW5nIGJlZm9yZSB0aGUgQ1N0cmluZyBp
cyBkZXN0cm95ZWQuCisgICAgICAgIGRlc2NyaXB0aW9uLmRlc2NyaXB0aW9uID0gbWVzc2FnZUNT
dHJpbmcuZGF0YSgpOworICAgIH0KKworICAgIEpTVmFsdWUgZXJyb3JPYmplY3Q7CisgICAgc3dp
dGNoIChkZXNjcmlwdGlvbi50eXBlKSB7CisgICAgY2FzZSBET01Db3JlRXhjZXB0aW9uVHlwZToK
KyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICBjYXNlIElEQkRhdGFiYXNlRXhjZXB0
aW9uVHlwZToKKyNlbmRpZgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBET01Db3JlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGaWxlRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJyb3JPYmplY3Qg
PSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgRmlsZUV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0
aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1FMRXhjZXB0aW9uVHlwZToKKyAgICAg
ICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1FMRXhjZXB0aW9uOjpj
cmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTVkdFeGNlcHRp
b25UeXBlOgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBT
VkdFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFhQYXRoRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgWFBhdGhFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKGVycm9yT2JqZWN0KTsKKyAgICBh
ZGRFcnJvckluZm8oZXhlYywgYXNPYmplY3QoZXJyb3JPYmplY3QpLCB0cnVlKTsKKyAgICByZXR1
cm4gZXJyb3JPYmplY3Q7Cit9CisKK0pTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgRXhjZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IHJldHVybiBjcmVhdGVET01FeGNlcHRpb24oZXhlYywgZWMsICZtZXNzYWdlKTsKK30KKworSlNW
YWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uJiYgZXhj
ZXB0aW9uKQoreworICAgIHJldHVybiBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBleGNlcHRp
b24uY29kZSgpLCBleGNlcHRpb24ucmVsZWFzZU1lc3NhZ2UoKSk7Cit9CisKK3ZvaWQgcHJvcGFn
YXRlRXhjZXB0aW9uU2xvd1BhdGgoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoIXRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKHN0YXRlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpKTsKK30K
KworYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gSlNDOjph
c09iamVjdCh2YWx1ZSk7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2Fs
bFR5cGU7CisgICAgSlNWYWx1ZSBhcHBseU1ldGhvZCA9IG9iamVjdC0+Z2V0TWV0aG9kKCZzdGF0
ZSwgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwg
QVNDSUlMaXRlcmFsKCJTeW1ib2wuaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNhbGxhYmxl
IikpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKKworICAgIHJldHVy
biAhYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShFeGVjU3RhdGUmIHN0YXRlLCBGcmFtZSYgZnJhbWUs
IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxv
d0FjY2Vzc1RvRnJhbWUoJnN0YXRlLCAmZnJhbWUsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIG1lc3NhZ2UgPSBmcmFtZS5kb2N1bWVudCgpLT5k
b21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93
KCZzdGF0ZSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coRXhlY1N0YXRlJiBzdGF0ZSwgRE9NV2luZG93
JiBnbG9iYWxPYmplY3QsIFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBE
b05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBtZXNz
YWdlID0gZ2xvYmFsT2JqZWN0LmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURP
TVdpbmRvdygmc3RhdGUpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgcHJpbnRFcnJv
ck1lc3NhZ2VGb3JGcmFtZShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sK
KyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgZnJhbWUtPmRvY3VtZW50KCkt
PmRvbVdpbmRvdygpLT5wcmludEVycm9yTWVzc2FnZShtZXNzYWdlKTsKK30KKworU3RydWN0dXJl
KiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCit7CisgICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0
cnVjdHVyZXMgPSBnbG9iYWxPYmplY3Quc3RydWN0dXJlcyhOb0xvY2tpbmdOZWNlc3NhcnkpOwor
ICAgIHJldHVybiBzdHJ1Y3R1cmVzLmdldChjbGFzc0luZm8pLmdldCgpOworfQorCitTdHJ1Y3R1
cmUqIGNhY2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKGdsb2JhbE9iamVjdC52bSgpLmhlYXAsIGds
b2JhbE9iamVjdC5nY0xvY2soKSk7CisgICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMg
PSBnbG9iYWxPYmplY3Quc3RydWN0dXJlcyhsb2NrZXIpOworICAgIEFTU0VSVCghc3RydWN0dXJl
cy5jb250YWlucyhjbGFzc0luZm8pKTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJ
bmZvLCBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPihnbG9iYWxPYmplY3Qudm0oKSwgJmdsb2JhbE9i
amVjdCwgc3RydWN0dXJlKSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworfQorCitzdGF0aWMgY29u
c3QgaW50MzJfdCBrTWF4SW50MzIgPSAweDdmZmZmZmZmOworc3RhdGljIGNvbnN0IGludDMyX3Qg
a01pbkludDMyID0gLWtNYXhJbnQzMiAtIDE7CitzdGF0aWMgY29uc3QgdWludDMyX3Qga01heFVJ
bnQzMiA9IDB4ZmZmZmZmZmZVOworc3RhdGljIGNvbnN0IGludDY0X3Qga0pTTWF4SW50ZWdlciA9
IDB4MjAwMDAwMDAwMDAwMDBMTCAtIDE7IC8vIDJeNTMgLSAxLCBsYXJnZXN0IGludGVnZXIgZXhh
Y3RseSByZXByZXNlbnRhYmxlIGluIEVDTUFTY3JpcHQuCisKK3N0YXRpYyBTdHJpbmcgcmFuZ2VF
cnJvclN0cmluZyhkb3VibGUgdmFsdWUsIGRvdWJsZSBtaW4sIGRvdWJsZSBtYXgpCit7CisgICAg
cmV0dXJuIG1ha2VTdHJpbmcoIlZhbHVlICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2Ny
aXB0KHZhbHVlKSwgIiBpcyBvdXRzaWRlIHRoZSByYW5nZSBbIiwgU3RyaW5nOjpudW1iZXJUb1N0
cmluZ0VDTUFTY3JpcHQobWluKSwgIiwgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3Jp
cHQobWF4KSwgIl0iKTsKK30KKworc3RhdGljIGRvdWJsZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRl
JiBzdGF0ZSwgZG91YmxlIHgsIGRvdWJsZSBtaW5pbXVtLCBkb3VibGUgbWF4aW11bSkKK3sKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkpIHsKKyAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBt
aW5pbXVtLCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB4ID0gdHJ1
bmMoeCk7CisgICAgaWYgKHggPCBtaW5pbXVtIHx8IHggPiBtYXhpbXVtKSB7CisgICAgICAgIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwg
bWF4aW11bSkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHg7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEludFR5cGVMaW1pdHMgeworfTsKKwordGVt
cGxhdGUgPD4KK3N0cnVjdCBJbnRUeXBlTGltaXRzPGludDhfdD4geworICAgIHN0YXRpYyBjb25z
dCBpbnQ4X3QgbWluVmFsdWUgPSAtMTI4OworICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWF4VmFs
dWUgPSAxMjc7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2
OyAvLyAyXjgKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50OF90
PiB7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7CisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKK307CisKK3RlbXBs
YXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czxpbnQxNl90PiB7CisgICAgc3RhdGljIGNvbnN0
IHNob3J0IG1pblZhbHVlID0gLTMyNzY4OworICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtYXhWYWx1
ZSA9IDMyNzY3OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1
NTM2OyAvLyAyXjE2Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVMaW1pdHM8dWlu
dDE2X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbWF4VmFsdWUgPSA2NTUz
NTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8g
Ml4xNgorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIFQgdG9TbWFs
bGVySW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3NpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6
dmFsdWUsICJTaG91bGQgb25seSBiZSB1c2VkIGZvciBzaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsK
KworICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFpdDsKKyAgICAvLyBGYXN0
IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgaW4g
dGhlIHJpZ2h0IHJhbmdlLgorICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpIHsKKyAgICAgICAgaW50
MzJfdCBkID0gdmFsdWUuYXNJbnQzMigpOworICAgICAgICBpZiAoZCA+PSBMaW1pdHNUcmFpdDo6
bWluVmFsdWUgJiYgZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gZCA8IExpbWl0c1Ry
YWl0OjptaW5WYWx1ZSA/IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA6IExpbWl0c1RyYWl0OjptYXhW
YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBkICU9IExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVl
czsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQgPiBMaW1pdHNUcmFpdDo6bWF4VmFs
dWUgPyBkIC0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzIDogZCk7CisgICAgfQorCisgICAg
ZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIDApOworCisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAg
ICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgTGltaXRzVHJhaXQ6Om1pblZhbHVl
LCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xh
bXBUbzxUPih4KTsKKyAgICB9CisKKyAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5m
KHgpIHx8ICF4KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHggPSB4IDwgMCA/IC1mbG9vcihm
YWJzKHgpKSA6IGZsb29yKGZhYnMoeCkpOworICAgIHggPSBmbW9kKHgsIExpbWl0c1RyYWl0Ojpu
dW1iZXJPZlZhbHVlcyk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oeCA+IExpbWl0c1Ry
YWl0OjptYXhWYWx1ZSA/IHggLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiB4KTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUs
ICJTaG91bGQgb25seSBiZSB1c2VkIGZvciB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOworCisg
ICAgdHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OworICAgIC8vIEZhc3QgcGF0
aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRo
ZSByaWdodCByYW5nZS4KKyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkgeworICAgICAgICB1aW50
MzJfdCBkID0gdmFsdWUuYXNVSW50MzIoKTsKKyAgICAgICAgaWYgKGQgPD0gTGltaXRzVHJhaXQ6
Om1heFZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOworICAgICAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
PihkKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZToKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisKKyAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRl
LCB4LCAwLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAw
IDogY2xhbXBUbzxUPih4KTsKKyAgICB9CisKKyAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6
OmlzaW5mKHgpIHx8ICF4KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHggPSB4IDwgMCA/IC1m
bG9vcihmYWJzKHgpKSA6IGZsb29yKGZhYnMoeCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
PihmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcykpOworfQorCitpbnQ4X3QgdG9J
bnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisKK3VpbnQ4X3QgdG9VSW50
OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisKK2ludDhfdCB0b0ludDhD
bGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJu
IHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKK3VpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1
aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xh
bXApOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWJ5dGUKK2ludDhf
dCB0b0ludDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
dG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8j
ZXMtb2N0ZXQKK3VpbnQ4X3QgdG9VSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQorCitpbnQxNl90IHRvSW50
MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOworfQorCit1aW50MTZfdCB0b1VJbnQxNkVu
Zm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVy
biB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKK30KKworaW50MTZfdCB0b0ludDE2Q2xhbXAo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVy
SW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcCk7Cit9CisKK3VpbnQxNl90IHRvVUludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3Rh
dGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKwor
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1zaG9ydAoraW50MTZfdCB0b0ludDE2
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxl
ckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNp
Z25lZC1zaG9ydAordWludDE2X3QgdG9VSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6
Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtbG9uZworaW50MzJfdCB0b0ludDMyRW5mb3JjZVJh
bmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwor
CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIGtN
aW5JbnQzMiwga01heEludDMyKTsKK30KKworaW50MzJfdCB0b0ludDMyQ2xhbXAoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAg
ICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88aW50
MzJfdD4oeCk7Cit9CisKK3VpbnQzMl90IHRvVUludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0
dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzx1aW50MzJfdD4o
eCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9u
ZwordWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQorICAg
ICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICBy
ZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrTWF4VUludDMyKTsKK30KKworaW50NjRf
dCB0b0ludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3Jj
ZVJhbmdlKHN0YXRlLCB4LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50ZWdlcik7Cit9CisKK3Vp
bnQ2NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4g
ZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrSlNNYXhJbnRlZ2VyKTsKK30KKworaW50NjRfdCB0
b0ludDY0Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAg
IGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25h
bih4KSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4
PGRvdWJsZT4oeCwgLWtKU01heEludGVnZXIpLCBrSlNNYXhJbnRlZ2VyKSk7Cit9CisKK3VpbnQ2
NF90IHRvVUludDY0Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
eworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3Rk
Ojppc25hbih4KSA/IDAgOiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihz
dGQ6Om1heDxkb3VibGU+KHgsIDApLCBrSlNNYXhJbnRlZ2VyKSk7Cit9CisKKy8vIGh0dHA6Ly93
d3cudzMub3JnL1RSL1dlYklETC8jZXMtbG9uZy1sb25nCitpbnQ2NF90IHRvSW50NjQoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7CisKKyAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29u
dmVydCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBu
OworICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsKKyAgICByZXR1cm4gbjsKK30KKworLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nLWxvbmcKK3VpbnQ2NF90
IHRvVUludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworCisgICAgLy8gTWFwIE5hTnMgYW5kICsvLUlu
ZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KKyAgICB1bnNp
Z25lZCBsb25nIGxvbmcgbjsKKyAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7CisgICAgcmV0dXJu
IG47Cit9CisKK2NsYXNzIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgeworcHVibGljOgor
ICAgIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBTdGFj
a1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSkgeworICAgICAgICAg
ICAgbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gU3Rh
Y2tWaXNpdG9yOjpDb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRvKiBjb2Rl
QmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKSkKKyAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0
ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBBU1NFUlQodmlzaXRvci0+Y2FsbGVlKCkpOworICAgICAgICAgICAgLy8gRklYTUU6IENhbGxl
ZSBpcyBub3QgYW4gb2JqZWN0IGlmIHRoZSBjYWxsZXIgaXMgV2ViIEFzc2VtYmx5LgorICAgICAg
ICAgICAgLy8gRmlndXJlIG91dCB3aGF0IHRvIGRvIGhlcmUuIFdlIGNhbiBwcm9iYWJseSBnZXQg
dGhlIGdsb2JhbCBvYmplY3QKKyAgICAgICAgICAgIC8vIGZyb20gdGhlIHRvcC1tb3N0IFdhc20g
SW5zdGFuY2UuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MjEK
KyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5jYWxsZWUoKS0+aXNPYmplY3QoKSkKKyAgICAgICAg
ICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxl
ZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0YWNrVmlz
aXRvcjo6RG9uZTsKKyAgICB9CisKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3Q7IH0KKworcHJpdmF0ZToKKyAgICBtdXRhYmxl
IGJvb2wgbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSB7IGZhbHNlIH07CisgICAgbXV0YWJsZSBKU0ds
b2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3QgeyBudWxscHRyIH07Cit9OworCitET01XaW5kb3cm
IGNhbGxlckRPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgR2V0Q2FsbGVyR2xvYmFs
T2JqZWN0RnVuY3RvciBpdGVyOworICAgIGV4ZWMtPml0ZXJhdGUoaXRlcik7CisgICAgcmV0dXJu
IGl0ZXIuZ2xvYmFsT2JqZWN0KCkgPyBhc0pTRE9NV2luZG93KGl0ZXIuZ2xvYmFsT2JqZWN0KCkp
LT53cmFwcGVkKCkgOiBmaXJzdERPTVdpbmRvdyhleGVjKTsKK30KKworRE9NV2luZG93JiBhY3Rp
dmVET01XaW5kb3coRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBhc0pTRE9NV2luZG93
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKTsKK30KKworRE9NV2luZG93
JiBmaXJzdERPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGFzSlNET01X
aW5kb3coZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgY2FuQWNjZXNzRG9jdW1lbnQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBE
b2N1bWVudCogdGFyZ2V0RG9jdW1lbnQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGlu
Z09wdGlvbikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIXRhcmdldERvY3VtZW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBET01XaW5kb3cmIGFjdGl2ZSA9IGFjdGl2ZURPTVdp
bmRvdyhzdGF0ZSk7CisKKyAgICBpZiAoYWN0aXZlLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCkuY2FuQWNjZXNzKHRhcmdldERvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBzd2l0Y2ggKHJlcG9ydGluZ09wdGlvbikgeworICAgIGNhc2Ug
VGhyb3dTZWN1cml0eUVycm9yOgorICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKnN0YXRlLCBz
Y29wZSwgdGFyZ2V0RG9jdW1lbnQtPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9y
TWVzc2FnZShhY3RpdmUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMb2dTZWN1cml0eUVy
cm9yOgorICAgICAgICBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKHRhcmdldERvY3VtZW50LT5m
cmFtZSgpLCB0YXJnZXREb2N1bWVudC0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJy
b3JNZXNzYWdlKGFjdGl2ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERvTm90UmVwb3J0
U2VjdXJpdHlFcnJvcjoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRv
dyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERPTVdpbmRvdyYgdGFyZ2V0LCBTZWN1cml0eVJlcG9y
dGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCit7CisgICAgcmV0dXJuIGNhbkFjY2Vzc0RvY3Vt
ZW50KHN0YXRlLCB0YXJnZXQuZG9jdW1lbnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKK30KKworYm9v
bCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEZyYW1lKiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGlu
Z09wdGlvbikKK3sKKyAgICByZXR1cm4gdGFyZ2V0ICYmIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRl
LCB0YXJnZXQtPmRvY3VtZW50KCksIHJlcG9ydGluZ09wdGlvbik7Cit9CisKK2Jvb2wgQmluZGlu
Z1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IE5vZGUqIHRhcmdldCkKK3sKKyAgICByZXR1cm4gIXRhcmdldCB8fCBjYW5BY2Nlc3NEb2N1bWVu
dCgmc3RhdGUsICZ0YXJnZXQtPmRvY3VtZW50KCksIExvZ1NlY3VyaXR5RXJyb3IpOworfQorICAg
IAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIHRocm93VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
Cit7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgZXJyb3JNZXNz
YWdlKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kQXJndW1lbnRNdXN0QmUoU3RyaW5nQnVpbGRl
ciYgYnVpbGRlciwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnRO
YW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUp
Cit7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJBcmd1bWVudCAiKTsKKyAgICBidWlsZGVy
LmFwcGVuZE51bWJlcihhcmd1bWVudEluZGV4ICsgMSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIgKCciKTsKKyAgICBidWlsZGVyLmFwcGVuZChhcmd1bWVudE5hbWUpOworICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiJykgdG8gIik7CisgICAgaWYgKCFmdW5jdGlvbk5hbWUpIHsKKyAg
ICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ0aGUgIik7CisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKGludGVyZmFjZU5hbWUpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBjb25z
dHJ1Y3RvciIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFj
ZU5hbWUpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgnLicpOworICAgICAgICBidWlsZGVyLmFw
cGVuZChmdW5jdGlvbk5hbWUpOworICAgIH0KKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBt
dXN0IGJlICIpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0
ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgYXV0byYgY29udGV4dCA9ICpqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRl
ZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBu
b24tIiwgaW50ZXJmYWNlTmFtZSwgIiBvYmplY3QuIikpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisgICAgCit2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0
ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgYXV0byYgY29udGV4dCA9ICpqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRl
ZCBhdHRlbXB0IHRvIHNldCBwcm9wZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24t
IiwgaW50ZXJmYWNlTmFtZSwgIiBvYmplY3QuIikpOworfQorCit2b2lkIHRocm93Tm90U3VwcG9y
dGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQor
eworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZz
dGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJS
KSk7Cit9CisKK3ZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAg
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVz
c2FnZSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0
aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIsICZtZXNzYWdlU3RyaW5nKSk7Cit9CisKK3Zv
aWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7CisgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7CisgICAg
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwg
SU5WQUxJRF9TVEFURV9FUlIsICZtZXNzYWdlU3RyaW5nKSk7Cit9CisKK3ZvaWQgdGhyb3dTZWN1
cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigm
c3RhdGUsIFNFQ1VSSVRZX0VSUiwgbWVzc2FnZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVl
IHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBh
cmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFZhbHVlcykKK3sKKyAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJn
dW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9u
TmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJvbmUgb2Y6ICIpOworICAgIGJ1aWxk
ZXIuYXBwZW5kKGV4cGVjdGVkVmFsdWVzKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigm
c3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOworfQorCitKU0M6OkVuY29kZWRKU1Zh
bHVlIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3Qg
Y2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGFwcGVu
ZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgaW50
ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImEg
ZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBi
dWlsZGVyLnRvU3RyaW5nKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1l
bnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0
IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwor
ICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50
TmFtZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOworICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiYW4gaW5zdGFuY2Ugb2YgIik7CisgICAgYnVpbGRlci5hcHBlbmQoZXhw
ZWN0ZWRUeXBlKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBi
dWlsZGVyLnRvU3RyaW5nKCkpOworfQorCit2b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICB0
aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBBcnJheSBl
bGVtZW50IHR5cGUiKSk7Cit9CisKK3ZvaWQgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3Rl
ZFR5cGUpCit7CisgICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJU
aGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGF0dHJpYnV0ZSBtdXN0
IGJlIGFuIGluc3RhbmNlIG9mICIsIGV4cGVjdGVkVHlwZSkpOworfQorCitKU0M6OkVuY29kZWRK
U1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBj
aGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQoreworICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIk1lbWJlciAi
KTsKKyAgICBidWlsZGVyLmFwcGVuZChkaWN0aW9uYXJ5TmFtZSk7CisgICAgYnVpbGRlci5hcHBl
bmQoJy4nKTsKKyAgICBidWlsZGVyLmFwcGVuZChtZW1iZXJOYW1lKTsKKyAgICBidWlsZGVyLmFw
cGVuZExpdGVyYWwoIiBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiKTsK
KyAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFR5cGUpOworICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Cit9CisKK0pTQzo6RW5j
b2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWls
YWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSkKK3sKKyAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZz
dGF0ZSwgc2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKCZzdGF0ZSwgbWFrZVN0cmluZyhpbnRl
cmZhY2VOYW1lLCAiIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMg
dW5hdmFpbGFibGUiKSkpOworfQorCit2b2lkIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIHRocm93VHlw
ZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJWYWx1ZSBpcyBub3QgYSBzZXF1ZW5j
ZSIpKTsKK30KKwordm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIHByb3ZpZGVkIHZhbHVlIGlzIG5vbi1maW5pdGUiKSk7
Cit9CisKK1N0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQoreworICAgIHJldHVybiBtYWtl
U3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGdldHRl
ciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKK30K
KworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNl
TmFtZSwgYXR0cmlidXRlTmFtZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFBy
b21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKK3sKKyAgICByZXR1
cm4gY3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZUdldHRlclR5
cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgYXR0cmlidXRlTmFtZSkpOworfQorCitib29s
IHRocm93U2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmli
dXRlTmFtZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmco
IlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgc2V0dGVyIGNhbiBv
bmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK1N0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIHJldHVy
biBtYWtlU3RyaW5nKCJDYW4gb25seSBjYWxsICIsIGludGVyZmFjZU5hbWUsICcuJywgZnVuY3Rp
b25OYW1lLCAiIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKK30KKworRW5jb2Rl
ZEpTVmFsdWUgdGhyb3dUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lKQoreworICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUs
IG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpKTsK
K30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3Io
RGVmZXJyZWRQcm9taXNlJiBwcm9taXNlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBtZXRob2ROYW1lKQoreworICAgIHByb21pc2UucmVqZWN0KFR5cGVFcnJvciwgbWFr
ZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitKU0M6OkVuY29kZWRK
U1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCit7
CisgICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1h
a2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7Cit9CisK
K3ZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9u
KQoreworICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7CisgICAgSlNDOjpDYWxsVHlwZSBjYWxs
VHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoJmZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgQVNTRVJU
KGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKKworICAgIEpTQzo6TWFya2VkQXJndW1lbnRC
dWZmZXIgYXJndW1lbnRzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5hcmd1
bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudChpKSk7CisgICAgSlNDOjpjYWxsKCZzdGF0ZSwgJmZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVudHMpOworfQorCit2b2lkIERPTUNvbnN0
cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiBjZWxsLCBK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX2luaXRpYWxpemVGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ29uc3Ry
dWN0b3IgcmVxdWlyZXMgJ25ldycgb3BlcmF0b3IiKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSk7Cit9CisKK0NhbGxUeXBlIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpnZXRD
YWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0
aXZlLmZ1bmN0aW9uID0gY2FsbFRocm93VHlwZUVycm9yOworICAgIHJldHVybiBDYWxsVHlwZTo6
SG9zdDsKK30KKwordm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlv
bigpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRp
b24oJnN0YXRlLCBTWU5UQVhfRVJSKSk7Cit9CisKK3ZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgREFUQV9DTE9ORV9FUlIpKTsKK30KKwordm9p
ZCB0aHJvd0luZGV4U2l6ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTkRF
WF9TSVpFX0VSUikpOworfQorCit2b2lkIHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0
ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFRZUEVfTUlTTUFUQ0hfRVJSKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQoj
IyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw5NTkgKzIwLDE3IEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUg
IkpTRE9NQ29uc3RydWN0b3IuaCIKIAotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1
ZGUgIkNvbW1vblZNLmgiCi0jaW5jbHVkZSAiRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uSGVhZGVycy5oIgotI2luY2x1ZGUgIkV4Y2Vw
dGlvbkludGVyZmFjZXMuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxQYXJz
ZXJJZGlvbXMuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUg
IkpTRE9NQ29udmVydC5oIgotI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgotI2luY2x1ZGUgIkpT
RE9NV2luZG93Q3VzdG9tLmgiCi0jaW5jbHVkZSAiSlNFeGNlcHRpb25CYXNlLmgiCi0jaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlIDxieXRlY29kZS9Db2RlQmxvY2suaD4KLSNp
bmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4KLSNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5j
ZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9y
SGFuZGxpbmdTY29wZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25I
ZWxwZXJzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8c3Rk
YXJnLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9DaGFyYWN0ZXJOYW1lcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
KyNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7Ci11
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNUQVRJ
Q19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3Rvck9iamVjdCk7
CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9NQ29uc3RydWN0b3JX
aXRoRG9jdW1lbnQpOwotCi12b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmlu
ZyYgcHJvcGVydHlOYW1lKQotewotICAgIGNvbW1vblZNKCkuYWRkSW1wdXJlUHJvcGVydHkocHJv
cGVydHlOYW1lKTsKLX0KLQotSlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgU3RyaW5nJiBzKQotewotICAgIGlmIChzLmlzTnVsbCgpKQotICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7Ci0gICAgcmV0dXJuIGpzT3duZWRTdHJpbmcoZXhlYywgcyk7Ci19Ci0K
LUpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmlu
ZyYgcykKLXsKLSAgICBpZiAocy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHMpOwotfQotCi1KU1ZhbHVl
IGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgcmV0dXJu
IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Ci19Ci0KLUpTVmFsdWUganNT
dHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVSTCYgdXJsKQotewotICAg
IGlmICh1cmwuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJl
dHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkpOwotfQotCi1zdGF0aWMg
aW5saW5lIFN0cmluZyBzdHJpbmdUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSwgU3RyaW5nJiYgc3RyaW5nKQotewotICAgIGlmICghc3RyaW5nLmNv
bnRhaW5zT25seUxhdGluMSgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiBzdHJpbmc7Ci19
Ci0KLVN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50aWZpZXIpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBTdHJpbmcgc3Ry
aW5nID0gaWRlbnRpZmllci5zdHJpbmcoKTsKLSAgICByZXR1cm4gc3RyaW5nVG9CeXRlU3RyaW5n
KHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotU3RyaW5nIHZhbHVlVG9CeXRl
U3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0K
LSAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0
cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
Ym9vbCBoYXNVbnBhaXJlZFN1cnJvZ2F0ZShTdHJpbmdWaWV3IHN0cmluZykKLXsKLSAgICAvLyBG
YXN0IHBhdGggZm9yIDgtYml0IHN0cmluZ3M7IHRoZXkgY2FuJ3QgaGF2ZSBhbnkgc3Vycm9nYXRl
cy4KLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Zm9yIChhdXRvIGNvZGVQb2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsKLSAgICAgICAgaWYg
KFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdU
b1VTVlN0cmluZyhTdHJpbmcmJiBzdHJpbmcpCi17Ci0gICAgLy8gRmFzdCBwYXRoIGZvciB0aGUg
Y2FzZSB3aGVyZSB0aGVyZSBhcmUgbm8gdW5wYWlyZWQgc3Vycm9nYXRlcy4KLSAgICBpZiAoIWhh
c1VucGFpcmVkU3Vycm9nYXRlKHN0cmluZykpCi0gICAgICAgIHJldHVybiBzdHJpbmc7Ci0KLSAg
ICAvLyBTbG93IHBhdGg6IGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLW9idGFp
bi11bmljb2RlCi0gICAgLy8gUmVwbGFjZXMgdW5wYWlyZWQgc3Vycm9nYXRlcyB3aXRoIHRoZSBy
ZXBsYWNlbWVudCBjaGFyYWN0ZXIuCi0gICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0gICAgcmVz
dWx0LnJlc2VydmVDYXBhY2l0eShzdHJpbmcubGVuZ3RoKCkpOwotICAgIFN0cmluZ1ZpZXcgdmll
dyB7IHN0cmluZyB9OwotICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiB2aWV3LmNvZGVQb2ludHMo
KSkgewotICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKLSAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVQb2ludCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1
bHQudG9TdHJpbmcoKTsKLX0KLQotU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmluZyhFeGVjU3Rh
dGUmLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotewotICAgIFN0cmluZyBzdHJpbmcg
PSBpZGVudGlmaWVyLnN0cmluZygpOwotICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZN
b3ZlKHN0cmluZykpOwotfQotCi1TdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgU3RyaW5nIHN0cmluZyA9
IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKLQotICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZNb3ZlKHN0cmluZykp
OwotfQotCi1KU1ZhbHVlIGpzRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKLX0KLQotZG91YmxlIHZh
bHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFs
dWUuaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzTnVtYmVyKCk7Ci0gICAgaWYg
KCF2YWx1ZS5pbmhlcml0cyhleGVjLT52bSgpLCBEYXRlSW5zdGFuY2U6OmluZm8oKSkpCi0gICAg
ICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50b09iamVjdChleGVjKSkt
PmludGVybmFsTnVtYmVyKCk7Ci19Ci0KLXZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQp
Ci17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBhdXRvKiBleGNlcHRpb24gPSBqc0R5
bmFtaWNEb3duY2FzdDxKU0M6OkV4Y2VwdGlvbio+KHZtLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAg
aWYgKCFleGNlcHRpb24pIHsKLSAgICAgICAgZXhjZXB0aW9uID0gdm0ubGFzdEV4Y2VwdGlvbigp
OwotICAgICAgICBpZiAoIWV4Y2VwdGlvbikKLSAgICAgICAgICAgIGV4Y2VwdGlvbiA9IEpTQzo6
RXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhjZXB0aW9uVmFsdWUsIEpTQzo6RXhjZXB0
aW9uOjpEb05vdENhcHR1cmVTdGFjayk7Ci0gICAgfQotCi0gICAgcmVwb3J0RXhjZXB0aW9uKGV4
ZWMsIGV4Y2VwdGlvbiwgY2FjaGVkU2NyaXB0KTsKLX0KLQotU3RyaW5nIHJldHJpZXZlRXJyb3JN
ZXNzYWdlKEV4ZWNTdGF0ZSYgc3RhdGUsIFZNJiB2bSwgSlNWYWx1ZSBleGNlcHRpb24sIENhdGNo
U2NvcGUmIGNhdGNoU2NvcGUpCi17Ci0gICAgaWYgKGF1dG8qIGV4Y2VwdGlvbkJhc2UgPSB0b0V4
Y2VwdGlvbkJhc2Uodm0sIGV4Y2VwdGlvbikpCi0gICAgICAgIHJldHVybiBleGNlcHRpb25CYXNl
LT50b1N0cmluZygpOwotCi0gICAgLy8gRklYTUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNTA4
Nz4gV2ViIEluc3BlY3RvcjogV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uIHNob3VsZCBub3QgZXZh
bHVhdGUgSmF2YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCi0gICAgLy8gSWYgdGhpcyBpcyBh
IGN1c3RvbSBleGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0IHRvIHRyeSBhbmQg
Z2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGNlcHRpb24uCi0gICAg
U3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoYXV0byogZXJyb3IgPSBqc0R5bmFtaWNEb3du
Y2FzdDxFcnJvckluc3RhbmNlKj4odm0sIGV4Y2VwdGlvbikpCi0gICAgICAgIGVycm9yTWVzc2Fn
ZSA9IGVycm9yLT5zYW5pdGl6ZWRUb1N0cmluZygmc3RhdGUpOwotICAgIGVsc2UKLSAgICAgICAg
ZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0KLSAgICAvLyBX
ZSBuZWVkIHRvIGNsZWFyIGFueSBuZXcgZXhjZXB0aW9uIHRoYXQgbWF5IGJlIHRocm93biBpbiB0
aGUgdG9TdHJpbmcoKSBjYWxsIGFib3ZlLgotICAgIC8vIHJlcG9ydEV4Y2VwdGlvbigpIGlzIG5v
dCBzdXBwb3NlZCB0byBiZSBtYWtpbmcgbmV3IGV4Y2VwdGlvbnMuCi0gICAgY2F0Y2hTY29wZS5j
bGVhckV4Y2VwdGlvbigpOwotICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOwotICAgIHJldHVy
biBlcnJvck1lc3NhZ2U7Ci19Ci0KLXZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQs
IEV4Y2VwdGlvbkRldGFpbHMqIGV4Y2VwdGlvbkRldGFpbHMpCi17Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAg
ICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAg
ICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLCBleGNlcHRpb24pKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZShleGVjLT52
bSgpKTsKLQotICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3Jp
cHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgU2NyaXB0Q2FsbFN0YWNr
OjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKSk7Ci0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKLSAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKLQotICAgIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwotICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0ganNEeW5hbWlj
RG93bmNhc3Q8SlNET01XaW5kb3cqPih2bSwgZ2xvYmFsT2JqZWN0KSkgewotICAgICAgICBpZiAo
IXdpbmRvdy0+d3JhcHBlZCgpLmlzQ3VycmVudGx5RGlzcGxheWVkSW5GcmFtZSgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBsaW5lTnVtYmVyID0gMDsKLSAgICBpbnQg
Y29sdW1uTnVtYmVyID0gMDsKLSAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJMOwotICAgIGlm
IChjb25zdCBTY3JpcHRDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxTdGFjay0+Zmlyc3ROb25O
YXRpdmVDYWxsRnJhbWUoKSkgewotICAgICAgICBsaW5lTnVtYmVyID0gY2FsbEZyYW1lLT5saW5l
TnVtYmVyKCk7Ci0gICAgICAgIGNvbHVtbk51bWJlciA9IGNhbGxGcmFtZS0+Y29sdW1uTnVtYmVy
KCk7Ci0gICAgICAgIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGNhbGxGcmFtZS0+c291cmNlVVJMKCk7
Ci0gICAgfQotCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHJldHJpZXZlRXJyb3JNZXNzYWdl
KCpleGVjLCB2bSwgZXhjZXB0aW9uLT52YWx1ZSgpLCBzY29wZSk7Ci0gICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdsb2JhbE9iamVjdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnJlcG9ydEV4
Y2VwdGlvbihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgZXhjZXB0aW9u
U291cmNlVVJMLCBleGNlcHRpb24sIGNhbGxTdGFjay0+c2l6ZSgpID8gY2FsbFN0YWNrIDogbnVs
bHB0ciwgY2FjaGVkU2NyaXB0KTsKLQotICAgIGlmIChleGNlcHRpb25EZXRhaWxzKSB7Ci0gICAg
ICAgIGV4Y2VwdGlvbkRldGFpbHMtPm1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7Ci0gICAgICAgIGV4
Y2VwdGlvbkRldGFpbHMtPmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICBleGNlcHRp
b25EZXRhaWxzLT5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7Ci0gICAgICAgIGV4Y2VwdGlv
bkRldGFpbHMtPnNvdXJjZVVSTCA9IGV4Y2VwdGlvblNvdXJjZVVSTDsKLSAgICB9Ci19Ci0KLXZv
aWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
Ci0gICAgYXV0byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7Ci0gICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKLSAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKLX0K
LQotc3RhdGljIEpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhj
ZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nKiBtZXNzYWdlID0gbnVsbHB0cikKLXsKLSAgICBp
ZiAoIWVjIHx8IGVjID09IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotCi0gICAgLy8gRklYTUU6IEhhbmRsZSBvdGhlciBXZWJJREwgZXhjZXB0
aW9uIHR5cGVzLgotICAgIGlmIChlYyA9PSBUeXBlRXJyb3IpIHsKLSAgICAgICAgaWYgKCFtZXNz
YWdlIHx8IG1lc3NhZ2UtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVUeXBl
RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZXhlYywgKm1lc3Nh
Z2UpOwotICAgIH0KLQotICAgIGlmIChlYyA9PSBSYW5nZUVycm9yKSB7Ci0gICAgICAgIGlmICgh
bWVzc2FnZSB8fCBtZXNzYWdlLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkJhZCB2YWx1ZSIpKTsKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgKm1lc3NhZ2UpOwotICAgIH0KLQotICAgIGlmIChl
YyA9PSBTdGFja092ZXJmbG93RXJyb3IpCi0gICAgICAgIHJldHVybiBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoZXhlYyk7Ci0KLSAgICAvLyBGSVhNRTogQWxsIGNhbGxlcnMgdG8gY3JlYXRlRE9N
RXhjZXB0aW9uIG5lZWQgdG8gcGFzcyBpbiB0aGUgY29ycmVjdCBnbG9iYWwgb2JqZWN0LgotICAg
IC8vIEZvciBub3csIHdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGUgbGV4aWNhbEdsb2JhbE9iamVj
dC4gV2hpY2ggaXMgd3JvbmcgaW4gY2FzZXMgbGlrZSB0aGlzOgotICAgIC8vIGZyYW1lc1swXS5k
b2N1bWVudC5jcmVhdGVFbGVtZW50KG51bGwsIG51bGwpOyAvLyB0aHJvd3MgYW4gZXhjZXB0aW9u
IHdoaWNoIHNob3VsZCBoYXZlIHRoZSBzdWJmcmFtZSdzIHByb3RvdHlwZXMuCi0gICAgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90
b3R5cGUoZXhlYyk7Ci0KLSAgICBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24o
ZWMpOwotCi0gICAgQ1N0cmluZyBtZXNzYWdlQ1N0cmluZzsKLSAgICBpZiAobWVzc2FnZSkKLSAg
ICAgICAgbWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlLT51dGY4KCk7Ci0gICAgaWYgKG1lc3NhZ2Ug
JiYgIW1lc3NhZ2UtPmlzRW1wdHkoKSkgewotICAgICAgICAvLyBJdCBpcyBzYWZlIHRvIGRvIHRo
aXMgYmVjYXVzZSB0aGUgY2hhciogY29udGVudHMgb2YgdGhlIENTdHJpbmcgYXJlIGNvcGllZCBp
bnRvIGEgbmV3IFdURjo6U3RyaW5nIGJlZm9yZSB0aGUgQ1N0cmluZyBpcyBkZXN0cm95ZWQuCi0g
ICAgICAgIGRlc2NyaXB0aW9uLmRlc2NyaXB0aW9uID0gbWVzc2FnZUNTdHJpbmcuZGF0YSgpOwot
ICAgIH0KLQotICAgIEpTVmFsdWUgZXJyb3JPYmplY3Q7Ci0gICAgc3dpdGNoIChkZXNjcmlwdGlv
bi50eXBlKSB7Ci0gICAgY2FzZSBET01Db3JlRXhjZXB0aW9uVHlwZToKLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLSAgICBjYXNlIElEQkRhdGFiYXNlRXhjZXB0aW9uVHlwZToKLSNlbmRp
ZgotICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBET01Db3Jl
RXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGaWxlRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgRmlsZUV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgU1FMRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmplY3Qg
PSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1FMRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRp
b24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTVkdFeGNlcHRpb25UeXBlOgotICAgICAg
ICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdFeGNlcHRpb246OmNy
ZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFhQYXRoRXhjZXB0
aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
WFBhdGhFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAg
ICB9CiAgICAgCi0gICAgQVNTRVJUKGVycm9yT2JqZWN0KTsKLSAgICBhZGRFcnJvckluZm8oZXhl
YywgYXNPYmplY3QoZXJyb3JPYmplY3QpLCB0cnVlKTsKLSAgICByZXR1cm4gZXJyb3JPYmplY3Q7
Ci19Ci0KLUpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0
aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIHJldHVybiBjcmVhdGVE
T01FeGNlcHRpb24oZXhlYywgZWMsICZtZXNzYWdlKTsKLX0KLQotSlNWYWx1ZSBjcmVhdGVET01F
eGNlcHRpb24oRXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQotewotICAg
IHJldHVybiBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBleGNlcHRpb24uY29kZSgpLCBleGNl
cHRpb24ucmVsZWFzZU1lc3NhZ2UoKSk7Ci19Ci0KLXZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uU2xv
d1BhdGgoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUs
IEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKLXsKLSAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0
aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlRE9N
RXhjZXB0aW9uKHN0YXRlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpKTsKLX0KLQotYm9vbCBoYXNJdGVy
YXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7
Ci0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5cGU7Ci0gICAgSlNW
YWx1ZSBhcHBseU1ldGhvZCA9IG9iamVjdC0+Z2V0TWV0aG9kKCZzdGF0ZSwgY2FsbERhdGEsIGNh
bGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgQVNDSUlMaXRlcmFsKCJT
eW1ib2wuaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLQotICAgIHJldHVybiAhYXBwbHlNZXRob2Qu
aXNVbmRlZmluZWQoKTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9GcmFtZShFeGVjU3RhdGUmIHN0YXRlLCBGcmFtZSYgZnJhbWUsIFN0cmluZyYgbWVzc2Fn
ZSkKLXsKLSAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUo
JnN0YXRlLCAmZnJhbWUsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIG1lc3NhZ2UgPSBmcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+Y3Jv
c3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSkpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9ET01XaW5kb3coRXhlY1N0YXRlJiBzdGF0ZSwgRE9NV2luZG93JiBnbG9iYWxPYmplY3Qs
IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxv
d0FjY2Vzc1RvRE9NV2luZG93KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBEb05vdFJlcG9ydFNlY3Vy
aXR5RXJyb3IpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBtZXNzYWdlID0gZ2xvYmFsT2Jq
ZWN0LmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUp
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFt
ZShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAoIWZyYW1l
KQotICAgICAgICByZXR1cm47Ci0gICAgZnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5w
cmludEVycm9yTWVzc2FnZShtZXNzYWdlKTsKLX0KLQotU3RydWN0dXJlKiBnZXRDYWNoZWRET01T
dHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8pCi17Ci0gICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9i
YWxPYmplY3Quc3RydWN0dXJlcyhOb0xvY2tpbmdOZWNlc3NhcnkpOwotICAgIHJldHVybiBzdHJ1
Y3R1cmVzLmdldChjbGFzc0luZm8pLmdldCgpOwotfQotCi1TdHJ1Y3R1cmUqIGNhY2hlRE9NU3Ry
dWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKLXsKLSAgICBhdXRvIGxvY2tlciA9IGxv
Y2tEdXJpbmdNYXJraW5nKGdsb2JhbE9iamVjdC52bSgpLmhlYXAsIGdsb2JhbE9iamVjdC5nY0xv
Y2soKSk7Ci0gICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9iYWxPYmplY3Qu
c3RydWN0dXJlcyhsb2NrZXIpOwotICAgIEFTU0VSVCghc3RydWN0dXJlcy5jb250YWlucyhjbGFz
c0luZm8pKTsKLSAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPihnbG9iYWxPYmplY3Qudm0oKSwgJmdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotfQotCi1zdGF0aWMgY29uc3QgaW50MzJfdCBrTWF4
SW50MzIgPSAweDdmZmZmZmZmOwotc3RhdGljIGNvbnN0IGludDMyX3Qga01pbkludDMyID0gLWtN
YXhJbnQzMiAtIDE7Ci1zdGF0aWMgY29uc3QgdWludDMyX3Qga01heFVJbnQzMiA9IDB4ZmZmZmZm
ZmZVOwotc3RhdGljIGNvbnN0IGludDY0X3Qga0pTTWF4SW50ZWdlciA9IDB4MjAwMDAwMDAwMDAw
MDBMTCAtIDE7IC8vIDJeNTMgLSAxLCBsYXJnZXN0IGludGVnZXIgZXhhY3RseSByZXByZXNlbnRh
YmxlIGluIEVDTUFTY3JpcHQuCi0KLXN0YXRpYyBTdHJpbmcgcmFuZ2VFcnJvclN0cmluZyhkb3Vi
bGUgdmFsdWUsIGRvdWJsZSBtaW4sIGRvdWJsZSBtYXgpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJp
bmcoIlZhbHVlICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHZhbHVlKSwgIiBp
cyBvdXRzaWRlIHRoZSByYW5nZSBbIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQo
bWluKSwgIiwgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWF4KSwgIl0iKTsK
LX0KLQotc3RhdGljIGRvdWJsZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgZG91Ymxl
IHgsIGRvdWJsZSBtaW5pbXVtLCBkb3VibGUgbWF4aW11bSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0
ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAg
IGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkpIHsKLSAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVt
KSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICB4ID0gdHJ1bmMoeCk7Ci0gICAgaWYg
KHggPCBtaW5pbXVtIHx8IHggPiBtYXhpbXVtKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotc3RydWN0IEludFR5cGVMaW1pdHMgewotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVj
dCBJbnRUeXBlTGltaXRzPGludDhfdD4gewotICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWluVmFs
dWUgPSAtMTI4OwotICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWF4VmFsdWUgPSAxMjc7Ci0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKLX07Ci0K
LXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50OF90PiB7Ci0gICAgc3RhdGlj
IGNvbnN0IHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3Qg
SW50VHlwZUxpbWl0czxpbnQxNl90PiB7Ci0gICAgc3RhdGljIGNvbnN0IHNob3J0IG1pblZhbHVl
ID0gLTMyNzY4OwotICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtYXhWYWx1ZSA9IDMyNzY3OwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Ci19
OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8dWludDE2X3Q+IHsKLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbWF4VmFsdWUgPSA2NTUzNTsKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgotfTsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQg
b25seSBiZSB1c2VkIGZvciBzaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKLQotICAgIHR5cGVkZWYg
SW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFpdDsKLSAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZh
bHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdl
LgotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpIHsKLSAgICAgICAgaW50MzJfdCBkID0gdmFsdWUu
YXNJbnQzMigpOwotICAgICAgICBpZiAoZCA+PSBMaW1pdHNUcmFpdDo6bWluVmFsdWUgJiYgZCA8
PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VD4oZCk7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gZCA8IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA/
IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA6IExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKLSAgICAgICAg
fQotICAgICAgICBkICU9IExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlczsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFQ+KGQgPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyBkIC0gTGltaXRz
VHJhaXQ6Om51bWJlck9mVmFsdWVzIDogZCk7Ci0gICAgfQotCi0gICAgZG91YmxlIHggPSB2YWx1
ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwot
Ci0gICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJuIGVu
Zm9yY2VSYW5nZShzdGF0ZSwgeCwgTGltaXRzVHJhaXQ6Om1pblZhbHVlLCBMaW1pdHNUcmFpdDo6
bWF4VmFsdWUpOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsKLSAg
ICB9Ci0KLSAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6IGZsb29y
KGZhYnMoeCkpOwotICAgIHggPSBmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyk7
Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oeCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/
IHggLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiB4KTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbikKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25l
ZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBi
ZSB1c2VkIGZvciB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOwotCi0gICAgdHlwZWRlZiBJbnRU
eXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OwotICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUg
aXMgYWxyZWFkeSBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4K
LSAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkgewotICAgICAgICB1aW50MzJfdCBkID0gdmFsdWUu
YXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGQgPD0gTGltaXRzVHJhaXQ6Om1heFZhbHVlKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwotICAgICAgICBzd2l0Y2ggKGNvbmZp
Z3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbDoKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKLSAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
LSAgICAgICAgICAgIHJldHVybiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0KLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
LSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgotICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBMaW1pdHNU
cmFpdDo6bWF4VmFsdWUpOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4
KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6
IGZsb29yKGZhYnMoeCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihmbW9kKHgsIExpbWl0
c1RyYWl0OjpudW1iZXJPZlZhbHVlcykpOwotfQotCi1pbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9T
bWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLXVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21h
bGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLWludDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxp
bnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cCk7Ci19Ci0KLXVpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi0vLyBo
dHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWJ5dGUKLWludDhfdCB0b0ludDgoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGlu
dDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtb2N0ZXQKLXVpbnQ4
X3QgdG9VSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVy
biB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi1pbnQxNl90IHRvSW50MTZFbmZvcmNlUmFuZ2Uo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVy
SW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2UpOwotfQotCi11aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50
PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlKTsKLX0KLQotaW50MTZfdCB0b0ludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0
YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Ci19Ci0K
LXVpbnQxNl90IHRvVUludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKLX0KLQotLy8gaHR0cDovL3d3dy53
My5vcmcvVFIvV2ViSURMLyNlcy1zaG9ydAotaW50MTZfdCB0b0ludDE2KEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90Pihz
dGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0K
LQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1zaG9ydAotdWlu
dDE2X3QgdG9VSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1dlYklETC8jZXMtbG9uZwotaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAodmFsdWUuaXNJ
bnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0gICAgZG91YmxlIHgg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IDApOwotICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIGtNaW5JbnQzMiwga01heElu
dDMyKTsKLX0KLQotaW50MzJfdCB0b0ludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFs
dWUuYXNJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwot
ICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88aW50MzJfdD4oeCk7Ci19Ci0K
LXVpbnQzMl90IHRvVUludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUlu
dDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgcmV0
dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzx1aW50MzJfdD4oeCk7Ci19Ci0KLS8vIGh0
dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9uZwotdWludDMyX3QgdG9V
SW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLQotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFs
dWUuYXNVSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJh
bmdlKHN0YXRlLCB4LCAwLCBrTWF4VUludDMyKTsKLX0KLQotaW50NjRfdCB0b0ludDY0RW5mb3Jj
ZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4
LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50ZWdlcik7Ci19Ci0KLXVpbnQ2NF90IHRvVUludDY0
RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0
YXRlLCB4LCAwLCBrSlNNYXhJbnRlZ2VyKTsKLX0KLQotaW50NjRfdCB0b0ludDY0Q2xhbXAoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFs
dWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0
aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgLWtK
U01heEludGVnZXIpLCBrSlNNYXhJbnRlZ2VyKSk7Ci19Ci0KLXVpbnQ2NF90IHRvVUludDY0Q2xh
bXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4
ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAg
OiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+
KHgsIDApLCBrSlNNYXhJbnRlZ2VyKSk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dl
YklETC8jZXMtbG9uZy1sb25nCi1pbnQ2NF90IHRvSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0K
LSAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFs
dWVzIG1vZHVsbyAyXjY0LgotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOwotICAgIGRvdWJsZVRv
SW50ZWdlcih4LCBuKTsKLSAgICByZXR1cm4gbjsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nLWxvbmcKLXVpbnQ2NF90IHRvVUludDY0KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOwotCi0gICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7IGNv
bnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcg
bjsKLSAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7Ci0gICAgcmV0dXJuIG47Ci19Ci0KLWNsYXNz
IEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgewotcHVibGljOgotICAgIEdldENhbGxlckds
b2JhbE9iamVjdEZ1bmN0b3IoKSA9IGRlZmF1bHQ7Ci0KLSAgICBTdGFja1Zpc2l0b3I6OlN0YXR1
cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAg
IGlmICghbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSkgewotICAgICAgICAgICAgbV9oYXNTa2lwcGVk
Rmlyc3RGcmFtZSA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdXRvKiBjb2RlQmxvY2sgPSB2aXNpdG9y
LT5jb2RlQmxvY2soKSkKLSAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQodmlzaXRv
ci0+Y2FsbGVlKCkpOwotICAgICAgICAgICAgLy8gRklYTUU6IENhbGxlZSBpcyBub3QgYW4gb2Jq
ZWN0IGlmIHRoZSBjYWxsZXIgaXMgV2ViIEFzc2VtYmx5LgotICAgICAgICAgICAgLy8gRmlndXJl
IG91dCB3aGF0IHRvIGRvIGhlcmUuIFdlIGNhbiBwcm9iYWJseSBnZXQgdGhlIGdsb2JhbCBvYmpl
Y3QKLSAgICAgICAgICAgIC8vIGZyb20gdGhlIHRvcC1tb3N0IFdhc20gSW5zdGFuY2UuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MjEKLSAgICAgICAgICAgIGlm
ICh2aXNpdG9yLT5jYWxsZWUoKS0+aXNPYmplY3QoKSkKLSAgICAgICAgICAgICAgICBtX2dsb2Jh
bE9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxlZSgpKS0+Z2xvYmFsT2Jq
ZWN0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKLSAg
ICB9Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9nbG9iYWxPYmplY3Q7IH0KLQotcHJpdmF0ZToKLSAgICBtdXRhYmxlIGJvb2wgbV9oYXNTa2lw
cGVkRmlyc3RGcmFtZSB7IGZhbHNlIH07Ci0gICAgbXV0YWJsZSBKU0dsb2JhbE9iamVjdCogbV9n
bG9iYWxPYmplY3QgeyBudWxscHRyIH07Ci19OwotCi1ET01XaW5kb3cmIGNhbGxlckRPTVdpbmRv
dyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvciBp
dGVyOwotICAgIGV4ZWMtPml0ZXJhdGUoaXRlcik7Ci0gICAgcmV0dXJuIGl0ZXIuZ2xvYmFsT2Jq
ZWN0KCkgPyBhc0pTRE9NV2luZG93KGl0ZXIuZ2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCkgOiBm
aXJzdERPTVdpbmRvdyhleGVjKTsKLX0KLQotRE9NV2luZG93JiBhY3RpdmVET01XaW5kb3coRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSktPndyYXBwZWQoKTsKLX0KLQotRE9NV2luZG93JiBmaXJzdERPTVdpbmRv
dyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+dm1F
bnRyeUdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wg
Y2FuQWNjZXNzRG9jdW1lbnQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEb2N1bWVudCogdGFyZ2V0
RG9jdW1lbnQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKLXsKLSAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0KLSAgICBpZiAoIXRhcmdldERvY3VtZW50KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBET01XaW5kb3cmIGFjdGl2ZSA9IGFjdGl2ZURPTVdpbmRvdyhzdGF0ZSk7Ci0K
LSAgICBpZiAoYWN0aXZlLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkuY2FuQWNjZXNzKHRh
cmdldERvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBzd2l0Y2ggKHJlcG9ydGluZ09wdGlvbikgewotICAgIGNhc2UgVGhyb3dTZWN1cml0eUVy
cm9yOgotICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKnN0YXRlLCBzY29wZSwgdGFyZ2V0RG9j
dW1lbnQtPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmUp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMb2dTZWN1cml0eUVycm9yOgotICAgICAgICBw
cmludEVycm9yTWVzc2FnZUZvckZyYW1lKHRhcmdldERvY3VtZW50LT5mcmFtZSgpLCB0YXJnZXRE
b2N1bWVudC0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2
ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcjoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIERPTVdpbmRvdyYgdGFyZ2V0LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBv
cnRpbmdPcHRpb24pCi17Ci0gICAgcmV0dXJuIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJn
ZXQuZG9jdW1lbnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJp
dHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEZyYW1l
KiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKLXsKLSAg
ICByZXR1cm4gdGFyZ2V0ICYmIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJnZXQtPmRvY3Vt
ZW50KCksIHJlcG9ydGluZ09wdGlvbik7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIE5vZGUqIHRhcmdldCkK
LXsKLSAgICByZXR1cm4gIXRhcmdldCB8fCBjYW5BY2Nlc3NEb2N1bWVudCgmc3RhdGUsICZ0YXJn
ZXQtPmRvY3VtZW50KCksIExvZ1NlY3VyaXR5RXJyb3IpOwotfQotICAgIAotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIHRocm93VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCi17Ci0gICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKLX0KLQotc3Rh
dGljIHZvaWQgYXBwZW5kQXJndW1lbnRNdXN0QmUoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgdW5z
aWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFy
KiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJBcmd1bWVudCAiKTsKLSAgICBidWlsZGVyLmFwcGVuZE51bWJlcihh
cmd1bWVudEluZGV4ICsgMSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgKCciKTsKLSAg
ICBidWlsZGVyLmFwcGVuZChhcmd1bWVudE5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiJykgdG8gIik7Ci0gICAgaWYgKCFmdW5jdGlvbk5hbWUpIHsKLSAgICAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJ0aGUgIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5h
bWUpOwotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBjb25zdHJ1Y3RvciIpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5hbWUpOwotICAgICAg
ICBidWlsZGVyLmFwcGVuZCgnLicpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChmdW5jdGlvbk5h
bWUpOwotICAgIH0KLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBtdXN0IGJlICIpOwotfQot
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUpCi17Ci0gICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7Ci0gICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywg
TWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFj
Y2VzcyBwcm9wZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNl
TmFtZSwgIiBvYmplY3QuIikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Ci19Ci0gICAgCi12b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUpCi17Ci0gICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7Ci0gICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywg
TWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIHNl
dCBwcm9wZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNlTmFt
ZSwgIiBvYmplY3QuIikpOwotfQotCi12b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSKSk7Ci19Ci0KLXZvaWQg
dGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSk7Ci0gICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7Ci0gICAgdGhy
b3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9U
X1NVUFBPUlRFRF9FUlIsICZtZXNzYWdlU3RyaW5nKSk7Ci19Ci0KLXZvaWQgdGhyb3dJbnZhbGlk
U3RhdGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUs
IGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7
Ci0gICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7Ci0gICAgdGhyb3dFeGNlcHRpb24o
JnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5WQUxJRF9TVEFURV9F
UlIsICZtZXNzYWdlU3RyaW5nKSk7Ci19Ci0KLXZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhj
ZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNFQ1VSSVRZ
X0VSUiwgbWVzc2FnZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRN
dXN0QmVFbnVtRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBjaGFyKiBleHBlY3RlZFZhbHVlcykKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7Ci0gICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJn
dW1lbnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCJvbmUgb2Y6ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVj
dGVkVmFsdWVzKTsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBi
dWlsZGVyLnRvU3RyaW5nKCkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1l
bnRNdXN0QmVGdW5jdGlvbkVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnRO
YW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUp
Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJl
KGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgaW50ZXJmYWNlTmFtZSwgZnVu
Y3Rpb25OYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImEgZnVuY3Rpb24iKTsKLSAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5n
KCkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1
bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9u
SW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBl
Y3RlZFR5cGUpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGFwcGVuZEFyZ3Vt
ZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgZnVuY3Rpb25J
bnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
YW4gaW5zdGFuY2Ugb2YgIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRUeXBlKTsKLSAg
ICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5n
KCkpOwotfQotCi12b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICB0aHJvd1R5cGVFcnJvcihz
dGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBBcnJheSBlbGVtZW50IHR5cGUiKSk7
Ci19Ci0KLXZvaWQgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCi17Ci0gICAg
dGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNl
TmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGF0dHJpYnV0ZSBtdXN0IGJlIGFuIGluc3RhbmNl
IG9mICIsIGV4cGVjdGVkVHlwZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVx
dWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5
TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIk1lbWJlciAiKTsKLSAgICBidWlsZGVy
LmFwcGVuZChkaWN0aW9uYXJ5TmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJy4nKTsKLSAgICBi
dWlsZGVyLmFwcGVuZChtZW1iZXJOYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBp
cyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiKTsKLSAgICBidWlsZGVyLmFw
cGVuZChleHBlY3RlZFR5cGUpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhy
b3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSkKLXsKLSAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZVJlZmVyZW5jZUVycm9yKCZzdGF0ZSwgbWFrZVN0cmluZyhpbnRlcmZhY2VOYW1lLCAiIGNv
bnN0cnVjdG9yIGFzc29jaWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKSkp
OwotfQotCi12b2lkIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBz
Y29wZSwgQVNDSUlMaXRlcmFsKCJWYWx1ZSBpcyBub3QgYSBzZXF1ZW5jZSIpKTsKLX0KLQotdm9p
ZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKQotewotICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiVGhlIHByb3ZpZGVkIHZhbHVlIGlzIG5vbi1maW5pdGUiKSk7Ci19Ci0KLVN0cmluZyBt
YWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJUaGUgIiwg
aW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGdldHRlciBjYW4gb25seSBiZSB1
c2VkIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKLX0KLQotSlNDOjpFbmNvZGVk
SlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgYXR0cmlidXRl
TmFtZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoR2V0dGVy
VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlUmVqZWN0
ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2Uo
aW50ZXJmYWNlTmFtZSwgYXR0cmlidXRlTmFtZSkpOwotfQotCi1ib29sIHRocm93U2V0dGVyVHlw
ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAg
ICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZh
Y2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgc2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24g
aW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LVN0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJD
YW4gb25seSBjYWxsICIsIGludGVyZmFjZU5hbWUsICcuJywgZnVuY3Rpb25OYW1lLCAiIG9uIGlu
c3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgdGhyb3dU
aGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQot
ewotICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VUaGlzVHlwZUVy
cm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpKTsKLX0KLQotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNl
JiBwcm9taXNlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBtZXRob2RO
YW1lKQotewotICAgIHByb21pc2UucmVqZWN0KFR5cGVFcnJvciwgbWFrZVRoaXNUeXBlRXJyb3JN
ZXNzYWdlKGludGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFBy
b21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIq
IGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCi17Ci0gICAgcmV0dXJuIGNy
ZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VUaGlzVHlwZUVycm9y
TWVzc2FnZShpbnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7Ci19Ci0KIHZvaWQgY2FsbEZ1bmN0
aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQogewogICAgIEpTQzo6
Q2FsbERhdGEgY2FsbERhdGE7CkBAIC0xMDA3LDI4ICs2NSw0IEBAIENhbGxUeXBlIERPTUNvbnN0
cnVjdG9yT2JqZWN0OjpnZXRDYWxsRGEKICAgICByZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7CiB9CiAK
LXZvaWQgdGhyb3dET01TeW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAg
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwg
U1lOVEFYX0VSUikpOwotfQotCi12b2lkIHRocm93RGF0YUNsb25lRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VSVCghc2NvcGUu
ZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURP
TUV4Y2VwdGlvbigmc3RhdGUsIERBVEFfQ0xPTkVfRVJSKSk7Ci19Ci0KLXZvaWQgdGhyb3dJbmRl
eFNpemVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
Ci17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24o
JnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5ERVhfU0laRV9FUlIp
KTsKLX0KLQotdm9pZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlv
bigpKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRp
b24oJnN0YXRlLCBUWVBFX01JU01BVENIX0VSUikpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rv
ci5oCShyZXZpc2lvbiAyMTEzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDExICsxOSw2NCBAQAogCiAjcHJh
Z21hIG9uY2UKIAotI2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmgiCi0jaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJK
U0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBCYXNlIGNsYXNzIGZvciBhbGwgY29uc3RydWN0
b3Igb2JqZWN0cyBpbiB0aGUgSlNDIGJpbmRpbmdzLgorY2xhc3MgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgOiBwdWJsaWMgSlNET01PYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNET01PYmpl
Y3QgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpJbXBs
ZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERh
dGE7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYs
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworCitwcm90ZWN0ZWQ6CisgICAg
RE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYp
OworCisgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKKyAgICBz
dGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBKU0M6OkNhbGxEYXRhJik7
Cit9OworCisvLyBDb25zdHJ1Y3RvcnMgdXNpbmcgdGhpcyBiYXNlIGNsYXNzIGRlcGVuZCBvbiBi
ZWluZyBpbiBhIERvY3VtZW50IGFuZAorLy8gY2FuIG5ldmVyIGJlIHVzZWQgZnJvbSBhIFdvcmtl
ckdsb2JhbFNjb3BlLgorY2xhc3MgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQgOiBwdWJsaWMg
RE9NQ29uc3RydWN0b3JPYmplY3QgeworICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3Qg
QmFzZTsKK3B1YmxpYzoKKyAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PERvY3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50KEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
CisgICAgICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3Qp
CisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGds
b2JhbE9iamVjdC52bSgpKTsKKyAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdC5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSk7CisgICAgfQorfTsKKworY2xhc3MgRE9NQ29u
c3RydWN0b3JKU0J1aWx0aW5PYmplY3QgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3Qgewor
cHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKworcHJvdGVj
dGVkOgorICAgIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6U3RydWN0dXJlKiwg
SlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6
SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworCisgICAgSlNDOjpKU0Z1bmN0aW9uKiBpbml0
aWFsaXplRnVuY3Rpb24oKTsKKyAgICB2b2lkIHNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZN
JiwgSlNDOjpKU0Z1bmN0aW9uJik7CisKK3ByaXZhdGU6CisgICAgSlNDOjpXcml0ZUJhcnJpZXI8
SlNDOjpKU0Z1bmN0aW9uPiBtX2luaXRpYWxpemVGdW5jdGlvbjsKK307CisKIHRlbXBsYXRlPHR5
cGVuYW1lIEpTQ2xhc3M+IGNsYXNzIEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlIDog
cHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIERPTUNv
bnN0cnVjdG9yT2JqZWN0IEJhc2U7CkBAIC0xMzEsNiArMTg0LDM3IEBAIHByaXZhdGU6CiAgICAg
SlNDOjpGdW5jdGlvbkV4ZWN1dGFibGUqIGluaXRpYWxpemVFeGVjdXRhYmxlKEpTQzo6Vk0mKTsK
IH07CiAKK2lubGluZSBKU0M6OlN0cnVjdHVyZSogRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNyZWF0
ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9i
amVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworaW5saW5lIERPTUNvbnN0
cnVjdG9yT2JqZWN0OjpET01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIDogSlNET01PYmplY3Qo
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9CisKK2lubGluZSBTdHJpbmcgRE9NQ29uc3Ry
dWN0b3JPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCopCit7CisgICAgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgiRnVuY3Rpb24iKTsKK30KKworaW5saW5lIERPTUNvbnN0cnVjdG9ySlNCdWls
dGluT2JqZWN0OjpET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSog
c3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIDogRE9NQ29u
c3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9CisKK2lubGluZSBK
U0M6OkpTRnVuY3Rpb24qIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojppbml0aWFsaXpl
RnVuY3Rpb24oKQoreworICAgIHJldHVybiBtX2luaXRpYWxpemVGdW5jdGlvbi5nZXQoKTsKK30K
KworaW5saW5lIHZvaWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnNldEluaXRpYWxp
emVGdW5jdGlvbihKU0M6OlZNJiB2bSwgSlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAg
ICBtX2luaXRpYWxpemVGdW5jdGlvbi5zZXQodm0sIHRoaXMsICZmdW5jdGlvbik7Cit9CisKKwog
dGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTRE9NQ29uc3RydWN0b3JOb3RDb25z
dHJ1Y3RhYmxlPEpTQ2xhc3M+KiBKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZTxKU0Ns
YXNzPjo6Y3JlYXRlKEpTQzo6Vk0mIHZtLCBKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewogICAgIEpTRE9NQ29uc3RydWN0b3JOb3RD
b25zdHJ1Y3RhYmxlKiBjb25zdHJ1Y3RvciA9IG5ldyAoTm90TnVsbCwgSlNDOjphbGxvY2F0ZUNl
bGw8SlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGU+KHZtLmhlYXApKSBKU0RPTUNvbnN0
cnVjdG9yTm90Q29uc3RydWN0YWJsZShzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCk7CkBAIC0yMjAs
NiArMzA0LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIHZvaWQgSgogICAg
IGluaXRpYWxpemVQcm9wZXJ0aWVzKHZtLCBnbG9iYWxPYmplY3QpOwogfQogCit2b2lkIGNhbGxG
dW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU09iamVj
dCYgdGhpc09iamVjdCwgSlNDOjpKU0Z1bmN0aW9uJik7CisKIHRlbXBsYXRlPHR5cGVuYW1lIEpT
Q2xhc3M+IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQnVpbHRpbkNvbnN0cnVjdG9yPEpT
Q2xhc3M+OjpjYWxsQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2Jq
ZWN0JiBvYmplY3QpCiB7CiAgICAgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoc3Rh
dGUsIG9iamVjdCwgKmluaXRpYWxpemVGdW5jdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oCShyZXZpc2lvbiAyMTEzODkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksNyBAQAogI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJ
RExUeXBlcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NRXhj
ZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTR2xvYmFsT2JqZWN0SW5saW5l
cy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNPTk9iamVjdC5oPgogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcAko
cmV2aXNpb24gMjExMzUzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwOjIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhj
ZXB0aW9uSGFuZGxpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAzNCBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3Jn
KQorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDExLCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8
c2FtQHdlYmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIE1pY2hhZWwgUHJ1ZXR0IDxt
aWNoYWVsQDY4ay5vcmc+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisKKyNpbmNsdWRlICJDYWNo
ZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgorI2luY2x1ZGUgIkRPTUNvbnN0cnVj
dG9yV2l0aERvY3VtZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlYWRlcnMu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25JbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNl
cHRpb24uaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlICJKU0RPTVByb21p
c2UuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgorI2luY2x1ZGUgIkpTRXhjZXB0
aW9uQmFzZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSA8Ynl0ZWNv
ZGUvQ29kZUJsb2NrLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5oPgor
I2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg+CisjaW5jbHVkZSA8
cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5j
bHVkZSA8cnVudGltZS9FcnJvckhhbmRsaW5nU2NvcGUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0Vy
cm9ySW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbi5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlv
bi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7Cit1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NUQVRJQ19BU1NFUlRfSVNf
VFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3Rvck9iamVjdCk7CitTVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQp
OworCit2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlO
YW1lKQoreworICAgIGNvbW1vblZNKCkuYWRkSW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lKTsK
K30KKworSlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
U3RyaW5nJiBzKQoreworICAgIGlmIChzLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ganNOdWxs
KCk7CisgICAgcmV0dXJuIGpzT3duZWRTdHJpbmcoZXhlYywgcyk7Cit9CisKK0pTVmFsdWUganNT
dHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKK3sKKyAg
ICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0
dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHMpOworfQorCitKU1ZhbHVlIGpzU3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0
aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Cit9CisKK0pTVmFsdWUganNTdHJpbmdPclVuZGVm
aW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVSTCYgdXJsKQoreworICAgIGlmICh1cmwuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBqc1N0cmlu
Z1dpdGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkpOworfQorCitzdGF0aWMgaW5saW5lIFN0cmlu
ZyBzdHJpbmdUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSwgU3RyaW5nJiYgc3RyaW5nKQoreworICAgIGlmICghc3RyaW5nLmNvbnRhaW5zT25seUxh
dGluMSgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAg
ICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiBzdHJpbmc7Cit9CisKK1N0cmluZyBp
ZGVudGlmaWVyVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50aWZpZXIpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRp
Zmllci5zdHJpbmcoKTsKKyAgICByZXR1cm4gc3RyaW5nVG9CeXRlU3RyaW5nKHN0YXRlLCBzY29w
ZSwgV1RGTW92ZShzdHJpbmcpKTsKK30KKworU3RyaW5nIHZhbHVlVG9CeXRlU3RyaW5nKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdHJpbmcg
c3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworCisgICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwg
c2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBoYXNVbnBh
aXJlZFN1cnJvZ2F0ZShTdHJpbmdWaWV3IHN0cmluZykKK3sKKyAgICAvLyBGYXN0IHBhdGggZm9y
IDgtYml0IHN0cmluZ3M7IHRoZXkgY2FuJ3QgaGF2ZSBhbnkgc3Vycm9nYXRlcy4KKyAgICBpZiAo
c3RyaW5nLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChhdXRvIGNv
ZGVQb2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsKKyAgICAgICAgaWYgKFVfSVNfU1VSUk9H
QVRFKGNvZGVQb2ludCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb1VTVlN0cmluZyhT
dHJpbmcmJiBzdHJpbmcpCit7CisgICAgLy8gRmFzdCBwYXRoIGZvciB0aGUgY2FzZSB3aGVyZSB0
aGVyZSBhcmUgbm8gdW5wYWlyZWQgc3Vycm9nYXRlcy4KKyAgICBpZiAoIWhhc1VucGFpcmVkU3Vy
cm9nYXRlKHN0cmluZykpCisgICAgICAgIHJldHVybiBzdHJpbmc7CisKKyAgICAvLyBTbG93IHBh
dGg6IGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZGZuLW9idGFpbi11bmljb2RlCisg
ICAgLy8gUmVwbGFjZXMgdW5wYWlyZWQgc3Vycm9nYXRlcyB3aXRoIHRoZSByZXBsYWNlbWVudCBj
aGFyYWN0ZXIuCisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVD
YXBhY2l0eShzdHJpbmcubGVuZ3RoKCkpOworICAgIFN0cmluZ1ZpZXcgdmlldyB7IHN0cmluZyB9
OworICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiB2aWV3LmNvZGVQb2ludHMoKSkgeworICAgICAg
ICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKGNvZGVQb2ludCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQudG9TdHJpbmco
KTsKK30KKworU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmluZyhFeGVjU3RhdGUmLCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQoreworICAgIFN0cmluZyBzdHJpbmcgPSBpZGVudGlmaWVy
LnN0cmluZygpOworICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZNb3ZlKHN0cmluZykp
OworfQorCitTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RG
U3RyaW5nKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKwor
ICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZNb3ZlKHN0cmluZykpOworfQorCitKU1Zh
bHVlIGpzRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
RGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKK30KKworZG91YmxlIHZhbHVlVG9EYXRlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIo
KSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzTnVtYmVyKCk7CisgICAgaWYgKCF2YWx1ZS5pbmhl
cml0cyhleGVjLT52bSgpLCBEYXRlSW5zdGFuY2U6OmluZm8oKSkpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50b09iamVjdChleGVjKSktPmludGVybmFsTnVt
YmVyKCk7Cit9CisKK3ZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBleGNlcHRpb25WYWx1ZSwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNI
b2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRvKiBleGNlcHRpb24gPSBqc0R5bmFtaWNEb3duY2Fz
dDxKU0M6OkV4Y2VwdGlvbio+KHZtLCBleGNlcHRpb25WYWx1ZSk7CisgICAgaWYgKCFleGNlcHRp
b24pIHsKKyAgICAgICAgZXhjZXB0aW9uID0gdm0ubGFzdEV4Y2VwdGlvbigpOworICAgICAgICBp
ZiAoIWV4Y2VwdGlvbikKKyAgICAgICAgICAgIGV4Y2VwdGlvbiA9IEpTQzo6RXhjZXB0aW9uOjpj
cmVhdGUoZXhlYy0+dm0oKSwgZXhjZXB0aW9uVmFsdWUsIEpTQzo6RXhjZXB0aW9uOjpEb05vdENh
cHR1cmVTdGFjayk7CisgICAgfQorCisgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlv
biwgY2FjaGVkU2NyaXB0KTsKK30KKworU3RyaW5nIHJldHJpZXZlRXJyb3JNZXNzYWdlKEV4ZWNT
dGF0ZSYgc3RhdGUsIFZNJiB2bSwgSlNWYWx1ZSBleGNlcHRpb24sIENhdGNoU2NvcGUmIGNhdGNo
U2NvcGUpCit7CisgICAgaWYgKGF1dG8qIGV4Y2VwdGlvbkJhc2UgPSB0b0V4Y2VwdGlvbkJhc2Uo
dm0sIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBleGNlcHRpb25CYXNlLT50b1N0cmluZygp
OworCisgICAgLy8gRklYTUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3Bl
Y3RvcjogV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uIHNob3VsZCBub3QgZXZhbHVhdGUgSmF2YVNj
cmlwdCBoYW5kbGluZyBleGNlcHRpb25zCisgICAgLy8gSWYgdGhpcyBpcyBhIGN1c3RvbSBleGNl
cHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0IHRvIHRyeSBhbmQgZ2V0IGEgbmljZSBz
dHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGNlcHRpb24uCisgICAgU3RyaW5nIGVycm9y
TWVzc2FnZTsKKyAgICBpZiAoYXV0byogZXJyb3IgPSBqc0R5bmFtaWNEb3duY2FzdDxFcnJvcklu
c3RhbmNlKj4odm0sIGV4Y2VwdGlvbikpCisgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLT5z
YW5pdGl6ZWRUb1N0cmluZygmc3RhdGUpOworICAgIGVsc2UKKyAgICAgICAgZXJyb3JNZXNzYWdl
ID0gZXhjZXB0aW9uLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisKKyAgICAvLyBXZSBuZWVkIHRvIGNs
ZWFyIGFueSBuZXcgZXhjZXB0aW9uIHRoYXQgbWF5IGJlIHRocm93biBpbiB0aGUgdG9TdHJpbmco
KSBjYWxsIGFib3ZlLgorICAgIC8vIHJlcG9ydEV4Y2VwdGlvbigpIGlzIG5vdCBzdXBwb3NlZCB0
byBiZSBtYWtpbmcgbmV3IGV4Y2VwdGlvbnMuCisgICAgY2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlv
bigpOworICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOworICAgIHJldHVybiBlcnJvck1lc3Nh
Z2U7Cit9CisKK3ZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNl
cHRpb24qIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQsIEV4Y2VwdGlvbkRl
dGFpbHMqIGV4Y2VwdGlvbkRldGFpbHMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisKKyAgICBSRUxFQVNFX0FT
U0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBpZiAoaXNUZXJt
aW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm47
CisKKyAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZShleGVjLT52bSgpKTsKKworICAg
IFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3JpcHRDYWxsU3RhY2tG
cm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgU2NyaXB0Q2FsbFN0YWNrOjptYXhDYWxsU3Rh
Y2tTaXplVG9DYXB0dXJlKSk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICB2bS5j
bGVhckxhc3RFeGNlcHRpb24oKTsKKworICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpOworICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0ganNEeW5hbWljRG93bmNhc3Q8SlNE
T01XaW5kb3cqPih2bSwgZ2xvYmFsT2JqZWN0KSkgeworICAgICAgICBpZiAoIXdpbmRvdy0+d3Jh
cHBlZCgpLmlzQ3VycmVudGx5RGlzcGxheWVkSW5GcmFtZSgpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGludCBsaW5lTnVtYmVyID0gMDsKKyAgICBpbnQgY29sdW1uTnVtYmVy
ID0gMDsKKyAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJMOworICAgIGlmIChjb25zdCBTY3Jp
cHRDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxTdGFjay0+Zmlyc3ROb25OYXRpdmVDYWxsRnJh
bWUoKSkgeworICAgICAgICBsaW5lTnVtYmVyID0gY2FsbEZyYW1lLT5saW5lTnVtYmVyKCk7Cisg
ICAgICAgIGNvbHVtbk51bWJlciA9IGNhbGxGcmFtZS0+Y29sdW1uTnVtYmVyKCk7CisgICAgICAg
IGV4Y2VwdGlvblNvdXJjZVVSTCA9IGNhbGxGcmFtZS0+c291cmNlVVJMKCk7CisgICAgfQorCisg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHJldHJpZXZlRXJyb3JNZXNzYWdlKCpleGVjLCB2bSwg
ZXhjZXB0aW9uLT52YWx1ZSgpLCBzY29wZSk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnJlcG9ydEV4Y2VwdGlvbihlcnJv
ck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgZXhjZXB0aW9uU291cmNlVVJMLCBl
eGNlcHRpb24sIGNhbGxTdGFjay0+c2l6ZSgpID8gY2FsbFN0YWNrIDogbnVsbHB0ciwgY2FjaGVk
U2NyaXB0KTsKKworICAgIGlmIChleGNlcHRpb25EZXRhaWxzKSB7CisgICAgICAgIGV4Y2VwdGlv
bkRldGFpbHMtPm1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7CisgICAgICAgIGV4Y2VwdGlvbkRldGFp
bHMtPmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAgICBleGNlcHRpb25EZXRhaWxzLT5j
b2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7CisgICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPnNv
dXJjZVVSTCA9IGV4Y2VwdGlvblNvdXJjZVVSTDsKKyAgICB9Cit9CisKK3ZvaWQgcmVwb3J0Q3Vy
cmVudEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgYXV0byog
ZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKKyAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKK30KKworc3RhdGljIEpT
VmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSBl
YywgY29uc3QgU3RyaW5nKiBtZXNzYWdlID0gbnVsbHB0cikKK3sKKyAgICBpZiAoIWVjIHx8IGVj
ID09IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworCisgICAgLy8gRklYTUU6IEhhbmRsZSBvdGhlciBXZWJJREwgZXhjZXB0aW9uIHR5cGVzLgor
ICAgIGlmIChlYyA9PSBUeXBlRXJyb3IpIHsKKyAgICAgICAgaWYgKCFtZXNzYWdlIHx8IG1lc3Nh
Z2UtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZXhlYyk7
CisgICAgICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZXhlYywgKm1lc3NhZ2UpOworICAgIH0K
KworICAgIGlmIChlYyA9PSBSYW5nZUVycm9yKSB7CisgICAgICAgIGlmICghbWVzc2FnZSB8fCBt
ZXNzYWdlLT5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIkJhZCB2YWx1ZSIpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVJh
bmdlRXJyb3IoZXhlYywgKm1lc3NhZ2UpOworICAgIH0KKworICAgIGlmIChlYyA9PSBTdGFja092
ZXJmbG93RXJyb3IpCisgICAgICAgIHJldHVybiBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhl
Yyk7CisKKyAgICAvLyBGSVhNRTogQWxsIGNhbGxlcnMgdG8gY3JlYXRlRE9NRXhjZXB0aW9uIG5l
ZWQgdG8gcGFzcyBpbiB0aGUgY29ycmVjdCBnbG9iYWwgb2JqZWN0LgorICAgIC8vIEZvciBub3cs
IHdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGUgbGV4aWNhbEdsb2JhbE9iamVjdC4gV2hpY2ggaXMg
d3JvbmcgaW4gY2FzZXMgbGlrZSB0aGlzOgorICAgIC8vIGZyYW1lc1swXS5kb2N1bWVudC5jcmVh
dGVFbGVtZW50KG51bGwsIG51bGwpOyAvLyB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoaWNoIHNob3Vs
ZCBoYXZlIHRoZSBzdWJmcmFtZSdzIHByb3RvdHlwZXMuCisgICAgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyk7
CisKKyAgICBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24oZWMpOworCisgICAg
Q1N0cmluZyBtZXNzYWdlQ1N0cmluZzsKKyAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgbWVzc2Fn
ZUNTdHJpbmcgPSBtZXNzYWdlLT51dGY4KCk7CisgICAgaWYgKG1lc3NhZ2UgJiYgIW1lc3NhZ2Ut
PmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJdCBpcyBzYWZlIHRvIGRvIHRoaXMgYmVjYXVzZSB0
aGUgY2hhciogY29udGVudHMgb2YgdGhlIENTdHJpbmcgYXJlIGNvcGllZCBpbnRvIGEgbmV3IFdU
Rjo6U3RyaW5nIGJlZm9yZSB0aGUgQ1N0cmluZyBpcyBkZXN0cm95ZWQuCisgICAgICAgIGRlc2Ny
aXB0aW9uLmRlc2NyaXB0aW9uID0gbWVzc2FnZUNTdHJpbmcuZGF0YSgpOworICAgIH0KKworICAg
IEpTVmFsdWUgZXJyb3JPYmplY3Q7CisgICAgc3dpdGNoIChkZXNjcmlwdGlvbi50eXBlKSB7Cisg
ICAgY2FzZSBET01Db3JlRXhjZXB0aW9uVHlwZToKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKKyAgICBjYXNlIElEQkRhdGFiYXNlRXhjZXB0aW9uVHlwZToKKyNlbmRpZgorICAgICAgICBl
cnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBET01Db3JlRXhjZXB0aW9uOjpj
cmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWxlRXhjZXB0
aW9uVHlwZToKKyAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
RmlsZUV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU1FMRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgU1FMRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBTVkdFeGNlcHRpb25UeXBlOgorICAgICAgICBlcnJvck9iamVj
dCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlw
dGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFhQYXRoRXhjZXB0aW9uVHlwZToKKyAg
ICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgWFBhdGhFeGNlcHRp
b246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisg
ICAgQVNTRVJUKGVycm9yT2JqZWN0KTsKKyAgICBhZGRFcnJvckluZm8oZXhlYywgYXNPYmplY3Qo
ZXJyb3JPYmplY3QpLCB0cnVlKTsKKyAgICByZXR1cm4gZXJyb3JPYmplY3Q7Cit9CisKK0pTVmFs
dWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSBlYywg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIHJldHVybiBjcmVhdGVET01FeGNlcHRpb24o
ZXhlYywgZWMsICZtZXNzYWdlKTsKK30KKworSlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhl
Y1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQoreworICAgIHJldHVybiBjcmVh
dGVET01FeGNlcHRpb24oJnN0YXRlLCBleGNlcHRpb24uY29kZSgpLCBleGNlcHRpb24ucmVsZWFz
ZU1lc3NhZ2UoKSk7Cit9CisKK3ZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uU2xvd1BhdGgoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbiYm
IGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0aW9uKCkpOworICAg
IHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKHN0
YXRlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpKTsKK30KKworYm9vbCBoYXNJdGVyYXRvck1ldGhvZChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2
bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVjdCh2YWx1ZSk7CisgICAgQ2FsbERh
dGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGU7CisgICAgSlNWYWx1ZSBhcHBseU1l
dGhvZCA9IG9iamVjdC0+Z2V0TWV0aG9kKCZzdGF0ZSwgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5w
cm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgQVNDSUlMaXRlcmFsKCJTeW1ib2wuaXRlcmF0
b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNhbGxhYmxlIikpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIGZhbHNlKTsKKworICAgIHJldHVybiAhYXBwbHlNZXRob2QuaXNVbmRlZmluZWQo
KTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShF
eGVjU3RhdGUmIHN0YXRlLCBGcmFtZSYgZnJhbWUsIFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBp
ZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoJnN0YXRlLCAmZnJh
bWUsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IG1lc3NhZ2UgPSBmcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nl
c3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSkpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5k
b3coRXhlY1N0YXRlJiBzdGF0ZSwgRE9NV2luZG93JiBnbG9iYWxPYmplY3QsIFN0cmluZyYgbWVz
c2FnZSkKK3sKKyAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9N
V2luZG93KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBtZXNzYWdlID0gZ2xvYmFsT2JqZWN0LmNyb3NzRG9t
YWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSogZnJh
bWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBy
ZXR1cm47CisgICAgZnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5wcmludEVycm9yTWVz
c2FnZShtZXNzYWdlKTsKK30KKworU3RydWN0dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8p
Cit7CisgICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9iYWxPYmplY3Quc3Ry
dWN0dXJlcyhOb0xvY2tpbmdOZWNlc3NhcnkpOworICAgIHJldHVybiBzdHJ1Y3R1cmVzLmdldChj
bGFzc0luZm8pLmdldCgpOworfQorCitTdHJ1Y3R1cmUqIGNhY2hlRE9NU3RydWN0dXJlKEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbykKK3sKKyAgICBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdNYXJr
aW5nKGdsb2JhbE9iamVjdC52bSgpLmhlYXAsIGdsb2JhbE9iamVjdC5nY0xvY2soKSk7CisgICAg
SlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9iYWxPYmplY3Quc3RydWN0dXJlcyhs
b2NrZXIpOworICAgIEFTU0VSVCghc3RydWN0dXJlcy5jb250YWlucyhjbGFzc0luZm8pKTsKKyAg
ICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
PihnbG9iYWxPYmplY3Qudm0oKSwgJmdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSkuaXRlcmF0b3It
PnZhbHVlLmdldCgpOworfQorCitzdGF0aWMgY29uc3QgaW50MzJfdCBrTWF4SW50MzIgPSAweDdm
ZmZmZmZmOworc3RhdGljIGNvbnN0IGludDMyX3Qga01pbkludDMyID0gLWtNYXhJbnQzMiAtIDE7
CitzdGF0aWMgY29uc3QgdWludDMyX3Qga01heFVJbnQzMiA9IDB4ZmZmZmZmZmZVOworc3RhdGlj
IGNvbnN0IGludDY0X3Qga0pTTWF4SW50ZWdlciA9IDB4MjAwMDAwMDAwMDAwMDBMTCAtIDE7IC8v
IDJeNTMgLSAxLCBsYXJnZXN0IGludGVnZXIgZXhhY3RseSByZXByZXNlbnRhYmxlIGluIEVDTUFT
Y3JpcHQuCisKK3N0YXRpYyBTdHJpbmcgcmFuZ2VFcnJvclN0cmluZyhkb3VibGUgdmFsdWUsIGRv
dWJsZSBtaW4sIGRvdWJsZSBtYXgpCit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlZhbHVlICIs
IFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHZhbHVlKSwgIiBpcyBvdXRzaWRlIHRo
ZSByYW5nZSBbIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWluKSwgIiwgIiwg
U3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWF4KSwgIl0iKTsKK30KKworc3RhdGlj
IGRvdWJsZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHgsIGRvdWJsZSBt
aW5pbXVtLCBkb3VibGUgbWF4aW11bSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmIChzdGQ6Omlz
bmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICB4ID0gdHJ1bmMoeCk7CisgICAgaWYgKHggPCBtaW5pbXVt
IHx8IHggPiBtYXhpbXVtKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUs
IHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgcmV0dXJuIHg7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3Ry
dWN0IEludFR5cGVMaW1pdHMgeworfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBJbnRUeXBlTGlt
aXRzPGludDhfdD4geworICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWluVmFsdWUgPSAtMTI4Owor
ICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWF4VmFsdWUgPSAxMjc7CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKK307CisKK3RlbXBsYXRlIDw+
CitzdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4
X3QgbWF4VmFsdWUgPSAyNTU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFs
dWVzID0gMjU2OyAvLyAyXjgKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0
czxpbnQxNl90PiB7CisgICAgc3RhdGljIGNvbnN0IHNob3J0IG1pblZhbHVlID0gLTMyNzY4Owor
ICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtYXhWYWx1ZSA9IDMyNzY3OworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Cit9OworCit0ZW1wbGF0
ZSA8Pgorc3RydWN0IEludFR5cGVMaW1pdHM8dWludDE2X3Q+IHsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgc2hvcnQgbWF4VmFsdWUgPSA2NTUzNTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgorfTsKKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CitzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
KQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NpZ25lZDxUPjo6
dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBiZSB1c2Vk
IGZvciBzaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKKworICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0
czxUPiBMaW1pdHNUcmFpdDsKKyAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVh
ZHkgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgorICAgIGlmICh2
YWx1ZS5pc0ludDMyKCkpIHsKKyAgICAgICAgaW50MzJfdCBkID0gdmFsdWUuYXNJbnQzMigpOwor
ICAgICAgICBpZiAoZCA+PSBMaW1pdHNUcmFpdDo6bWluVmFsdWUgJiYgZCA8PSBMaW1pdHNUcmFp
dDo6bWF4VmFsdWUpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7CisgICAg
ICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Cisg
ICAgICAgICAgICByZXR1cm4gZCA8IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA/IExpbWl0c1RyYWl0
OjptaW5WYWx1ZSA6IExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICBk
ICU9IExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlczsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFQ+KGQgPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyBkIC0gTGltaXRzVHJhaXQ6Om51bWJl
ck9mVmFsdWVzIDogZCk7CisgICAgfQorCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigm
c3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworCisgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShz
dGF0ZSwgeCwgTGltaXRzVHJhaXQ6Om1pblZhbHVlLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOwor
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAg
cmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsKKyAgICB9CisKKyAgICBp
ZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6IGZsb29yKGZhYnMoeCkpOwor
ICAgIHggPSBmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyk7CisKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VD4oeCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/IHggLSBMaW1pdHNU
cmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiB4KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citz
dGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUg
JiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBiZSB1c2VkIGZvciB1
bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOworCisgICAgdHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+
IExpbWl0c1RyYWl0OworICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBh
IDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KKyAgICBpZiAodmFs
dWUuaXNVSW50MzIoKSkgeworICAgICAgICB1aW50MzJfdCBkID0gdmFsdWUuYXNVSW50MzIoKTsK
KyAgICAgICAgaWYgKGQgPD0gTGltaXRzVHJhaXQ6Om1heFZhbHVlKQorICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFQ+KGQpOworICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKKyAgICAgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAg
IHJldHVybiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBk
b3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgMCk7CisKKyAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAg
ICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBMaW1pdHNUcmFpdDo6bWF4VmFs
dWUpOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsKKyAgICB9CisK
KyAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6IGZsb29yKGZhYnMo
eCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1i
ZXJPZlZhbHVlcykpOworfQorCitpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGlu
dDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZSk7Cit9CisKK3VpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWlu
dDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZSk7Cit9CisKK2ludDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRl
LCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKK3Vp
bnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQorCisvLyBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9XZWJJREwvI2VzLWJ5dGUKK2ludDhfdCB0b0ludDgoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUs
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8v
IGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtb2N0ZXQKK3VpbnQ4X3QgdG9VSW50OChF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJV
SW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpOworfQorCitpbnQxNl90IHRvSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+
KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2UpOworfQorCit1aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90Pihz
dGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdl
KTsKK30KKworaW50MTZfdCB0b0ludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKK3VpbnQxNl90IHRv
VUludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2Vi
SURMLyNlcy1zaG9ydAoraW50MTZfdCB0b0ludDE2KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKK30KKworLy8gaHR0cDov
L3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1zaG9ydAordWludDE2X3QgdG9VSW50
MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFs
bGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMt
bG9uZworaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAg
ICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworICAgIHJl
dHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIGtNaW5JbnQzMiwga01heEludDMyKTsKK30KKwor
aW50MzJfdCB0b0ludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigp
OworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIHJldHVybiBz
dGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88aW50MzJfdD4oeCk7Cit9CisKK3VpbnQzMl90IHRv
VUludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAo
dmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNu
YW4oeCkgPyAwIDogY2xhbXBUbzx1aW50MzJfdD4oeCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMu
b3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9uZwordWludDMyX3QgdG9VSW50MzJFbmZvcmNl
UmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIo
KTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4
LCAwLCBrTWF4VUludDMyKTsKK30KKworaW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdlKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGRv
dWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAta0pTTWF4SW50
ZWdlciwga0pTTWF4SW50ZWdlcik7Cit9CisKK3VpbnQ2NF90IHRvVUludDY0RW5mb3JjZVJhbmdl
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBr
SlNNYXhJbnRlZ2VyKTsKK30KKworaW50NjRfdCB0b0ludDY0Q2xhbXAoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ2
NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgLWtKU01heEludGVnZXIp
LCBrSlNNYXhJbnRlZ2VyKSk7Cit9CisKK3VpbnQ2NF90IHRvVUludDY0Q2xhbXAoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+KHgsIDApLCBrSlNN
YXhJbnRlZ2VyKSk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtbG9u
Zy1sb25nCitpbnQ2NF90IHRvSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisKKyAgICAvLyBNYXAg
TmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAy
XjY0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOworICAgIGRvdWJsZVRvSW50ZWdlcih4LCBu
KTsKKyAgICByZXR1cm4gbjsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNl
cy11bnNpZ25lZC1sb25nLWxvbmcKK3VpbnQ2NF90IHRvVUludDY0KEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUp
OworCisgICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRl
IHZhbHVlcyBtb2R1bG8gMl42NC4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbjsKKyAgICBkb3Vi
bGVUb0ludGVnZXIoeCwgbik7CisgICAgcmV0dXJuIG47Cit9CisKK2NsYXNzIEdldENhbGxlckds
b2JhbE9iamVjdEZ1bmN0b3IgeworcHVibGljOgorICAgIEdldENhbGxlckdsb2JhbE9iamVjdEZ1
bmN0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigp
KFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbV9oYXNT
a2lwcGVkRmlyc3RGcmFtZSkgeworICAgICAgICAgICAgbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChhdXRvKiBjb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2so
KSkKKyAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQodmlzaXRvci0+Y2FsbGVlKCkp
OworICAgICAgICAgICAgLy8gRklYTUU6IENhbGxlZSBpcyBub3QgYW4gb2JqZWN0IGlmIHRoZSBj
YWxsZXIgaXMgV2ViIEFzc2VtYmx5LgorICAgICAgICAgICAgLy8gRmlndXJlIG91dCB3aGF0IHRv
IGRvIGhlcmUuIFdlIGNhbiBwcm9iYWJseSBnZXQgdGhlIGdsb2JhbCBvYmplY3QKKyAgICAgICAg
ICAgIC8vIGZyb20gdGhlIHRvcC1tb3N0IFdhc20gSW5zdGFuY2UuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MjEKKyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5j
YWxsZWUoKS0+aXNPYmplY3QoKSkKKyAgICAgICAgICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGpz
Q2FzdDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKKyAgICB9CisKKyAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmpl
Y3Q7IH0KKworcHJpdmF0ZToKKyAgICBtdXRhYmxlIGJvb2wgbV9oYXNTa2lwcGVkRmlyc3RGcmFt
ZSB7IGZhbHNlIH07CisgICAgbXV0YWJsZSBKU0dsb2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3Qg
eyBudWxscHRyIH07Cit9OworCitET01XaW5kb3cmIGNhbGxlckRPTVdpbmRvdyhFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvciBpdGVyOworICAgIGV4
ZWMtPml0ZXJhdGUoaXRlcik7CisgICAgcmV0dXJuIGl0ZXIuZ2xvYmFsT2JqZWN0KCkgPyBhc0pT
RE9NV2luZG93KGl0ZXIuZ2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCkgOiBmaXJzdERPTVdpbmRv
dyhleGVjKTsKK30KKworRE9NV2luZG93JiBhY3RpdmVET01XaW5kb3coRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSktPndyYXBwZWQoKTsKK30KKworRE9NV2luZG93JiBmaXJzdERPTVdpbmRvdyhFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+dm1FbnRyeUdsb2JhbE9i
amVjdCgpKS0+d3JhcHBlZCgpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY2FuQWNjZXNzRG9j
dW1lbnQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEb2N1bWVudCogdGFyZ2V0RG9jdW1lbnQsIFNl
Y3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKK3sKKyAgICBWTSYgdm0gPSBz
dGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBpZiAoIXRhcmdldERvY3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBE
T01XaW5kb3cmIGFjdGl2ZSA9IGFjdGl2ZURPTVdpbmRvdyhzdGF0ZSk7CisKKyAgICBpZiAoYWN0
aXZlLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkuY2FuQWNjZXNzKHRhcmdldERvY3VtZW50
LT5zZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBzd2l0Y2gg
KHJlcG9ydGluZ09wdGlvbikgeworICAgIGNhc2UgVGhyb3dTZWN1cml0eUVycm9yOgorICAgICAg
ICB0aHJvd1NlY3VyaXR5RXJyb3IoKnN0YXRlLCBzY29wZSwgdGFyZ2V0RG9jdW1lbnQtPmRvbVdp
bmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmUpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBMb2dTZWN1cml0eUVycm9yOgorICAgICAgICBwcmludEVycm9yTWVz
c2FnZUZvckZyYW1lKHRhcmdldERvY3VtZW50LT5mcmFtZSgpLCB0YXJnZXREb2N1bWVudC0+ZG9t
V2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcjoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEJpbmRpbmdTZWN1cml0
eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERP
TVdpbmRvdyYgdGFyZ2V0LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24p
Cit7CisgICAgcmV0dXJuIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJnZXQuZG9jdW1lbnQo
KSwgcmVwb3J0aW5nT3B0aW9uKTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEZyYW1lKiB0YXJnZXQsIFNl
Y3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKK3sKKyAgICByZXR1cm4gdGFy
Z2V0ICYmIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJnZXQtPmRvY3VtZW50KCksIHJlcG9y
dGluZ09wdGlvbik7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vz
c1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIE5vZGUqIHRhcmdldCkKK3sKKyAgICByZXR1
cm4gIXRhcmdldCB8fCBjYW5BY2Nlc3NEb2N1bWVudCgmc3RhdGUsICZ0YXJnZXQtPmRvY3VtZW50
KCksIExvZ1NlY3VyaXR5RXJyb3IpOworfQorICAgIAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIHRo
cm93VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKK30KKworc3RhdGljIHZvaWQgYXBw
ZW5kQXJndW1lbnRNdXN0QmUoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgdW5zaWduZWQgYXJndW1l
bnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7CisgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJBcmd1bWVudCAiKTsKKyAgICBidWlsZGVyLmFwcGVuZE51bWJlcihhcmd1bWVudEluZGV4
ICsgMSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgKCciKTsKKyAgICBidWlsZGVyLmFw
cGVuZChhcmd1bWVudE5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJykgdG8gIik7
CisgICAgaWYgKCFmdW5jdGlvbk5hbWUpIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJ0aGUgIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5hbWUpOworICAgICAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBjb25zdHJ1Y3RvciIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5hbWUpOworICAgICAgICBidWlsZGVyLmFw
cGVuZCgnLicpOworICAgICAgICBidWlsZGVyLmFwcGVuZChmdW5jdGlvbk5hbWUpOworICAgIH0K
KyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBtdXN0IGJlICIpOworfQorCitKU0M6OkVuY29k
ZWRKU1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUp
Cit7CisgICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0
ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
Y29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVs
OjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0
eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNlTmFtZSwgIiBvYmpl
Y3QuIikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9Cisg
ICAgCit2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUp
Cit7CisgICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0
ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
Y29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVs
OjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIHNldCBwcm9wZXJ0eSAn
IiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNlTmFtZSwgIiBvYmplY3Qu
IikpOworfQorCit2b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2Vw
dGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSKSk7Cit9CisKK3ZvaWQgdGhyb3dOb3RTdXBw
b3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUs
IGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7
CisgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7CisgICAgdGhyb3dFeGNlcHRpb24o
JnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9F
UlIsICZtZXNzYWdlU3RyaW5nKSk7Cit9CisKK3ZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIq
IG1lc3NhZ2UpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgU3RyaW5n
IG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5WQUxJRF9TVEFURV9FUlIsICZtZXNzYWdl
U3RyaW5nKSk7Cit9CisKK3ZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorewor
ICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNFQ1VSSVRZX0VSUiwgbWVzc2Fn
ZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25l
ZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFy
KiBleHBlY3RlZFZhbHVlcykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYXBw
ZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBm
dW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJvbmUgb2Y6ICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVmFsdWVzKTsK
KyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3Ry
aW5nKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVGdW5j
dGlvbkVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
dW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7CisgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOworICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFy
Z3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgaW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsK
KyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImEgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOworfQorCitK
U0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBj
b25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCit7
CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1
aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1l
LCBmdW5jdGlvbk5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYW4gaW5zdGFuY2Ug
b2YgIik7CisgICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRUeXBlKTsKKyAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOworfQorCit2
b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBBcnJheSBlbGVtZW50IHR5cGUiKSk7Cit9CisKK3ZvaWQg
dGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRy
aWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCit7CisgICAgdGhyb3dUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBh
dHRyaWJ1dGVOYW1lLCAiIGF0dHJpYnV0ZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICIsIGV4cGVj
dGVkVHlwZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJU
eXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBj
b25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3Qg
Y2hhciogZXhwZWN0ZWRUeXBlKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIk1lbWJlciAiKTsKKyAgICBidWlsZGVyLmFwcGVuZChkaWN0
aW9uYXJ5TmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmQoJy4nKTsKKyAgICBidWlsZGVyLmFwcGVu
ZChtZW1iZXJOYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBpcyByZXF1aXJlZCBh
bmQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZChleHBlY3Rl
ZFR5cGUpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxk
ZXIudG9TdHJpbmcoKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3Rv
clNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSkK
K3sKKyAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZVJlZmVyZW5j
ZUVycm9yKCZzdGF0ZSwgbWFrZVN0cmluZyhpbnRlcmZhY2VOYW1lLCAiIGNvbnN0cnVjdG9yIGFz
c29jaWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKSkpOworfQorCit2b2lk
IHRocm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKQoreworICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlM
aXRlcmFsKCJWYWx1ZSBpcyBub3QgYSBzZXF1ZW5jZSIpKTsKK30KKwordm9pZCB0aHJvd05vbkZp
bml0ZVR5cGVFcnJvcihFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQor
eworICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIHBy
b3ZpZGVkIHZhbHVlIGlzIG5vbi1maW5pdGUiKSk7Cit9CisKK1N0cmluZyBtYWtlR2V0dGVyVHlw
ZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRy
aWJ1dGVOYW1lKQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFt
ZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGdldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3Rh
bmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJv
d0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUpCit7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgbWFrZUdl
dHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgYXR0cmlidXRlTmFtZSkpOworfQor
CitKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogYXR0cmlidXRlTmFtZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0
aFR5cGVFcnJvcihzdGF0ZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFt
ZSwgYXR0cmlidXRlTmFtZSkpOworfQorCitib29sIHRocm93U2V0dGVyVHlwZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKK3sKKyAgICB0aHJvd1R5cGVF
cnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLics
IGF0dHJpYnV0ZU5hbWUsICIgc2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9m
ICIsIGludGVyZmFjZU5hbWUpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBtYWtl
VGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lKQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJDYW4gb25seSBjYWxs
ICIsIGludGVyZmFjZU5hbWUsICcuJywgZnVuY3Rpb25OYW1lLCAiIG9uIGluc3RhbmNlcyBvZiAi
LCBpbnRlcmZhY2VOYW1lKTsKK30KKworRW5jb2RlZEpTVmFsdWUgdGhyb3dUaGlzVHlwZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShp
bnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSBy
ZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiBwcm9taXNlLCBj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lKQoreworICAg
IHByb21pc2UucmVqZWN0KFR5cGVFcnJvciwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVy
ZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhp
c1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVk
UHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRl
cmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7Cit9CisKK3ZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJl
bnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2Jq
ZWN0LCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQoreworICAgIEpTQzo6Q2FsbERhdGEgY2Fs
bERhdGE7CisgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoJmZ1
bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25l
KTsKKworICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5hcmd1bWVudENvdW50KCk7ICsraSkKKyAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7CisgICAgSlNDOjpj
YWxsKCZzdGF0ZSwgJmZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBh
cmd1bWVudHMpOworfQorCit2b2lkIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQzo6SlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5P
YmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
KyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luaXRpYWxpemVGdW5jdGlvbik7Cit9
CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJv
cihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldycgb3BlcmF0
b3IiKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Cit9CisKK0NhbGxU
eXBlIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYg
Y2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbFRocm93VHlw
ZUVycm9yOworICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsKK30KKwordm9pZCB0aHJvd0RPTVN5
bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkK
K3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigm
c3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTWU5UQVhfRVJSKSk7Cit9
CisKK3ZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Cisg
ICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0
ZSwgREFUQV9DTE9ORV9FUlIpKTsKK30KKwordm9pZCB0aHJvd0luZGV4U2l6ZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQo
IXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBj
cmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTkRFWF9TSVpFX0VSUikpOworfQorCit2b2lkIHRo
cm93VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93
RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFRZUEVf
TUlTTUFUQ0hfRVJSKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAJKHJldmlzaW9uIDIxMTM1
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNzAgKzIwLDMyIEBACiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NRXhj
ZXB0aW9uSGFuZGxpbmcuaCIKIAogI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUg
IkNvbW1vblZNLmgiCi0jaW5jbHVkZSAiRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSGVhZGVy
cy5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkludGVyZmFjZXMuaCIKLSNpbmNsdWRlICJGcmFtZS5o
IgotI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4
Y2VwdGlvbi5oIgotI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgogI2luY2x1ZGUgIkpTRE9NUHJv
bWlzZS5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCisjaW5jbHVkZSAiSlNET01X
aW5kb3cuaCIKKyNpbmNsdWRlICJKU0R5bmFtaWNEb3duY2FzdC5oIgogI2luY2x1ZGUgIkpTRXhj
ZXB0aW9uQmFzZS5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSA8Ynl0
ZWNvZGUvQ29kZUJsb2NrLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5o
PgogI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9FcnJvckhhbmRsaW5nU2NvcGUuaD4KLSNpbmNsdWRlIDxydW50aW1l
L0Vycm9ySW5zdGFuY2UuaD4KICNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbi5oPgogI2luY2x1
ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5j
dGlvbi5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyNp
bmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3Rv
ck9iamVjdCk7Ci1TVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9NQ29u
c3RydWN0b3JXaXRoRG9jdW1lbnQpOwotCi12b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0
b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQotewotICAgIGNvbW1vblZNKCkuYWRkSW1wdXJlUHJv
cGVydHkocHJvcGVydHlOYW1lKTsKLX0KLQotSlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQotewotICAgIGlmIChzLmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgcmV0dXJuIGpzT3duZWRTdHJpbmcoZXhlYywg
cyk7Ci19Ci0KLUpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgcykKLXsKLSAgICBpZiAocy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHMpOwotfQot
Ci1KU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCi17Ci0g
ICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Ci19Ci0KLUpT
VmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVSTCYgdXJs
KQotewotICAgIGlmICh1cmwuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkpOwotfQot
Ci1zdGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgU3RyaW5nJiYgc3RyaW5nKQotewotICAgIGlmICgh
c3RyaW5nLmNvbnRhaW5zT25seUxhdGluMSgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVybiBz
dHJpbmc7Ci19Ci0KLVN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBT
dHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmcoKTsKLSAgICByZXR1cm4gc3RyaW5nVG9C
eXRlU3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotU3RyaW5nIHZh
bHVlVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgcmV0dXJuIHN0cmlu
Z1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgYm9vbCBoYXNVbnBhaXJlZFN1cnJvZ2F0ZShTdHJpbmdWaWV3IHN0cmluZykKLXsK
LSAgICAvLyBGYXN0IHBhdGggZm9yIDgtYml0IHN0cmluZ3M7IHRoZXkgY2FuJ3QgaGF2ZSBhbnkg
c3Vycm9nYXRlcy4KLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsKLSAg
ICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIFN0cmlu
ZyBzdHJpbmdUb1VTVlN0cmluZyhTdHJpbmcmJiBzdHJpbmcpCi17Ci0gICAgLy8gRmFzdCBwYXRo
IGZvciB0aGUgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbm8gdW5wYWlyZWQgc3Vycm9nYXRlcy4KLSAg
ICBpZiAoIWhhc1VucGFpcmVkU3Vycm9nYXRlKHN0cmluZykpCi0gICAgICAgIHJldHVybiBzdHJp
bmc7Ci0KLSAgICAvLyBTbG93IHBhdGg6IGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8j
ZGZuLW9idGFpbi11bmljb2RlCi0gICAgLy8gUmVwbGFjZXMgdW5wYWlyZWQgc3Vycm9nYXRlcyB3
aXRoIHRoZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCi0gICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7
Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShzdHJpbmcubGVuZ3RoKCkpOwotICAgIFN0cmlu
Z1ZpZXcgdmlldyB7IHN0cmluZyB9OwotICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiB2aWV3LmNv
ZGVQb2ludHMoKSkgewotICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKLSAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVQb2ludCk7Ci0gICAgfQotICAgIHJl
dHVybiByZXN1bHQudG9TdHJpbmcoKTsKLX0KLQotU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmlu
ZyhFeGVjU3RhdGUmLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotewotICAgIFN0cmlu
ZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOwotICAgIHJldHVybiBzdHJpbmdUb1VTVlN0
cmluZyhXVEZNb3ZlKHN0cmluZykpOwotfQotCi1TdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgU3RyaW5n
IHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKLQotICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZNb3Zl
KHN0cmluZykpOwotfQotCi1KU1ZhbHVlIGpzRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2
YWx1ZSkKLXsKLSAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKLX0KLQot
ZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzTnVtYmVyKCk7
Ci0gICAgaWYgKCF2YWx1ZS5pbmhlcml0cyhleGVjLT52bSgpLCBEYXRlSW5zdGFuY2U6OmluZm8o
KSkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05h
TigpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50b09iamVj
dChleGVjKSktPmludGVybmFsTnVtYmVyKCk7Ci19Ci0KIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgQ2FjaGVkU2NyaXB0KiBjYWNo
ZWRTY3JpcHQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKQEAgLTIyOSwxMiArOTEsMTIg
QEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKUwogCiAgICAgRXJyb3JI
YW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoZXhlYy0+dm0oKSk7CiAKLSAgICBSZWZQdHI8U2NyaXB0
Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlvbihl
eGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVy
ZSkpOworICAgIGF1dG8gY2FsbFN0YWNrID0gSW5zcGVjdG9yOjpjcmVhdGVTY3JpcHRDYWxsU3Rh
Y2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgSW5zcGVjdG9yOjpTY3JpcHRDYWxsU3Rh
Y2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUpOwogICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CiAgICAgdm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7CiAKLSAgICBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKTsKLSAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IGpzRHluYW1p
Y0Rvd25jYXN0PEpTRE9NV2luZG93Kj4odm0sIGdsb2JhbE9iamVjdCkpIHsKKyAgICBhdXRvKiBn
bG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpOworICAgIGlmIChhdXRvKiB3aW5kb3cgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U0RPTVdpbmRvdyo+KHZtLCBnbG9iYWxPYmplY3QpKSB7CiAgICAgICAgIGlmICghd2luZG93LT53
cmFwcGVkKCkuaXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMjQyLDE1ICsxMDQsMTQgQEAgdm9pZCByZXBvcnRFeGNlcHRpb24oRXhl
Y1N0YXRlKiBleGVjLCBKUwogICAgIGludCBsaW5lTnVtYmVyID0gMDsKICAgICBpbnQgY29sdW1u
TnVtYmVyID0gMDsKICAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJMOwotICAgIGlmIChjb25z
dCBTY3JpcHRDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxTdGFjay0+Zmlyc3ROb25OYXRpdmVD
YWxsRnJhbWUoKSkgeworICAgIGlmIChhdXRvKiBjYWxsRnJhbWUgPSBjYWxsU3RhY2stPmZpcnN0
Tm9uTmF0aXZlQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgbGluZU51bWJlciA9IGNhbGxGcmFtZS0+
bGluZU51bWJlcigpOwogICAgICAgICBjb2x1bW5OdW1iZXIgPSBjYWxsRnJhbWUtPmNvbHVtbk51
bWJlcigpOwogICAgICAgICBleGNlcHRpb25Tb3VyY2VVUkwgPSBjYWxsRnJhbWUtPnNvdXJjZVVS
TCgpOwogICAgIH0KIAotICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSByZXRyaWV2ZUVycm9yTWVz
c2FnZSgqZXhlYywgdm0sIGV4Y2VwdGlvbi0+dmFsdWUoKSwgc2NvcGUpOwotICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5yZXBv
cnRFeGNlcHRpb24oZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGV4Y2Vw
dGlvblNvdXJjZVVSTCwgZXhjZXB0aW9uLCBjYWxsU3RhY2stPnNpemUoKSA/IGNhbGxTdGFjayA6
IG51bGxwdHIsIGNhY2hlZFNjcmlwdCk7CisgICAgYXV0byBlcnJvck1lc3NhZ2UgPSByZXRyaWV2
ZUVycm9yTWVzc2FnZSgqZXhlYywgdm0sIGV4Y2VwdGlvbi0+dmFsdWUoKSwgc2NvcGUpOworICAg
IGdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5yZXBvcnRFeGNlcHRpb24o
ZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGV4Y2VwdGlvblNvdXJjZVVS
TCwgZXhjZXB0aW9uLCBjYWxsU3RhY2stPnNpemUoKSA/IGNhbGxTdGFjay5wdHIoKSA6IG51bGxw
dHIsIGNhY2hlZFNjcmlwdCk7CiAKICAgICBpZiAoZXhjZXB0aW9uRGV0YWlscykgewogICAgICAg
ICBleGNlcHRpb25EZXRhaWxzLT5tZXNzYWdlID0gZXJyb3JNZXNzYWdlOwpAQCAtMzQ3LDQ2MyAr
MjA4LDYgQEAgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZQogICAgIEFT
U0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CiAgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVET01FeGNlcHRpb24oc3RhdGUsIFdURk1vdmUoZXhjZXB0aW9u
KSkpOwogfQotCi1ib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoIXZhbHVlLmlz
T2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEpTT2JqZWN0KiBvYmplY3Qg
PSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxs
VHlwZSBjYWxsVHlwZTsKLSAgICBKU1ZhbHVlIGFwcGx5TWV0aG9kID0gb2JqZWN0LT5nZXRNZXRo
b2QoJnN0YXRlLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9y
U3ltYm9sLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC5pdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUg
Y2FsbGFibGUiKSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotCi0g
ICAgcmV0dXJuICFhcHBseU1ldGhvZC5pc1VuZGVmaW5lZCgpOwotfQotCi1ib29sIEJpbmRpbmdT
ZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEV4ZWNTdGF0ZSYgc3RhdGUsIEZyYW1l
JiBmcmFtZSwgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsICZmcmFtZSwgRG9Ob3RSZXBvcnRTZWN1cml0
eUVycm9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgbWVzc2FnZSA9IGZyYW1lLmRvY3Vt
ZW50KCktPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVE
T01XaW5kb3coJnN0YXRlKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJpbmRpbmdT
ZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhFeGVjU3RhdGUmIHN0YXRlLCBE
T01XaW5kb3cmIGdsb2JhbE9iamVjdCwgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRlLCBnbG9iYWxP
YmplY3QsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCi0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIG1lc3NhZ2UgPSBnbG9iYWxPYmplY3QuY3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2Uo
YWN0aXZlRE9NV2luZG93KCZzdGF0ZSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBw
cmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQotewotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKLSAgICBmcmFtZS0+ZG9j
dW1lbnQoKS0+ZG9tV2luZG93KCktPnByaW50RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOwotfQotCi1T
dHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKLXsKLSAgICBKU0RPTVN0cnVjdHVy
ZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5zdHJ1Y3R1cmVzKE5vTG9ja2luZ05lY2Vz
c2FyeSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZXMuZ2V0KGNsYXNzSW5mbykuZ2V0KCk7Ci19Ci0K
LVN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQot
ewotICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtpbmcoZ2xvYmFsT2JqZWN0LnZtKCku
aGVhcCwgZ2xvYmFsT2JqZWN0LmdjTG9jaygpKTsKLSAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3Ry
dWN0dXJlcyA9IGdsb2JhbE9iamVjdC5zdHJ1Y3R1cmVzKGxvY2tlcik7Ci0gICAgQVNTRVJUKCFz
dHJ1Y3R1cmVzLmNvbnRhaW5zKGNsYXNzSW5mbykpOwotICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNl
dChjbGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC52bSgpLCAm
Z2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci19Ci0KLXN0
YXRpYyBjb25zdCBpbnQzMl90IGtNYXhJbnQzMiA9IDB4N2ZmZmZmZmY7Ci1zdGF0aWMgY29uc3Qg
aW50MzJfdCBrTWluSW50MzIgPSAta01heEludDMyIC0gMTsKLXN0YXRpYyBjb25zdCB1aW50MzJf
dCBrTWF4VUludDMyID0gMHhmZmZmZmZmZlU7Ci1zdGF0aWMgY29uc3QgaW50NjRfdCBrSlNNYXhJ
bnRlZ2VyID0gMHgyMDAwMDAwMDAwMDAwMExMIC0gMTsgLy8gMl41MyAtIDEsIGxhcmdlc3QgaW50
ZWdlciBleGFjdGx5IHJlcHJlc2VudGFibGUgaW4gRUNNQVNjcmlwdC4KLQotc3RhdGljIFN0cmlu
ZyByYW5nZUVycm9yU3RyaW5nKGRvdWJsZSB2YWx1ZSwgZG91YmxlIG1pbiwgZG91YmxlIG1heCkK
LXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiVmFsdWUgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmlu
Z0VDTUFTY3JpcHQodmFsdWUpLCAiIGlzIG91dHNpZGUgdGhlIHJhbmdlIFsiLCBTdHJpbmc6Om51
bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtaW4pLCAiLCAiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5n
RUNNQVNjcmlwdChtYXgpLCAiXSIpOwotfQotCi1zdGF0aWMgZG91YmxlIGVuZm9yY2VSYW5nZShF
eGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgeCwgZG91YmxlIG1pbmltdW0sIGRvdWJsZSBtYXhpbXVt
KQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4
KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5nZUVycm9yU3Ry
aW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAg
IHggPSB0cnVuYyh4KTsKLSAgICBpZiAoeCA8IG1pbmltdW0gfHwgeCA+IG1heGltdW0pIHsKLSAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBt
aW5pbXVtLCBtYXhpbXVtKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4g
eDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0cyB7Ci19
OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8aW50OF90PiB7Ci0gICAgc3Rh
dGljIGNvbnN0IGludDhfdCBtaW5WYWx1ZSA9IC0xMjg7Ci0gICAgc3RhdGljIGNvbnN0IGludDhf
dCBtYXhWYWx1ZSA9IDEyNzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1
ZXMgPSAyNTY7IC8vIDJeOAotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRz
PHVpbnQ4X3Q+IHsKLSAgICBzdGF0aWMgY29uc3QgdWludDhfdCBtYXhWYWx1ZSA9IDI1NTsKLSAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAotfTsK
LQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzPGludDE2X3Q+IHsKLSAgICBzdGF0
aWMgY29uc3Qgc2hvcnQgbWluVmFsdWUgPSAtMzI3Njg7Ci0gICAgc3RhdGljIGNvbnN0IHNob3J0
IG1heFZhbHVlID0gMzI3Njc7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFs
dWVzID0gNjU1MzY7IC8vIDJeMTYKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxp
bWl0czx1aW50MTZfdD4gewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtYXhWYWx1
ZSA9IDY1NTM1OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1
NTM2OyAvLyAyXjE2Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUg
VCB0b1NtYWxsZXJJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVn
cmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHNpZ25lZCBpbnRlZ3JhbCB0
eXBlcyIpOwotCi0gICAgdHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OwotICAg
IC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCBzaWduZWQgaW50
ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCi0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkgewotICAg
ICAgICBpbnQzMl90IGQgPSB2YWx1ZS5hc0ludDMyKCk7Ci0gICAgICAgIGlmIChkID49IExpbWl0
c1RyYWl0OjptaW5WYWx1ZSAmJiBkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0
aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWw6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiBkIDwg
TGltaXRzVHJhaXQ6Om1pblZhbHVlID8gTGltaXRzVHJhaXQ6Om1pblZhbHVlIDogTGltaXRzVHJh
aXQ6Om1heFZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIGQgJT0gTGltaXRzVHJhaXQ6Om51bWJl
ck9mVmFsdWVzOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCA+IExpbWl0c1RyYWl0
OjptYXhWYWx1ZSA/IGQgLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiBkKTsKLSAgICB9
Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgMCk7Ci0KLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgotICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBMaW1pdHNUcmFpdDo6
bWluVmFsdWUsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/
IDAgOiBjbGFtcFRvPFQ+KHgpOwotICAgIH0KLQotICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0
ZDo6aXNpbmYoeCkgfHwgIXgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgeCA9IHggPCAwID8g
LWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7Ci0gICAgeCA9IGZtb2QoeCwgTGltaXRz
VHJhaXQ6Om51bWJlck9mVmFsdWVzKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih4ID4g
TGltaXRzVHJhaXQ6Om1heFZhbHVlID8geCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyA6
IHgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgVCB0b1NtYWxs
ZXJVSW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+
Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHVuc2lnbmVkIGludGVncmFsIHR5cGVz
Iik7Ci0KLSAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4gTGltaXRzVHJhaXQ7Ci0gICAgLy8g
RmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0IHVuc2lnbmVkIGludGVn
ZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKSB7Ci0gICAg
ICAgIHVpbnQzMl90IGQgPSB2YWx1ZS5hc1VJbnQzMigpOwotICAgICAgICBpZiAoZCA8PSBMaW1p
dHNUcmFpdDo6bWF4VmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7
Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFQ+KGQpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIExpbWl0c1RyYWl0Ojpt
YXhWYWx1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1i
ZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLQotICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgIHJldHVybiBlbmZvcmNlUmFu
Z2Uoc3RhdGUsIHgsIDAsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7Ci0gICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICByZXR1cm4gc3RkOjppc25h
bih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOwotICAgIH0KLQotICAgIGlmIChzdGQ6OmlzbmFuKHgp
IHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgeCA9IHgg
PCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFQ+KGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKSk7Ci19Ci0KLWlu
dDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotdWludDhf
dCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotaW50OF90
IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKLX0KLQotdWludDhfdCB0b1VJbnQ4Q2xhbXAoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxs
ZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtYnl0
ZQotaW50OF90IHRvSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAg
IHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIv
V2ViSURMLyNlcy1vY3RldAotdWludDhfdCB0b1VJbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLWludDE2
X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQot
ewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLXVpbnQxNl90IHRv
VUludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi1pbnQxNl90IHRvSW50
MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0
b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkNsYW1wKTsKLX0KLQotdWludDE2X3QgdG9VSW50MTZDbGFtcChFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQx
Nl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXAp
OwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXNob3J0Ci1pbnQxNl90
IHRvSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
dG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwv
I2VzLXVuc2lnbmVkLXNob3J0Ci11aW50MTZfdCB0b1VJbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0
ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQot
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nCi1pbnQzMl90IHRvSW50MzJF
bmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc0lu
dDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0
ZSwgeCwga01pbkludDMyLCBrTWF4SW50MzIpOwotfQotCi1pbnQzMl90IHRvSW50MzJDbGFtcChF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc0ludDMy
KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xh
bXBUbzxpbnQzMl90Pih4KTsKLX0KLQotdWludDMyX3QgdG9VSW50MzJDbGFtcChFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAg
ICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPHVp
bnQzMl90Pih4KTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNp
Z25lZC1sb25nCi11aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKHZhbHVlLmlzVUludDMy
KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2
YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDAp
OwotICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtNYXhVSW50MzIpOwotfQot
Ci1pbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVy
biBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIC1rSlNNYXhJbnRlZ2VyLCBrSlNNYXhJbnRlZ2VyKTsK
LX0KLQotdWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50
b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAg
IHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtKU01heEludGVnZXIpOwotfQotCi1p
bnQ2NF90IHRvSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBz
dGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4o
c3RkOjptYXg8ZG91YmxlPih4LCAta0pTTWF4SW50ZWdlciksIGtKU01heEludGVnZXIpKTsKLX0K
LQotdWludDY0X3QgdG9VSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJl
dHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om1pbjxk
b3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgMCksIGtKU01heEludGVnZXIpKTsKLX0KLQotLy8g
aHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nLWxvbmcKLWludDY0X3QgdG9JbnQ2
NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFs
dWUudG9OdW1iZXIoJnN0YXRlKTsKLQotICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0
byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCi0gICAgdW5zaWduZWQgbG9u
ZyBsb25nIG47Ci0gICAgZG91YmxlVG9JbnRlZ2VyKHgsIG4pOwotICAgIHJldHVybiBuOwotfQot
Ci0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmctbG9uZwot
dWludDY0X3QgdG9VSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0KLSAgICAvLyBNYXAgTmFOcyBh
bmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0Lgot
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOwotICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsKLSAg
ICByZXR1cm4gbjsKLX0KLQotY2xhc3MgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvciB7Ci1w
dWJsaWM6Ci0gICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvcigpID0gZGVmYXVsdDsKLQot
ICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9y
KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX2hhc1NraXBwZWRGaXJzdEZyYW1lKSB7Ci0g
ICAgICAgICAgICBtX2hhc1NraXBwZWRGaXJzdEZyYW1lID0gdHJ1ZTsKLSAgICAgICAgICAgIHJl
dHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF1
dG8qIGNvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpKQotICAgICAgICAgICAgbV9nbG9i
YWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIEFTU0VSVCh2aXNpdG9yLT5jYWxsZWUoKSk7Ci0gICAgICAgICAgICAvLyBGSVhN
RTogQ2FsbGVlIGlzIG5vdCBhbiBvYmplY3QgaWYgdGhlIGNhbGxlciBpcyBXZWIgQXNzZW1ibHku
Ci0gICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gaGVyZS4gV2UgY2FuIHByb2Jh
Ymx5IGdldCB0aGUgZ2xvYmFsIG9iamVjdAotICAgICAgICAgICAgLy8gZnJvbSB0aGUgdG9wLW1v
c3QgV2FzbSBJbnN0YW5jZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE2NTcyMQotICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxlZSgpLT5pc09iamVjdCgpKQot
ICAgICAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odmlzaXRv
ci0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
U3RhY2tWaXNpdG9yOjpEb25lOwotICAgIH0KLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdDsgfQotCi1wcml2YXRlOgotICAg
IG11dGFibGUgYm9vbCBtX2hhc1NraXBwZWRGaXJzdEZyYW1lIHsgZmFsc2UgfTsKLSAgICBtdXRh
YmxlIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdCB7IG51bGxwdHIgfTsKLX07Ci0KLURP
TVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBHZXRDYWxs
ZXJHbG9iYWxPYmplY3RGdW5jdG9yIGl0ZXI7Ci0gICAgZXhlYy0+aXRlcmF0ZShpdGVyKTsKLSAg
ICByZXR1cm4gaXRlci5nbG9iYWxPYmplY3QoKSA/IGFzSlNET01XaW5kb3coaXRlci5nbG9iYWxP
YmplY3QoKSktPndyYXBwZWQoKSA6IGZpcnN0RE9NV2luZG93KGV4ZWMpOwotfQotCi1ET01XaW5k
b3cmIGFjdGl2ZURPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGFzSlNE
T01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOwotfQotCi1E
T01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4g
YXNKU0RPTVdpbmRvdyhleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5BY2Nlc3NEb2N1bWVudChKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIERvY3VtZW50KiB0YXJnZXREb2N1bWVudCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24g
cmVwb3J0aW5nT3B0aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmICghdGFyZ2V0RG9jdW1l
bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIERPTVdpbmRvdyYgYWN0aXZlID0gYWN0
aXZlRE9NV2luZG93KHN0YXRlKTsKLQotICAgIGlmIChhY3RpdmUuZG9jdW1lbnQoKS0+c2VjdXJp
dHlPcmlnaW4oKS5jYW5BY2Nlc3ModGFyZ2V0RG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHN3aXRjaCAocmVwb3J0aW5nT3B0aW9uKSB7Ci0g
ICAgY2FzZSBUaHJvd1NlY3VyaXR5RXJyb3I6Ci0gICAgICAgIHRocm93U2VjdXJpdHlFcnJvcigq
c3RhdGUsIHNjb3BlLCB0YXJnZXREb2N1bWVudC0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNj
ZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExvZ1Nl
Y3VyaXR5RXJyb3I6Ci0gICAgICAgIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUodGFyZ2V0RG9j
dW1lbnQtPmZyYW1lKCksIHRhcmdldERvY3VtZW50LT5kb21XaW5kb3coKS0+Y3Jvc3NEb21haW5B
Y2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG9O
b3RSZXBvcnRTZWN1cml0eUVycm9yOgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1Rv
RE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRE9NV2luZG93JiB0YXJnZXQsIFNlY3Vy
aXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKLXsKLSAgICByZXR1cm4gY2FuQWNj
ZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC5kb2N1bWVudCgpLCByZXBvcnRpbmdPcHRpb24pOwot
fQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgRnJhbWUqIHRhcmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24g
cmVwb3J0aW5nT3B0aW9uKQotewotICAgIHJldHVybiB0YXJnZXQgJiYgY2FuQWNjZXNzRG9jdW1l
bnQoc3RhdGUsIHRhcmdldC0+ZG9jdW1lbnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKLX0KLQotYm9v
bCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgTm9kZSogdGFyZ2V0KQotewotICAgIHJldHVybiAhdGFyZ2V0IHx8IGNhbkFjY2Vz
c0RvY3VtZW50KCZzdGF0ZSwgJnRhcmdldC0+ZG9jdW1lbnQoKSwgTG9nU2VjdXJpdHlFcnJvcik7
Ci19CiAgICAgCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdGhyb3dUeXBlRXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSkKIHsKQEAgLTk3Myw0MCArMzc3LDYgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWpl
Y3RQcm9taXNlV2l0aFRoaQogICAgIHJldHVybiBjcmVhdGVSZWplY3RlZFByb21pc2VXaXRoVHlw
ZUVycm9yKHN0YXRlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgbWV0
aG9kTmFtZSkpOwogfQogCi12b2lkIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgSlNDOjpKU0Z1
bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRhOwotICAgIEpT
Qzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENhbGxEYXRhKCZmdW5jdGlvbiwgY2FsbERh
dGEpOwotICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7Ci0KLSAgICBKU0M6
Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3RhdGUuYXJndW1lbnRDb3VudCgpOyArK2kpCi0gICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOwotICAgIEpTQzo6Y2FsbCgmc3RhdGUsICZm
dW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmdGhpc09iamVjdCwgYXJndW1lbnRzKTsKLX0K
LQotdm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0M6
OkpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBhdXRvKiB0
aGlzT2JqZWN0ID0ganNDYXN0PERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Kj4oY2VsbCk7
Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVuY3Rpb24pOwotfQotCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsVGhyb3dUeXBlRXJyb3IoRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIG9wZXJhdG9yIikpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwotfQotCi1DYWxsVHlwZSBET01Db25zdHJ1
Y3Rvck9iamVjdDo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxEYXRhKQotewot
ICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxUaHJvd1R5cGVFcnJvcjsKLSAgICBy
ZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7Ci19Ci0KIHZvaWQgdGhyb3dET01TeW50YXhFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCiB7CiAgICAgQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5oCShyZXZpc2lvbiAyMTEzNTMpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOjIxMTM1MykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDgyNSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAw
MSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMy0y
MDA2LCAyMDA4LTIwMDksIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3Jn
PgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJET01XcmFwcGVyV29ybGQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5j
bHVkZSAiRXhjZXB0aW9uT3IuaCIKKyNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIkpTRHluYW1pY0Rvd25jYXN0LmgiCisj
aW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCisjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlSW5s
aW5lcy5oIgorI2luY2x1ZGUgIldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIgorI2luY2x1
ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5oPgorI2luY2x1ZGUgPGhl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9XZWFrLmg+CisjaW5jbHVk
ZSA8aGVhcC9XZWFrSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmll
cklubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9JdGVyYXRvck9wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KKyNp
bmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ0pT
VmFsdWVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NlbGxJbmxpbmVzLmg+CisjaW5j
bHVkZSA8cnVudGltZS9KU09iamVjdElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTVHlw
ZWRBcnJheXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0xvb2t1cC5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGlu
ZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8
cnVudGltZS9UeXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmg+
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisvLyBG
SVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGZpbGUgYSBsb3QgZWFzaWVyIHRvIHJlYWQgYnkgcHV0
dGluZyBhbGwgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGF0IHRoZSB0b3AsCisvLyBhbmQgZnVuY3Rp
b24gZGVmaW5pdGlvbnMgYmVsb3csIGV2ZW4gZm9yIHRlbXBsYXRlIGFuZCBpbmxpbmUgZnVuY3Rp
b25zLgorCituYW1lc3BhY2UgSlNDIHsKK2NsYXNzIEpTRnVuY3Rpb247Cit9CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVkU2NyaXB0OworY2xhc3MgRGVmZXJyZWRQcm9taXNl
OworY2xhc3MgRE9NV2luZG93OworY2xhc3MgRnJhbWU7CitjbGFzcyBVUkw7CitjbGFzcyBOb2Rl
OworCitzdHJ1Y3QgRXhjZXB0aW9uRGV0YWlscyB7CisgICAgU3RyaW5nIG1lc3NhZ2U7CisgICAg
aW50IGxpbmVOdW1iZXIgeyAwIH07CisgICAgaW50IGNvbHVtbk51bWJlciB7IDAgfTsKKyAgICBT
dHJpbmcgc291cmNlVVJMOworfTsKKworLy8gQmFzZSBjbGFzcyBmb3IgYWxsIGNvbnN0cnVjdG9y
IG9iamVjdHMgaW4gdGhlIEpTQyBiaW5kaW5ncy4KK2NsYXNzIERPTUNvbnN0cnVjdG9yT2JqZWN0
IDogcHVibGljIEpTRE9NT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTRE9NT2JqZWN0
IEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IEpTQzo6SW1wbGVt
ZW50c0RlZmF1bHRIYXNJbnN0YW5jZSB8IEpTQzo6VHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRh
OworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKKworcHJvdGVjdGVkOgorICAgIERP
TUNvbnN0cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsK
KworICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CisgICAgc3Rh
dGljIEpTQzo6Q2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgSlNDOjpDYWxsRGF0YSYpOwor
fTsKKworY2xhc3MgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QgOiBwdWJsaWMgRE9NQ29u
c3RydWN0b3JPYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgQmFzZTsKKworcHJvdGVjdGVkOgorICAgIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0
KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKKyAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOworCisgICAgSlND
OjpKU0Z1bmN0aW9uKiBpbml0aWFsaXplRnVuY3Rpb24oKTsKKyAgICB2b2lkIHNldEluaXRpYWxp
emVGdW5jdGlvbihKU0M6OlZNJiwgSlNDOjpKU0Z1bmN0aW9uJik7CisKK3ByaXZhdGU6CisgICAg
SlNDOjpXcml0ZUJhcnJpZXI8SlNDOjpKU0Z1bmN0aW9uPiBtX2luaXRpYWxpemVGdW5jdGlvbjsK
K307CisKK0RPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CitET01X
aW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworRE9NV2luZG93JiBmaXJz
dERPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworCitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworV0VC
Q09SRV9FWFBPUlQgdm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1l
KTsKKwordm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJp
YnV0ZU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7CitXRUJDT1JFX0VYUE9SVCBib29s
IHRocm93U2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CisK
K3ZvaWQgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJik7IC8vIE5vdCB0aGUgc2FtZSBhcyBhIEphdmFTY3JpcHQgc3lu
dGF4IGVycm9yLgordm9pZCB0aHJvd0luZGV4U2l6ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93SW52YWxpZFN0YXRlRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKK1dFQkNPUkVfRVhQ
T1JUIHZvaWQgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVzc2FnZSk7Cit2b2lkIHRo
cm93U2VjdXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSk7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHRocm93U2VxdWVuY2VUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dUeXBl
TWlzbWF0Y2hFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOworCitXRUJD
T1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJy
b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudElu
ZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFZh
bHVlcyk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVy
cm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJ
bmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVy
ZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6
OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1
bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOworV0VCQ09SRV9FWFBPUlQg
SlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVtYmVyTmFtZSwgY29uc3Qg
Y2hhciogZGljdGlvbmFyeU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7CitKU0M6OkVu
Y29kZWRKU1ZhbHVlIHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFp
bGFibGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIq
IGludGVyZmFjZU5hbWUpOworCitTdHJpbmcgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitTdHJp
bmcgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworCitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRK
U1ZhbHVlIHRocm93R2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFt
ZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFj
ZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6
RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdp
dGhUaGlzVHlwZUVycm9yKERlZmVycmVkUHJvbWlzZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKTsK
KworV0VCQ09SRV9FWFBPUlQgSlNDOjpTdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShK
U0RPTUdsb2JhbE9iamVjdCYsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7CitXRUJDT1JFX0VYUE9S
VCBKU0M6OlN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmLCBK
U0M6OlN0cnVjdHVyZSosIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVjdHVyZShKU0M6OlZN
JiwgSlNET01HbG9iYWxPYmplY3QmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4g
SlNDOjpTdHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUq
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpKU09iamVjdCogZ2V0RE9N
UHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7CisKK3ZvaWQgY2FsbEZ1
bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0
JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSlND
bGFzcz4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmplY3Qm
KTsKKworSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQm
LCBKU0M6OkFycmF5QnVmZmVyKik7Cit2b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIq
KTsKKworSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxk
Jiwgdm9pZCopOworSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkJiwgU2NyaXB0V3JhcHBhYmxlKik7CitKU0M6OkpTQXJyYXlCdWZmZXIqIGdldElubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciopOworCiti
b29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9N
T2JqZWN0KiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqKTsKK2Jvb2wgc2V0SW5saW5lQ2FjaGVkV3Jh
cHBlcihET01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3Jh
cHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcik7Citib29sIHNldElubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciosIEpTQzo6
SlNBcnJheUJ1ZmZlciogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25l
cik7CisKK2Jvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZv
aWQqLCBKU0RPTU9iamVjdCopOworYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkJiwgU2NyaXB0V3JhcHBhYmxlKiwgSlNET01PYmplY3QqIHdyYXBwZXIpOworYm9v
bCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1
ZmZlciosIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlcik7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IERPTUNsYXNzPiBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYsIERPTUNsYXNzJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6
SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgUmVmPERP
TUNsYXNzPiYgb2JqZWN0KSB7IHJldHVybiBnZXRDYWNoZWRXcmFwcGVyKHdvcmxkLCBvYmplY3Qu
Z2V0KCkpOyB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNs
YXNzPiB2b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyosIFdyYXBw
ZXJDbGFzcyopOwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJD
bGFzcz4gdm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyosIFdy
YXBwZXJDbGFzcyopOwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGF1
dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUPiYmKSAtPiB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5h
bWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46
OnR5cGU7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gYXV0byBjcmVh
dGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpIC0+IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGU7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgRE9NQ2xhc3MmKTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgSlNDbGFzcz4gSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYpOwor
Cit2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYpOworCitjb25zdCBK
U0M6Okhhc2hUYWJsZSYgZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShKU0M6OlZNJiwgY29uc3Qg
SlNDOjpIYXNoVGFibGUmIHN0YXRpY1RhYmxlKTsKKworU3RyaW5nIHJldHJpZXZlRXJyb3JNZXNz
YWdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIEpT
Qzo6Q2F0Y2hTY29wZSYpOworV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqID0gbnVs
bHB0cik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6RXhjZXB0aW9uKiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIsIEV4Y2VwdGlvbkRl
dGFpbHMqID0gbnVsbHB0cik7Cit2b2lkIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oSlNDOjpFeGVj
U3RhdGUqKTsKKworSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0
ZSYsIEV4Y2VwdGlvbiYmKTsKK0pTQzo6SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpF
eGVjU3RhdGUqLCBFeGNlcHRpb25Db2RlLCBjb25zdCBTdHJpbmcmKTsKKworLy8gQ29udmVydCBh
IERPTSBpbXBsZW1lbnRhdGlvbiBleGNlcHRpb24gaW50byBhIEphdmFTY3JpcHQgZXhjZXB0aW9u
IGluIHRoZSBleGVjdXRpb24gc3RhdGUuCit2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKK1dFQkNPUkVfRVhQT1JU
IHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uU2xvd1BhdGgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBFeGNlcHRpb24mJik7CisKK0pTQzo6SlNWYWx1ZSBqc1N0cmluZyhKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IFVSTCYpOyAvLyBlbXB0eSBpZiB0aGUgVVJMIGlzIG51bGwKKworSlND
OjpKU1ZhbHVlIGpzU3RyaW5nT3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJp
bmcmKTsgLy8gdW5kZWZpbmVkIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAorSlNDOjpKU1ZhbHVlIGpz
U3RyaW5nT3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBVUkwmKTsgLy8gdW5kZWZp
bmVkIGlmIHRoZSBVUkwgaXMgbnVsbAorCisvLyBTZWUgSmF2YVNjcmlwdENvcmUgZm9yIGV4cGxh
bmF0aW9uOiBTaG91bGQgYmUgdXNlZCBmb3IgYW55IHN0cmluZyB0aGF0IGlzIGFscmVhZHkgb3du
ZWQgYnkgYW5vdGhlcgorLy8gb2JqZWN0LCB0byBsZXQgdGhlIGVuZ2luZSBrbm93IHRoYXQgY29s
bGVjdGluZyB0aGUgSlNTdHJpbmcgd3JhcHBlciBpcyB1bmxpa2VseSB0byBzYXZlIG1lbW9yeS4K
K0pTQzo6SlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
U3RyaW5nJik7CisKK1N0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFt
ZSk7CisKK0F0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3Bl
cnR5TmFtZSk7CisKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5n
KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CitXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgdmFsdWVUb0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmluZyhKU0M6OkV4ZWNT
dGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZh
bHVlVG9VU1ZTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCitpbnQzMl90
IGZpbml0ZUludDMyVmFsdWUoSlNDOjpKU1ZhbHVlLCBKU0M6OkV4ZWNTdGF0ZSosIGJvb2wmIG9r
YXkpOworCisvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBjb252ZXJ0IHZhbHVlcyB0byBpbnRl
Z2VycyBhcyBwZXIgdGhlIFdlYklETCBzcGVjaWZpY2F0aW9uLgorLy8gVGhlIGNvbnZlcnNpb24g
ZmFpbHMgaWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgb3IsIGlm
IEVuZm9yY2VSYW5nZSBpcyBzcGVjaWZpZWQsCisvLyB0aGUgdmFsdWUgaXMgb3V0c2lkZSB0aGUg
cmFuZ2Ugb2YgdGhlIGRlc3RpbmF0aW9uIGludGVnZXIgdHlwZS4KKworV0VCQ09SRV9FWFBPUlQg
aW50OF90IHRvSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
CitXRUJDT1JFX0VYUE9SVCB1aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2RW5mb3Jj
ZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVp
bnQxNl90IHRvVUludDE2RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKK1dFQkNPUkVfRVhQT1JUIGludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQzMkVu
Zm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9S
VCBpbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOworV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCitXRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4
Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWlu
dDhfdCB0b1VJbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09S
RV9FWFBPUlQgaW50MTZfdCB0b0ludDE2Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOworV0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJDbGFtcChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0
b1VJbnQzMkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQ
T1JUIGludDY0X3QgdG9JbnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
K1dFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IHRvVUludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOworCitXRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50
MTYoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDE2
X3QgdG9VSW50MTYoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBP
UlQgaW50NjRfdCB0b0ludDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNP
UkVfRVhQT1JUIHVpbnQ2NF90IHRvVUludDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKKworSlNDOjpKU1ZhbHVlIGpzRGF0ZShKU0M6OkV4ZWNTdGF0ZSosIGRvdWJsZSB2YWx1ZSk7
CisKKy8vIE5hTiBpZiB0aGUgdmFsdWUgY2FuJ3QgYmUgY29udmVydGVkIHRvIGEgZGF0ZS4KK2Rv
dWJsZSB2YWx1ZVRvRGF0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7CisKKy8vIFZh
bGlkYXRlcyB0aGF0IHRoZSBwYXNzZWQgb2JqZWN0IGlzIGEgc2VxdWVuY2UgdHlwZSBwZXIgc2Vj
dGlvbiA0LjEuMTMgb2YgdGhlIFdlYklETCBzcGVjLgorSlNDOjpKU09iamVjdCogdG9KU1NlcXVl
bmNlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCB1bnNpZ25lZCYgbGVuZ3RoKTsKKwor
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpT
Qzo6QXJyYXlCdWZmZXImKTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Jik7CitKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZl
ciopOworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcqKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4m
Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmUHRyPFQ+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IGNvbnN0IFZlY3RvcjxUPiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8VD4+Jik7CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgY29uc3QgSlNDOjpQcml2YXRlTmFtZSYpOworCitKU0M6OkpTVmFsdWUgdG9KU0l0
ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUp
OwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgVCYpOworSlNDOjpKU1ZhbHVlIHRv
SlNJdGVyYXRvckVuZChKU0M6OkV4ZWNTdGF0ZSYpOworCitSZWZQdHI8SlNDOjpBcnJheUJ1ZmZl
clZpZXc+IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXko
SlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3Np
Ymx5U2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6
OkludDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpT
VmFsdWUpOworUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4QXJy
YXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJh
eT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOworUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJh
eShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Bv
c3NpYmx5U2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8
SlNDOjpGbG9hdDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFy
ZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CisKK1JlZlB0cjxKU0M6OkFy
cmF5QnVmZmVyVmlldz4gdG9VbnNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDhBcnJheT4gdG9VbnNoYXJlZEludDhBcnJheShKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJ
bnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50MzJBcnJh
eT4gdG9VbnNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8
SlNDOjpVaW50OEFycmF5PiB0b1Vuc2hhcmVkVWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1Zh
bHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFt
cGVkQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50MTZBcnJh
eT4gdG9VbnNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRy
PEpTQzo6VWludDMyQXJyYXk+IHRvVW5zaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJBcnJh
eShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9V
bnNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgSlNUeXBlPiBWZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFy
cmF5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wg
aGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCitlbnVt
IFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHsgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yLCBMb2dT
ZWN1cml0eUVycm9yLCBUaHJvd1NlY3VyaXR5RXJyb3IgfTsKK25hbWVzcGFjZSBCaW5kaW5nU2Vj
dXJpdHkgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JOb2Rl
KEpTQzo6RXhlY1N0YXRlJiwgVCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNr
U2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgVCopOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IEV4Y2VwdGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0
ZSYsIEV4Y2VwdGlvbk9yPFQqPiYmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNlcHRp
b25PcjxUKj4gY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb25P
cjxUJj4mJik7CisgICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhl
Y1N0YXRlKiwgRE9NV2luZG93JiwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1cml0
eUVycm9yKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVj
U3RhdGUmLCBET01XaW5kb3cmLCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIGJvb2wgc2hvdWxkQWxs
b3dBY2Nlc3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiwgRnJhbWUqLCBTZWN1cml0eVJlcG9ydGlu
Z09wdGlvbiA9IExvZ1NlY3VyaXR5RXJyb3IpOworICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NU
b0ZyYW1lKEpTQzo6RXhlY1N0YXRlJiwgRnJhbWUmLCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIGJv
b2wgc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoSlNDOjpFeGVjU3RhdGUmLCBOb2RlKik7Cit9Owor
Cit2b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpOworCitTdHJpbmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUp
OworQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJvcGVydHlO
YW1lKTsKKwordGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpF
bmNvZGVkSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7CisKKworZW51bSBj
bGFzcyBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciB7IFRocm93LCBSZXR1cm5FYXJseSwgUmVqZWN0
UHJvbWlzZSwgQXNzZXJ0IH07CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+CitzdHJ1Y3Qg
QmluZGluZ0NhbGxlciB7CisgICAgdXNpbmcgQXR0cmlidXRlU2V0dGVyRnVuY3Rpb24gPSBib29s
KEpTQzo6RXhlY1N0YXRlJiwgSlNDbGFzcyYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpUaHJvd1Njb3Bl
Jik7CisgICAgdXNpbmcgQXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gPSBKU0M6OkpTVmFsdWUoSlND
OjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNpbmcgT3Bl
cmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRl
KiwgSlNDbGFzcyosIEpTQzo6VGhyb3dTY29wZSYpOworICAgIHVzaW5nIFByb21pc2VPcGVyYXRp
b25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBK
U0NsYXNzKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Njb3BlJik7CisKKyAg
ICBzdGF0aWMgSlNDbGFzcyogY2FzdEZvckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
RW5jb2RlZEpTVmFsdWUpOworICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yT3BlcmF0aW9uKEpT
Qzo6RXhlY1N0YXRlJik7CisKKyAgICB0ZW1wbGF0ZTxQcm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVu
Y3Rpb24gb3BlcmF0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJv
dyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlPgorICAgIHN0YXRpYyBK
U0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxQcm9taXNlT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBjb25zdCBjaGFyKiBvcGVyYXRp
b25OYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlKTsKKyAgICAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBjYXN0Rm9yT3BlcmF0aW9uKCpzdGF0ZSk7CisgICAgICAgIGlmIChzaG91
bGRUaHJvdyAhPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0ICYmIFVOTElLRUxZKCF0
aGlzT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBl
RXJyb3IocHJvbWlzZS5nZXQoKSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlv
bk5hbWUpOworICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7CisgICAgICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygpKTsKKyAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1
c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNPYmplY3QuCisgICAgICAgIHJldHVybiBv
cGVyYXRpb25DYWxsZXIoc3RhdGUsIHRoaXNPYmplY3QsIFdURk1vdmUocHJvbWlzZSksIHRocm93
U2NvcGUpOworICAgIH0KKworICAgIHRlbXBsYXRlPE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uIG9w
ZXJhdGlvbkNhbGxlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFs
dWUgY2FsbE9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNvbnN0IGNoYXIqIG9wZXJh
dGlvbk5hbWUpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhdGUpOworICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0
byogdGhpc09iamVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsKKyAgICAgICAgaWYgKHNo
b3VsZFRocm93ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5MSUtFTFko
IXRoaXNPYmplY3QpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3I6OlRocm93KQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1RoaXNU
eXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwg
b3BlcmF0aW9uTmFtZSk7CisgICAgICAgICAgICAvLyBGb3IgY3VzdG9tIHByb21pc2UtcmV0dXJu
aW5nIG9wZXJhdGlvbnMKKyAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aFRoaXNU
eXBlRXJyb3IoKnN0YXRlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9uTmFt
ZSk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QpOworICAgICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIEpTQ2xhc3M6OmluZm8oKSk7CisgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJhdGVkIGNv
ZGUgdG8gdXNlIHJlZmVyZW5jZXMgZm9yIHN0YXRlIGFuZCB0aGlzT2JqZWN0LgorICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uQ2FsbGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTxBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiBzZXR0ZXIsIENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6
OlRocm93PgorICAgIHN0YXRpYyBib29sIHNldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvckF0dHJp
YnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVj
dCkpCisgICAgICAgICAgICByZXR1cm4gKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yOjpUaHJvdykgPyB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUs
IEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKSA6IGZhbHNlOworICAg
ICAgICByZXR1cm4gc2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIEpTQzo6SlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRWYWx1ZSksIHRocm93U2NvcGUpOworICAgIH0KKworICAgIHRlbXBsYXRlPEF0
dHJpYnV0ZUdldHRlckZ1bmN0aW9uIGdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hv
dWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+CisgICAgc3RhdGljIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgYXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCisgICAg
eworICAgICAgICBBU1NFUlQoc3RhdGUpOworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byogdGhpc09iamVjdCA9
IGNhc3RGb3JBdHRyaWJ1dGUoKnN0YXRlLCB0aGlzVmFsdWUpOworICAgICAgICBpZiAoVU5MSUtF
TFkoIXRoaXNPYmplY3QpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OlRocm93KQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NO
YW1lLCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmVqZWN0UHJvbWlzZSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCBKU0NsYXNzOjppbmZv
KCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSk7CisgICAgICAgICAgICByZXR1cm4gSlNDOjpK
U1ZhbHVlOjplbmNvZGUoSlNDOjpqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoZ2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRo
cm93U2NvcGUpKTsKKyAgICB9Cit9OworCisvLyBFeGNlcHRpb25PciBoYW5kbGluZy4KK3ZvaWQg
cHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhj
ZXB0aW9uT3I8dm9pZD4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwg
RXhjZXB0aW9uT3I8VD4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpU
aHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VD4mJiB2YWx1ZSk7CisKKy8vIElubGluZSBmdW5jdGlv
bnMgYW5kIHRlbXBsYXRlIGRlZmluaXRpb25zLgorCitpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIERP
TUNvbnN0cnVjdG9yT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAg
ICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5
cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7Cit9CisKK2lubGluZSBET01Db25zdHJ1Y3Rvck9iamVjdDo6RE9NQ29uc3RydWN0b3JPYmpl
Y3QoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKKyAgICA6IEpTRE9NT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQoreworfQor
CitpbmxpbmUgU3RyaW5nIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNP
YmplY3QqKQoreworICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkZ1bmN0aW9uIik7Cit9CisKK2lu
bGluZSBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6RE9NQ29uc3RydWN0b3JKU0J1aWx0
aW5PYmplY3QoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGds
b2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFs
T2JqZWN0KQoreworfQorCitpbmxpbmUgSlNDOjpKU0Z1bmN0aW9uKiBET01Db25zdHJ1Y3RvckpT
QnVpbHRpbk9iamVjdDo6aW5pdGlhbGl6ZUZ1bmN0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9pbml0
aWFsaXplRnVuY3Rpb24uZ2V0KCk7Cit9CisKK2lubGluZSB2b2lkIERPTUNvbnN0cnVjdG9ySlNC
dWlsdGluT2JqZWN0OjpzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYgdm0sIEpTQzo6SlNG
dW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAgbV9pbml0aWFsaXplRnVuY3Rpb24uc2V0KHZtLCB0
aGlzLCAmZnVuY3Rpb24pOworfQorCitpbmxpbmUgSlNET01HbG9iYWxPYmplY3QqIGRlcHJlY2F0
ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
Ly8gRklYTUU6IENhbGxlcnMgdG8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNpbmcgdGhlIGds
b2JhbCBvYmplY3QKKyAgICAvLyBmcm9tIHdoaWNoIHRoZSBvYmplY3QgaXMgYmVpbmcgY3JlYXRl
ZCwgaW5zdGVhZCBvZiBhc3N1bWluZyB0aGUgbGV4aWNhbCBvbmUuCisgICAgLy8gZS5nLiBzdWJm
cmFtZS5kb2N1bWVudC5ib2R5IHNob3VsZCB1c2UgdGhlIHN1YmZyYW1lJ3MgZ2xvYmFsIG9iamVj
dCwgbm90IHRoZSBsZXhpY2FsIG9uZS4KKyAgICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3RydWN0
dXJlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAg
IGlmIChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKGds
b2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gc3RydWN0
dXJlOworICAgIHJldHVybiBjYWNoZURPTVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIFdyYXBwZXJD
bGFzczo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNy
ZWF0ZVByb3RvdHlwZSh2bSwgJmdsb2JhbE9iamVjdCkpLCBXcmFwcGVyQ2xhc3M6OmluZm8oKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3RydWN0
dXJlKiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQorewor
ICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIHdyb25nLiBJdCB1c2VzIHRoZSB3cm9uZyBn
bG9iYWwgb2JqZWN0IGZvciBjcmVhdGluZyB0aGUgcHJvdG90eXBlIHN0cnVjdHVyZS4KKyAgICBy
ZXR1cm4gZ2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFzcz4oZXhlYy0+dm0oKSwgKmRlcHJlY2F0
ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYykpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRET01Qcm90b3R5cGUoSlND
OjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1
cm4gSlNDOjpqc0Nhc3Q8SlNDOjpKU09iamVjdCo+KGFzT2JqZWN0KGdldERPTVN0cnVjdHVyZTxX
cmFwcGVyQ2xhc3M+KHZtLCAqSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxP
YmplY3QpKS0+c3RvcmVkUHJvdG90eXBlKCkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSlND
bGFzcz4gaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUgY3JlYXRlSlNCdWlsdGluKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU0Z1bmN0aW9uJiBpbml0aWFsaXplRnVuY3Rpb24sIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgSlNDOjpKU09iamVjdCogb2JqZWN0
ID0gSlNDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxKU0NsYXNzPihnbG9iYWxPYmplY3Qu
dm0oKSwgZ2xvYmFsT2JqZWN0KSwgJmdsb2JhbE9iamVjdCk7CisgICAgY2FsbEZ1bmN0aW9uV2l0
aEN1cnJlbnRBcmd1bWVudHMoc3RhdGUsICpvYmplY3QsIGluaXRpYWxpemVGdW5jdGlvbik7Cisg
ICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKG9iamVjdCk7Cit9CisKK2lubGluZSBKU0M6
OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpT
Qzo6QXJyYXlCdWZmZXIqKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIqPih3b3JsZC52bSgpLm1fdHlwZWRBcnJheUNvbnRyb2xsZXIuZ2V0KCkp
LT53cmFwcGVyT3duZXIoKTsKK30KKworaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoSlNDOjpBcnJh
eUJ1ZmZlciogZG9tT2JqZWN0KQoreworICAgIHJldHVybiBkb21PYmplY3Q7Cit9CisKK2lubGlu
ZSBKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2
b2lkKikgeyByZXR1cm4gbnVsbHB0cjsgfQoraW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3Jh
cHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqLCBKU0M6OldlYWtIYW5k
bGVPd25lciopIHsgcmV0dXJuIGZhbHNlOyB9CitpbmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hl
ZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0KikgeyByZXR1cm4g
ZmFsc2U7IH0KKworaW5saW5lIEpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0KQoreworICAg
IGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0
dXJuIGRvbU9iamVjdC0+d3JhcHBlcigpOworfQorCitpbmxpbmUgSlNDOjpKU0FycmF5QnVmZmVy
KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJy
YXlCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIHJldHVybiBidWZmZXItPm1fd3JhcHBlci5nZXQoKTsKK30K
KworaW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01PYmplY3QqIHdyYXBwZXIsIEpT
Qzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpCit7CisgICAgaWYgKCF3b3JsZC5pc05v
cm1hbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZG9tT2JqZWN0LT5zZXRXcmFwcGVy
KHdyYXBwZXIsIHdyYXBwZXJPd25lciwgJndvcmxkKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
aW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxk
LCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBl
ciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcikKK3sKKyAgICBpZiAoIXdvcmxk
LmlzTm9ybWFsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb21PYmplY3QtPm1fd3Jh
cHBlciA9IEpTQzo6V2VhazxKU0M6OkpTQXJyYXlCdWZmZXI+KHdyYXBwZXIsIHdyYXBwZXJPd25l
ciwgJndvcmxkKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgY2xlYXJJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSog
ZG9tT2JqZWN0LCBKU0RPTU9iamVjdCogd3JhcHBlcikKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9y
bWFsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb21PYmplY3QtPmNsZWFyV3JhcHBl
cih3cmFwcGVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgY2xlYXJJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIq
IGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKQoreworICAgIGlmICghd29y
bGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHdlYWtDbGVhcihkb21P
YmplY3QtPm1fd3JhcHBlciwgd3JhcHBlcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3Jh
cHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyYgZG9tT2JqZWN0KQoreworICAg
IGlmIChhdXRvKiB3cmFwcGVyID0gZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgJmRvbU9i
amVjdCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVybiB3b3JsZC5tX3dyYXBw
ZXJzLmdldCh3cmFwcGVyS2V5KCZkb21PYmplY3QpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
RE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQgY2FjaGVXcmFwcGVy
KERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QsIFdyYXBwZXJDbGFz
cyogd3JhcHBlcikKK3sKKyAgICBKU0M6OldlYWtIYW5kbGVPd25lciogb3duZXIgPSB3cmFwcGVy
T3duZXIod29ybGQsIGRvbU9iamVjdCk7CisgICAgaWYgKHNldElubGluZUNhY2hlZFdyYXBwZXIo
d29ybGQsIGRvbU9iamVjdCwgd3JhcHBlciwgb3duZXIpKQorICAgICAgICByZXR1cm47CisgICAg
d2Vha0FkZCh3b3JsZC5tX3dyYXBwZXJzLCB3cmFwcGVyS2V5KGRvbU9iamVjdCksIEpTQzo6V2Vh
azxKU0M6OkpTT2JqZWN0Pih3cmFwcGVyLCBvd25lciwgJndvcmxkKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIHVu
Y2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3Qs
IFdyYXBwZXJDbGFzcyogd3JhcHBlcikKK3sKKyAgICBpZiAoY2xlYXJJbmxpbmVDYWNoZWRXcmFw
cGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBwZXIpKQorICAgICAgICByZXR1cm47CisgICAgd2Vh
a1JlbW92ZSh3b3JsZC5tX3dyYXBwZXJzLCB3cmFwcGVyS2V5KGRvbU9iamVjdCksIHdyYXBwZXIp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gaW5saW5lIGF1
dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VD4m
JiBkb21PYmplY3QpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxET01D
bGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9N
Q2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZQoreworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9
IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJD
bGFzczsKKworICAgIEFTU0VSVCghZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxk
KCksIGRvbU9iamVjdCkpOworICAgIGF1dG8qIGRvbU9iamVjdFB0ciA9IGRvbU9iamVjdC5wdHIo
KTsKKyAgICBhdXRvKiB3cmFwcGVyID0gV3JhcHBlckNsYXNzOjpjcmVhdGUoZ2V0RE9NU3RydWN0
dXJlPFdyYXBwZXJDbGFzcz4oZ2xvYmFsT2JqZWN0LT52bSgpLCAqZ2xvYmFsT2JqZWN0KSwgZ2xv
YmFsT2JqZWN0LCBXVEZNb3ZlKGRvbU9iamVjdCkpOworICAgIGNhY2hlV3JhcHBlcihnbG9iYWxP
YmplY3QtPndvcmxkKCksIGRvbU9iamVjdFB0ciwgd3JhcHBlcik7CisgICAgcmV0dXJuIHdyYXBw
ZXI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBpbmxpbmUg
YXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxU
PiYmIGRvbU9iamVjdCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxE
T01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZQoreworICAgIHJldHVybiBjcmVhdGVXcmFw
cGVyPERPTUNsYXNzPihnbG9iYWxPYmplY3QsIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxET01DbGFz
cz4oV1RGTW92ZShkb21PYmplY3QpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNz
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHdyYXAoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBET01DbGFzcyYgZG9tT2JqZWN0KQoreworICAgIGlm
IChhdXRvKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCks
IGRvbU9iamVjdCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVybiB0b0pTTmV3
bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIFJlZjxET01DbGFzcz4oZG9tT2JqZWN0KSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0NsYXNzJiBjYXN0VGhp
c1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKK3sKKyAgICBhdXRvIHRoaXNWYWx1ZSA9IHN0
YXRlLnRoaXNWYWx1ZSgpOworICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Rvd25jYXN0
PEpTQ2xhc3MqPihzdGF0ZS52bSgpLCB0aGlzVmFsdWUpOworICAgIEFTU0VSVChjYXN0ZWRUaGlz
KTsKKyAgICByZXR1cm4gKmNhc3RlZFRoaXM7Cit9CisKK2lubGluZSBpbnQzMl90IGZpbml0ZUlu
dDMyVmFsdWUoSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgYm9vbCYg
b2theSkKK3sKKyAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoZXhlYyk7CisgICAg
b2theSA9IHN0ZDo6aXNmaW5pdGUobnVtYmVyKTsKKyAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51
bWJlcik7Cit9CisKKy8vIFZhbGlkYXRlcyB0aGF0IHRoZSBwYXNzZWQgb2JqZWN0IGlzIGEgc2Vx
dWVuY2UgdHlwZSBwZXIgc2VjdGlvbiA0LjEuMTMgb2YgdGhlIFdlYklETCBzcGVjLgoraW5saW5l
IEpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpK
U1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCYgbGVuZ3RoKQoreworICAgIEpTQzo6Vk0mIHZtID0gZXhl
Yy52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IHZhbHVlLmdldE9iamVjdCgpOworICAgIGlmICghb2Jq
ZWN0KSB7CisgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoZXhlYywgc2NvcGUpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBKU0M6OkpTVmFsdWUgbGVuZ3RoVmFs
dWUgPSBvYmplY3QtPmdldCgmZXhlYywgZXhlYy5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKworICAgIGlmIChsZW5ndGhW
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJy
b3IoZXhlYywgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBs
ZW5ndGggPSBsZW5ndGhWYWx1ZS50b1VJbnQzMigmZXhlYyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gb2JqZWN0OworfQorCitpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyJiBidWZmZXIpCit7CisgICAgaWYgKGF1
dG8gcmVzdWx0ID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIGJ1ZmZl
cikpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAvLyBUaGUgSlNBcnJheUJ1ZmZlcjo6
Y3JlYXRlIGZ1bmN0aW9uIHdpbGwgcmVnaXN0ZXIgdGhlIHdyYXBwZXIgaW4gZmluaXNoQ3JlYXRp
b24uCisgICAgcmV0dXJuIEpTQzo6SlNBcnJheUJ1ZmZlcjo6Y3JlYXRlKHN0YXRlLT52bSgpLCBn
bG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3RydWN0dXJlKGJ1ZmZlci5zaGFyaW5nTW9kZSgpKSwg
JmJ1ZmZlcik7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZl
clZpZXcmIHZpZXcpCit7CisgICAgcmV0dXJuIHZpZXcud3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0
KTsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlciogYnVmZmVy
KQoreworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAg
ICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqYnVmZmVyKTsKK30KKworaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyVmlldyogdmlldykKK3sKKyAgICBp
ZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgIHJldHVybiB0b0pT
KHN0YXRlLCBnbG9iYWxPYmplY3QsICp2aWV3KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VD4mJiBwdHIpCit7CisgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBwdHIuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZlB0cjxUPiYmIHB0cikKK3sKKyAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFQ+JiB2ZWN0b3IpCit7
CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IGNv
bnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgdmVjdG9yLnNpemUoKSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIGFycmF5LT5wdXREaXJl
Y3RJbmRleChleGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgdmVjdG9yW2ldKSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICB9
CisgICAgcmV0dXJuIGFycmF5OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxSZWZQdHI8VD4+JiB2ZWN0b3IpCit7CisgICAgSlND
OjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVt
cHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgdmVjdG9yLnNpemUoKSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgdmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChl
eGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgdmVjdG9yW2ldLmdldCgpKSk7CisgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIGFycmF5OworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgSlNDOjpQcml2YXRlTmFtZSYg
cHJpdmF0ZU5hbWUpCit7CisgICAgcmV0dXJuIEpTQzo6U3ltYm9sOjpjcmVhdGUoZXhlYy0+dm0o
KSwgcHJpdmF0ZU5hbWUudWlkKCkpOworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVy
YXRvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQoreworICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3Rh
dGUsIHZhbHVlLCBmYWxzZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6
OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgdmFsdWUpCit7CisgICAgcmV0dXJuIGNyZWF0
ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwgdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3Qs
IHZhbHVlKSwgZmFsc2UpOworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvckVu
ZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVz
dWx0T2JqZWN0KCZzdGF0ZSwgSlNDOjpqc1VuZGVmaW5lZCgpLCB0cnVlKTsKK30KKworaW5saW5l
IFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVy
VmlldyhKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8qIHdyYXBw
ZXIgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Kj4odm0sIHZhbHVl
KTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biB3cmFwcGVyLT5wb3NzaWJseVNoYXJlZEltcGwoKTsKK30KKworaW5saW5lIFJlZlB0cjxKU0M6
OkFycmF5QnVmZmVyVmlldz4gdG9VbnNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiB2bSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8gcmVzdWx0ID0gdG9Qb3NzaWJseVNoYXJl
ZEFycmF5QnVmZmVyVmlldyh2bSwgdmFsdWUpOworICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC0+
aXNTaGFyZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworaW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDhB
cnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9z
c2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsg
fQoraW5saW5lIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQxNkFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3Nz
aWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsg
fQoraW5saW5lIFJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQzMkFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3Nz
aWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsg
fQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OEFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3Nz
aWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsg
fQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVk
VWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1
cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhDbGFtcGVk
QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0
b1Bvc3NpYmx5U2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWlu
dDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5
PiB0b1Bvc3NpYmx5U2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6
VWludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJB
cnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkZs
b2F0NjRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBl
ZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVlKTsgfQorCitpbmxpbmUgUmVmUHRy
PEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OkludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MTZBcnJh
eT4gdG9VbnNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkg
eyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFwdG9y
Pih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9VbnNoYXJl
ZEludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFwdG9yPih2bSwgdmFsdWUp
OyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9VbnNoYXJlZFVpbnQ4QXJyYXko
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVk
TmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUg
UmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5zaGFyZWRVaW50OENsYW1wZWRBcnJh
eShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFy
ZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENsYW1wZWRBZGFwdG9yPih2bSwgdmFsdWUpOyB9
CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvVW5zaGFyZWRVaW50MTZBcnJheShK
U0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWRO
YXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUg
UmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVW5zaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBl
ZFZpZXc8SlNDOjpVaW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpT
Qzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxK
U0M6OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6Rmxv
YXQ2NEFycmF5PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZs
b2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIEpTVD4gaW5saW5lIFZlY3RvcjxSZWY8VD4+IHRvUmVmTmF0aXZlQXJyYXkoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNDOjpWTSYgdm0gPSBz
dGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVy
cm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgVmVj
dG9yPFJlZjxUPj4gcmVzdWx0OworICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwgdmFsdWUs
IFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFs
dWUganNWYWx1ZSkgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICAgICAgaWYgKGpzVmFsdWUuaW5oZXJpdHModm0sIEpTVDo6aW5mbygpKSkgewor
ICAgICAgICAgICAgYXV0byogb2JqZWN0ID0gSlNUOjp0b1dyYXBwZWQodm0sIGpzVmFsdWUpOwor
ICAgICAgICAgICAgQVNTRVJUKG9iamVjdCk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCpv
YmplY3QpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRocm93QXJyYXlFbGVtZW50VHlw
ZUVycm9yKCpzdGF0ZSwgc2NvcGUpOworICAgIH0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K2lubGluZSBTdHJpbmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKQoreworICAgIEFTU0VSVCghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpOworICAg
IHJldHVybiBwcm9wZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlkKCkgOiBwcm9wZXJ0
eU5hbWUucHVibGljTmFtZSgpOworfQorCitpbmxpbmUgQXRvbWljU3RyaW5nIHByb3BlcnR5TmFt
ZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBy
ZXR1cm4gQXRvbWljU3RyaW5nKHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFtZS51aWQo
KSA6IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworfQorCit0ZW1wbGF0ZTxKU0M6Ok5hdGl2
ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVl
IG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlND
OjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAg
IHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZShleGVj
LT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGxlbmd0aCwgcHJvcGVydHlOYW1l
LnB1YmxpY05hbWUoKSwgbmF0aXZlRnVuY3Rpb24pKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lk
IHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQoreworICAgIGlmICh0aHJvd1Nj
b3BlLmV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm47CisgICAgcHJvcGFnYXRlRXhjZXB0aW9u
U2xvd1BhdGgoc3RhdGUsIHRocm93U2NvcGUsIFdURk1vdmUoZXhjZXB0aW9uKSk7Cit9CisKK2lu
bGluZSB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8dm9pZD4mJiB2YWx1ZSkKK3sKKyAg
ICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKQorICAgICAgICBwcm9wYWdhdGVF
eGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhy
b3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VD4mJiB2YWx1ZSkKK3sKKyAgICBpZiAo
VU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2Vw
dGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2Jq
ZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYg
dGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VD4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFko
dmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0
ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBUKiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgVCYgbm9kZSkKK3sKKyAgICByZXR1cm4gc2hvdWxkQWxsb3dB
Y2Nlc3NUb05vZGUoc3RhdGUsICZub2RlKSA/ICZub2RlIDogbnVsbHB0cjsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZv
ck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBUKiBub2RlKQoreworICAgIHJldHVybiBzaG91
bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgbm9kZSkgPyBub2RlIDogbnVsbHB0cjsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEV4Y2VwdGlvbk9yPFQqPiBCaW5kaW5nU2VjdXJp
dHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9u
T3I8VCo+JiYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmhhc0V4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpOworICAgIHJldHVybiBjaGVja1NlY3Vy
aXR5Rm9yTm9kZShzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0eTo6
Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb25PcjxU
Jj4mJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIGNoZWNrU2VjdXJpdHlG
b3JOb2RlKHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMg
LTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRs
aW5nLmgJKHJldmlzaW9uIDIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNTUgKzIzLDE5IEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCi0jaW5jbHVkZSAi
SlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKLSNpbmNsdWRl
ICJKU0R5bmFtaWNEb3duY2FzdC5oIgotI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgotI2lu
Y2x1ZGUgIlNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCIKLSNpbmNsdWRlICJXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUgPGhlYXAvSGVh
cElubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgotI2luY2x1
ZGUgPGhlYXAvV2Vhay5oPgotI2luY2x1ZGUgPGhlYXAvV2Vha0lubGluZXMuaD4KLSNpbmNsdWRl
IDxydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9F
cnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU0FycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRp
bWUvSlNDZWxsSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9M
b29rdXAuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBlZEFy
cmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KLSNpbmNsdWRl
IDxydW50aW1lL1dyaXRlQmFycmllci5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBmaWxlIGEg
bG90IGVhc2llciB0byByZWFkIGJ5IHB1dHRpbmcgYWxsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBh
dCB0aGUgdG9wLAotLy8gYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zIGJlbG93LCBldmVuIGZvciB0
ZW1wbGF0ZSBhbmQgaW5saW5lIGZ1bmN0aW9ucy4KIAogbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBK
U0Z1bmN0aW9uOworY2xhc3MgQ2F0Y2hTY29wZTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBDYWNoZWRTY3JpcHQ7CiBjbGFzcyBEZWZlcnJlZFByb21pc2U7Ci1jbGFzcyBET01X
aW5kb3c7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIFVSTDsKLWNsYXNzIE5vZGU7CitjbGFzcyBKU0RP
TUdsb2JhbE9iamVjdDsKIAogc3RydWN0IEV4Y2VwdGlvbkRldGFpbHMgewogICAgIFN0cmluZyBt
ZXNzYWdlOwpAQCAtODAsMzkgKzQ0LDYgQEAgc3RydWN0IEV4Y2VwdGlvbkRldGFpbHMgewogICAg
IFN0cmluZyBzb3VyY2VVUkw7CiB9OwogCi0vLyBCYXNlIGNsYXNzIGZvciBhbGwgY29uc3RydWN0
b3Igb2JqZWN0cyBpbiB0aGUgSlNDIGJpbmRpbmdzLgotY2xhc3MgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgOiBwdWJsaWMgSlNET01PYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNET01PYmpl
Y3QgQmFzZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpJbXBs
ZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERh
dGE7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYs
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwotCi1wcm90ZWN0ZWQ6Ci0gICAg
RE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYp
OwotCi0gICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKLSAgICBz
dGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBKU0M6OkNhbGxEYXRhJik7
Ci19OwotCi1jbGFzcyBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCA6IHB1YmxpYyBET01D
b25zdHJ1Y3Rvck9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9i
amVjdCBCYXNlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmpl
Y3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7Ci0KLSAgICBK
U0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOwotICAgIHZvaWQgc2V0SW5pdGlh
bGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKLQotcHJpdmF0ZToKLSAg
ICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6ZUZ1bmN0aW9u
OwotfTsKLQotRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKLURP
TVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci1ET01XaW5kb3cmIGZp
cnN0RE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci0KIFdFQkNPUkVfRVhQT1JUIEpTQzo6RW5j
b2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CiBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUpOwogCkBAIC0xNDcsNDcgKzc4LDYgQEAgV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNW
YWx1ZSByZWplYwogV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9t
aXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiwgY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7CiBXRUJDT1JFX0VYUE9SVCBKU0M6
OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5h
bWUpOwogCi1XRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0
dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKLVdFQkNPUkVf
RVhQT1JUIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVj
dCYsIEpTQzo6U3RydWN0dXJlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKLQotdGVtcGxhdGU8
dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3RydWN0dXJlKEpT
Qzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNs
YXNzPiBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNT
dGF0ZSopOwotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTT2JqZWN0KiBn
ZXRET01Qcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLQotdm9pZCBj
YWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNP
YmplY3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBKU0NsYXNzPiBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9i
amVjdCYpOwotCi1KU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJX
b3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKLXZvaWQqIHdyYXBwZXJLZXkoSlNDOjpBcnJheUJ1
ZmZlciopOwotCi1KU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVy
V29ybGQmLCB2b2lkKik7Ci1KU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01X
cmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqKTsKLUpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0
SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKik7
Ci0KLWJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwg
SlNET01PYmplY3QqLCBKU0M6OldlYWtIYW5kbGVPd25lciopOwotYm9vbCBzZXRJbmxpbmVDYWNo
ZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9NT2JqZWN0
KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKTsKLWJvb2wgc2V0
SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKiwg
SlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBl
ck93bmVyKTsKLQotYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxk
Jiwgdm9pZCosIEpTRE9NT2JqZWN0Kik7Ci1ib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3JhcHBlcik7
Ci1ib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFy
cmF5QnVmZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkJiwgRE9NQ2xhc3MmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUg
SlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBS
ZWY8RE9NQ2xhc3M+JiBvYmplY3QpIHsgcmV0dXJuIGdldENhY2hlZFdyYXBwZXIod29ybGQsIG9i
amVjdC5nZXQoKSk7IH0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFw
cGVyQ2xhc3M+IHZvaWQgY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNzKiwg
V3JhcHBlckNsYXNzKik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3Jh
cHBlckNsYXNzPiB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNz
KiwgV3JhcHBlckNsYXNzKik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUg
VD4gYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpIC0+IHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0
eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xh
c3MqPjo6dHlwZTsKLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBhdXRv
IGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6
dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNWYWx1ZSB3cmFwKEpT
Qzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBET01DbGFzcyYpOwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0NsYXNzJiBjYXN0VGhpc1ZhbHVlKEpTQzo6RXhlY1N0YXRl
Jik7Ci0KLXZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0KLWNv
bnN0IEpTQzo6SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKEpTQzo6Vk0mLCBj
b25zdCBKU0M6Okhhc2hUYWJsZSYgc3RhdGljVGFibGUpOwotCiBTdHJpbmcgcmV0cmlldmVFcnJv
ck1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlv
biwgSlNDOjpDYXRjaFNjb3BlJik7CiBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNjcmlwdCog
PSBudWxscHRyKTsKIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0ciwgRXhjZXB0
aW9uRGV0YWlscyogPSBudWxscHRyKTsKQEAgLTIwMCw1NzIgKzkwLDExIEBAIEpTQzo6SlNWYWx1
ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGUKIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOwogV0VCQ09SRV9F
WFBPUlQgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKIAotSlNDOjpKU1ZhbHVlIGpzU3RyaW5nKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgVVJMJik7IC8vIGVtcHR5IGlmIHRoZSBVUkwgaXMgbnVsbAot
Ci1KU0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IFN0cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCi1KU0M6OkpTVmFs
dWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFVSTCYpOyAvLyB1
bmRlZmluZWQgaWYgdGhlIFVSTCBpcyBudWxsCi0KLS8vIFNlZSBKYXZhU2NyaXB0Q29yZSBmb3Ig
ZXhwbGFuYXRpb246IFNob3VsZCBiZSB1c2VkIGZvciBhbnkgc3RyaW5nIHRoYXQgaXMgYWxyZWFk
eSBvd25lZCBieSBhbm90aGVyCi0vLyBvYmplY3QsIHRvIGxldCB0aGUgZW5naW5lIGtub3cgdGhh
dCBjb2xsZWN0aW5nIHRoZSBKU1N0cmluZyB3cmFwcGVyIGlzIHVubGlrZWx5IHRvIHNhdmUgbWVt
b3J5LgotSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpFeGVjU3RhdGUqLCBj
b25zdCBTdHJpbmcmKTsKLQotU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVy
dHlOYW1lKTsKLQotQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6
UHJvcGVydHlOYW1lKTsKLQotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVT
dHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLVdFQkNPUkVf
RVhQT1JUIFN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEpTQzo6
RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci1XRUJDT1JFX0VYUE9SVCBTdHJp
bmcgdmFsdWVUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLWlu
dDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUsIEpTQzo6RXhlY1N0YXRlKiwgYm9v
bCYgb2theSk7Ci0KLS8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbnZlcnQgdmFsdWVzIHRv
IGludGVnZXJzIGFzIHBlciB0aGUgV2ViSURMIHNwZWNpZmljYXRpb24uCi0vLyBUaGUgY29udmVy
c2lvbiBmYWlscyBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIG51bWJlciBv
ciwgaWYgRW5mb3JjZVJhbmdlIGlzIHNwZWNpZmllZCwKLS8vIHRoZSB2YWx1ZSBpcyBvdXRzaWRl
IHRoZSByYW5nZSBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlciB0eXBlLgotCi1XRUJDT1JFX0VY
UE9SVCBpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZF
bmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBP
UlQgdWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQzMl90IHRvVUlu
dDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVf
RVhQT1JUIGludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIGludDhfdCB0
b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9S
VCB1aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1X
RUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkNsYW1wKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDMyX3QgdG9JbnQzMkNs
YW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQz
Ml90IHRvVUludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09S
RV9FWFBPUlQgaW50NjRfdCB0b0ludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRDbGFtcChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDgoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDE2X3Qg
dG9JbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1
aW50MTZfdCB0b1VJbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JF
X0VYUE9SVCBpbnQ2NF90IHRvSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
V0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotCi1KU0M6OkpTVmFsdWUganNEYXRlKEpTQzo6RXhlY1N0YXRlKiwgZG91YmxlIHZh
bHVlKTsKLQotLy8gTmFOIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gYSBkYXRl
LgotZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKLQot
Ly8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBl
ciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCi1KU0M6OkpTT2JqZWN0KiB0b0pT
U2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgp
OwotCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgSlNDOjpBcnJheUJ1ZmZlciYpOwotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcmKTsKLUpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5
QnVmZmVyKik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9i
YWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyopOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJl
ZjxUPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWZQdHI8VD4mJik7Ci10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgVmVjdG9yPFQ+Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgVmVjdG9y
PFJlZlB0cjxUPj4mKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJik7Ci0KLUpTQzo6SlNWYWx1ZSB0
b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNW
YWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUJik7Ci1KU0M6OkpTVmFs
dWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJik7Ci0KLVJlZlB0cjxKU0M6OkFycmF5
QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlND
OjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDhB
cnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRv
UG9zc2libHlTaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRy
PEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYsIEpT
Qzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWlu
dDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBl
ZEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQx
NkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+
IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJl
ZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJBcnJheShKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9Qb3NzaWJs
eVNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLQotUmVmUHRyPEpT
Qzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mLCBK
U0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVkSW50OEFycmF5
KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9VbnNo
YXJlZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQz
MkFycmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJl
ZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6
OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5zaGFyZWRVaW50
OENsYW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQx
NkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1S
ZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mLCBK
U0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVkRmxvYXQz
MkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5
PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1R5cGU+IFZlY3RvcjxSZWY8VD4+IHRvUmVmTmF0
aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQg
Ym9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0K
LWVudW0gU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3Is
IExvZ1NlY3VyaXR5RXJyb3IsIFRocm93U2VjdXJpdHlFcnJvciB9OwotbmFtZXNwYWNlIEJpbmRp
bmdTZWN1cml0eSB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hlY2tTZWN1cml0eUZv
ck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCog
Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUKik7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhl
Y1N0YXRlJiwgRXhjZXB0aW9uT3I8VCo+JiYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEV4
Y2VwdGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2Vw
dGlvbk9yPFQmPiYmKTsKLSAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlND
OjpFeGVjU3RhdGUqLCBET01XaW5kb3cmLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9IExvZ1Nl
Y3VyaXR5RXJyb3IpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6
OkV4ZWNTdGF0ZSYsIERPTVdpbmRvdyYsIFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgYm9vbCBzaG91
bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSosIFNlY3VyaXR5UmVw
b3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7Ci0gICAgYm9vbCBzaG91bGRBbGxvd0Fj
Y2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUmLCBGcmFtZSYsIFN0cmluZyYgbWVzc2FnZSk7Ci0g
ICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIE5vZGUqKTsK
LX07Ci0KLXZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSk7Ci0KLVN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5
TmFtZSk7Ci1BdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotCi10ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3RoPiBK
U0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLQotCi1l
bnVtIGNsYXNzIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHsgVGhyb3csIFJldHVybkVhcmx5LCBS
ZWplY3RQcm9taXNlLCBBc3NlcnQgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4KLXN0
cnVjdCBCaW5kaW5nQ2FsbGVyIHsKLSAgICB1c2luZyBBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiA9
IGJvb2woSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlRocm93
U2NvcGUmKTsKLSAgICB1c2luZyBBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiA9IEpTQzo6SlNWYWx1
ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OlRocm93U2NvcGUmKTsKLSAgICB1c2lu
ZyBPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVj
U3RhdGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAgdXNpbmcgUHJvbWlzZU9w
ZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQ2xhc3MqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93U2NvcGUmKTsK
LQotICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RGb3JPcGVyYXRp
b24oSlNDOjpFeGVjU3RhdGUmKTsKLQotICAgIHRlbXBsYXRlPFByb21pc2VPcGVyYXRpb25DYWxs
ZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3Vs
ZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2U+Ci0gICAgc3Rh
dGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbFByb21pc2VPcGVyYXRpb24oSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNvbnN0IGNoYXIqIG9w
ZXJhdGlvbk5hbWUpCi0gICAgewotICAgICAgICBBU1NFUlQoc3RhdGUpOwotICAgICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAgICAg
YXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsKLSAgICAgICAgaWYg
KHNob3VsZFRocm93ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5MSUtF
TFkoIXRoaXNPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoVGhp
c1R5cGVFcnJvcihwcm9taXNlLmdldCgpLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3Bl
cmF0aW9uTmFtZSk7Ci0gICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKLSAgICAgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZvKCkpOwotICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2Rl
IHRvIHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KLSAgICAgICAgcmV0
dXJuIG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhpc09iamVjdCwgV1RGTW92ZShwcm9taXNlKSwg
dGhyb3dTY29wZSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8T3BlcmF0aW9uQ2FsbGVyRnVuY3Rp
b24gb3BlcmF0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVk
SlNWYWx1ZSBjYWxsT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgY2hhciog
b3BlcmF0aW9uTmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3RhdGUpOwotICAgICAgICBp
ZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCAmJiBVTkxJ
S0VMWSghdGhpc09iamVjdCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93
VGhpc1R5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NO
YW1lLCBvcGVyYXRpb25OYW1lKTsKLSAgICAgICAgICAgIC8vIEZvciBjdXN0b20gcHJvbWlzZS1y
ZXR1cm5pbmcgb3BlcmF0aW9ucwotICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRo
VGhpc1R5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRp
b25OYW1lKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7Ci0gICAgICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygpKTsK
LSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5lcmF0
ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNPYmplY3QuCi0gICAg
ICAgIHJldHVybiBvcGVyYXRpb25DYWxsZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUp
OwotICAgIH0KLQotICAgIHRlbXBsYXRlPEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9uIHNldHRlciwg
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6VGhyb3c+Ci0gICAgc3RhdGljIGJvb2wgc2V0QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9y
QXR0cmlidXRlKCpzdGF0ZSwgdGhpc1ZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCF0aGlz
T2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3I6OlRocm93KSA/IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dT
Y29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpIDogZmFsc2U7
Ci0gICAgICAgIHJldHVybiBzZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgSlNDOjpKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdGhyb3dTY29wZSk7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8QXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
ciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KLSAgICBzdGF0
aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBhdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWSghdGhpc09iamVjdCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5j
bGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOwotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlKQotICAgICAgICAgICAgICAg
IHJldHVybiByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6
OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBK
U0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzVW5kZWZpbmVkKCkpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVj
dCwgdGhyb3dTY29wZSkpOwotICAgIH0KLX07Ci0KIC8vIEV4Y2VwdGlvbk9yIGhhbmRsaW5nLgog
dm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBFeGNlcHRpb25Pcjx2b2lkPiYmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2Nv
cGUmLCBFeGNlcHRpb25PcjxUPiYmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBK
U0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKTsKIAotLy8gSW5saW5lIGZ1
bmN0aW9ucyBhbmQgdGVtcGxhdGUgZGVmaW5pdGlvbnMuCi0KLWlubGluZSBKU0M6OlN0cnVjdHVy
ZSogRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQot
ewotICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKLX0KLQotaW5saW5lIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpET01Db25zdHJ1Y3Rv
ck9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQotICAgIDogSlNET01PYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17
Ci19Ci0KLWlubGluZSBTdHJpbmcgRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNsYXNzTmFtZShjb25z
dCBKU09iamVjdCopCi17Ci0gICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRnVuY3Rpb24iKTsKLX0K
LQotaW5saW5lIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0OjpET01Db25zdHJ1Y3RvckpT
QnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0KQotICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBn
bG9iYWxPYmplY3QpCi17Ci19Ci0KLWlubGluZSBKU0M6OkpTRnVuY3Rpb24qIERPTUNvbnN0cnVj
dG9ySlNCdWlsdGluT2JqZWN0Ojppbml0aWFsaXplRnVuY3Rpb24oKQotewotICAgIHJldHVybiBt
X2luaXRpYWxpemVGdW5jdGlvbi5nZXQoKTsKLX0KLQotaW5saW5lIHZvaWQgRE9NQ29uc3RydWN0
b3JKU0J1aWx0aW5PYmplY3Q6OnNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiB2bSwgSlND
OjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAgICBtX2luaXRpYWxpemVGdW5jdGlvbi5zZXQo
dm0sIHRoaXMsICZmdW5jdGlvbik7Ci19Ci0KLWlubGluZSBKU0RPTUdsb2JhbE9iamVjdCogZGVw
cmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICAvLyBGSVhNRTogQ2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2luZyB0
aGUgZ2xvYmFsIG9iamVjdAotICAgIC8vIGZyb20gd2hpY2ggdGhlIG9iamVjdCBpcyBiZWluZyBj
cmVhdGVkLCBpbnN0ZWFkIG9mIGFzc3VtaW5nIHRoZSBsZXhpY2FsIG9uZS4KLSAgICAvLyBlLmcu
IHN1YmZyYW1lLmRvY3VtZW50LmJvZHkgc2hvdWxkIHVzZSB0aGUgc3ViZnJhbWUncyBnbG9iYWwg
b2JqZWN0LCBub3QgdGhlIGxleGljYWwgb25lLgotICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3RydWN0dXJlKiBnZXRET01T
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17
Ci0gICAgaWYgKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYWNoZWRET01TdHJ1Y3R1
cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmluZm8oKSkpCi0gICAgICAgIHJldHVybiBz
dHJ1Y3R1cmU7Ci0gICAgcmV0dXJuIGNhY2hlRE9NU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgV3Jh
cHBlckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFz
czo6Y3JlYXRlUHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSksIFdyYXBwZXJDbGFzczo6aW5m
bygpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpT
dHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgd3JvbmcuIEl0IHVzZXMgdGhlIHdy
b25nIGdsb2JhbCBvYmplY3QgZm9yIGNyZWF0aW5nIHRoZSBwcm90b3R5cGUgc3RydWN0dXJlLgot
ICAgIHJldHVybiBnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihleGVjLT52bSgpLCAqZGVw
cmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldERPTVByb3RvdHlw
ZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAg
IHJldHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oYXNPYmplY3QoZ2V0RE9NU3RydWN0
dXJlPFdyYXBwZXJDbGFzcz4odm0sICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGds
b2JhbE9iamVjdCkpLT5zdG9yZWRQcm90b3R5cGUoKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0aW4oSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlvbiwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBKU0M6OkpTT2JqZWN0KiBv
YmplY3QgPSBKU0NsYXNzOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpTQ2xhc3M+KGdsb2JhbE9i
amVjdC52bSgpLCBnbG9iYWxPYmplY3QpLCAmZ2xvYmFsT2JqZWN0KTsKLSAgICBjYWxsRnVuY3Rp
b25XaXRoQ3VycmVudEFyZ3VtZW50cyhzdGF0ZSwgKm9iamVjdCwgaW5pdGlhbGl6ZUZ1bmN0aW9u
KTsKLSAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsKLX0KLQotaW5saW5l
IEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiB3b3Js
ZCwgSlNDOjpBcnJheUJ1ZmZlciopCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlcio+KHdvcmxkLnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci5n
ZXQoKSktPndyYXBwZXJPd25lcigpOwotfQotCi1pbmxpbmUgdm9pZCogd3JhcHBlcktleShKU0M6
OkFycmF5QnVmZmVyKiBkb21PYmplY3QpCi17Ci0gICAgcmV0dXJuIGRvbU9iamVjdDsKLX0KLQot
aW5saW5lIEpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYsIHZvaWQqKSB7IHJldHVybiBudWxscHRyOyB9Ci1pbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNo
ZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCosIEpTQzo6V2Vh
a0hhbmRsZU93bmVyKikgeyByZXR1cm4gZmFsc2U7IH0KLWlubGluZSBib29sIGNsZWFySW5saW5l
Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqKSB7IHJl
dHVybiBmYWxzZTsgfQotCi1pbmxpbmUgSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QpCi17
Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gZG9tT2JqZWN0LT53cmFwcGVyKCk7Ci19Ci0KLWlubGluZSBKU0M6OkpTQXJyYXlC
dWZmZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlND
OjpBcnJheUJ1ZmZlciogYnVmZmVyKQotewotICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZlci0+bV93cmFwcGVyLmdldCgp
OwotfQotCi1pbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTU9iamVjdCogd3JhcHBl
ciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcikKLXsKLSAgICBpZiAoIXdvcmxk
LmlzTm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkb21PYmplY3QtPnNldFdy
YXBwZXIod3JhcHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1pbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYg
d29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3
cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKQotewotICAgIGlmICgh
d29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRvbU9iamVjdC0+
bV93cmFwcGVyID0gSlNDOjpXZWFrPEpTQzo6SlNBcnJheUJ1ZmZlcj4od3JhcHBlciwgd3JhcHBl
ck93bmVyLCAmd29ybGQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBjbGVh
cklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBh
YmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyKQotewotICAgIGlmICghd29ybGQu
aXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRvbU9iamVjdC0+Y2xlYXJX
cmFwcGVyKHdyYXBwZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBjbGVh
cklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1
ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIpCi17Ci0gICAgaWYg
KCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgd2Vha0NsZWFy
KGRvbU9iamVjdC0+bV93cmFwcGVyLCB3cmFwcGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNo
ZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzJiBkb21PYmplY3QpCi17
Ci0gICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCAm
ZG9tT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIHdvcmxkLm1f
d3JhcHBlcnMuZ2V0KHdyYXBwZXJLZXkoJmRvbU9iamVjdCkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCBjYWNoZVdy
YXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgV3JhcHBl
ckNsYXNzKiB3cmFwcGVyKQotewotICAgIEpTQzo6V2Vha0hhbmRsZU93bmVyKiBvd25lciA9IHdy
YXBwZXJPd25lcih3b3JsZCwgZG9tT2JqZWN0KTsKLSAgICBpZiAoc2V0SW5saW5lQ2FjaGVkV3Jh
cHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyLCBvd25lcikpCi0gICAgICAgIHJldHVybjsK
LSAgICB3ZWFrQWRkKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwgSlND
OjpXZWFrPEpTQzo6SlNPYmplY3Q+KHdyYXBwZXIsIG93bmVyLCAmd29ybGQpKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZv
aWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9i
amVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQotewotICAgIGlmIChjbGVhcklubGluZUNhY2hl
ZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCi0gICAgICAgIHJldHVybjsKLSAg
ICB3ZWFrUmVtb3ZlKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwgd3Jh
cHBlcik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBpbmxp
bmUgYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJl
ZjxUPiYmIGRvbU9iamVjdCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1l
PERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCi17Ci0gICAgdXNpbmcgV3JhcHBlckNs
YXNzID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3Jh
cHBlckNsYXNzOwotCi0gICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+
d29ybGQoKSwgZG9tT2JqZWN0KSk7Ci0gICAgYXV0byogZG9tT2JqZWN0UHRyID0gZG9tT2JqZWN0
LnB0cigpOwotICAgIGF1dG8qIHdyYXBwZXIgPSBXcmFwcGVyQ2xhc3M6OmNyZWF0ZShnZXRET01T
dHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihnbG9iYWxPYmplY3QtPnZtKCksICpnbG9iYWxPYmplY3Qp
LCBnbG9iYWxPYmplY3QsIFdURk1vdmUoZG9tT2JqZWN0KSk7Ci0gICAgY2FjaGVXcmFwcGVyKGds
b2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0UHRyLCB3cmFwcGVyKTsKLSAgICByZXR1cm4g
d3JhcHBlcjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlu
bGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19z
YW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCi17Ci0gICAgcmV0dXJuIGNyZWF0
ZVdyYXBwZXI8RE9NQ2xhc3M+KGdsb2JhbE9iamVjdCwgc3RhdGljX3JlZmVyZW5jZV9jYXN0PERP
TUNsYXNzPihXVEZNb3ZlKGRvbU9iamVjdCkpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9N
Q2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERPTUNsYXNzJiBkb21PYmplY3QpCi17Ci0g
ICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29y
bGQoKSwgZG9tT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIHRv
SlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgUmVmPERPTUNsYXNzPihkb21PYmpl
Y3QpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQ2xhc3MmIGNh
c3RUaGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQotewotICAgIGF1dG8gdGhpc1ZhbHVl
ID0gc3RhdGUudGhpc1ZhbHVlKCk7Ci0gICAgYXV0byBjYXN0ZWRUaGlzID0ganNEeW5hbWljRG93
bmNhc3Q8SlNDbGFzcyo+KHN0YXRlLnZtKCksIHRoaXNWYWx1ZSk7Ci0gICAgQVNTRVJUKGNhc3Rl
ZFRoaXMpOwotICAgIHJldHVybiAqY2FzdGVkVGhpczsKLX0KLQotaW5saW5lIGludDMyX3QgZmlu
aXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBi
b29sJiBva2F5KQotewotICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcihleGVjKTsK
LSAgICBva2F5ID0gc3RkOjppc2Zpbml0ZShudW1iZXIpOwotICAgIHJldHVybiBKU0M6OnRvSW50
MzIobnVtYmVyKTsKLX0KLQotLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMg
YSBzZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCi1p
bmxpbmUgSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpCi17Ci0gICAgSlNDOjpWTSYgdm0g
PSBleGVjLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0KCk7Ci0gICAgaWYg
KCFvYmplY3QpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIEpTQzo6SlNWYWx1ZSBsZW5n
dGhWYWx1ZSA9IG9iamVjdC0+Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotCi0gICAgaWYgKGxl
bmd0aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5
cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQot
ICAgIGxlbmd0aCA9IGxlbmd0aFZhbHVlLnRvVUludDMyKCZleGVjKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLWlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXImIGJ1ZmZlcikKLXsKLSAgICBp
ZiAoYXV0byByZXN1bHQgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwg
YnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIC8vIFRoZSBKU0FycmF5QnVm
ZmVyOjpjcmVhdGUgZnVuY3Rpb24gd2lsbCByZWdpc3RlciB0aGUgd3JhcHBlciBpbiBmaW5pc2hD
cmVhdGlvbi4KLSAgICByZXR1cm4gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUtPnZt
KCksIGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYnVmZmVyLnNoYXJpbmdNb2Rl
KCkpLCAmYnVmZmVyKTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5
QnVmZmVyVmlldyYgdmlldykKLXsKLSAgICByZXR1cm4gdmlldy53cmFwKHN0YXRlLCBnbG9iYWxP
YmplY3QpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyKiBi
dWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgp
OwotICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICpidWZmZXIpOwotfQotCi1p
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotewot
ICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgcmV0dXJu
IHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKnZpZXcpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIHB0cikKLXsKLSAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+JiYgcHRyKQotewotICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VD4mIHZlY3Rv
cikKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpTQXJyYXkqIGFycmF5
ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKLSAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXJyYXktPnB1
dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0p
KTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwot
ICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mIHZlY3RvcikKLXsKLSAg
ICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3Ry
dWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXJyYXktPnB1dERpcmVjdElu
ZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0uZ2V0KCkpKTsK
LSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwotICAg
IH0KLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVO
YW1lJiBwcml2YXRlTmFtZSkKLXsKLSAgICByZXR1cm4gSlNDOjpTeW1ib2w6OmNyZWF0ZShleGVj
LT52bSgpLCBwcml2YXRlTmFtZS51aWQoKSk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9K
U0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0
KCZzdGF0ZSwgdmFsdWUsIGZhbHNlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
Y3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9i
amVjdCwgdmFsdWUpLCBmYWxzZSk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJh
dG9yRW5kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlSXRlcmF0
b3JSZXN1bHRPYmplY3QoJnN0YXRlLCBKU0M6OmpzVW5kZWZpbmVkKCksIHRydWUpOwotfQotCi1p
bmxpbmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlC
dWZmZXJWaWV3KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byog
d3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0PEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqPih2bSwg
dmFsdWUpOwotICAgIGlmICghd3JhcHBlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIHdyYXBwZXItPnBvc3NpYmx5U2hhcmVkSW1wbCgpOwotfQotCi1pbmxpbmUgUmVmUHRy
PEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byByZXN1bHQgPSB0b1Bvc3NpYmx5
U2hhcmVkQXJyYXlCdWZmZXJWaWV3KHZtLCB2YWx1ZSk7Ci0gICAgaWYgKCFyZXN1bHQgfHwgcmVz
dWx0LT5pc1NoYXJlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1pbmxpbmUgUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVk
SW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6
dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDhBZGFwdG9yPih2bSwgdmFs
dWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZElu
dDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0
b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFwdG9yPih2bSwgdmFs
dWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZElu
dDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0
b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFwdG9yPih2bSwgdmFs
dWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVp
bnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0
b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwgdmFs
dWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlT
aGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7
IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENs
YW1wZWRBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2QXJy
YXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlND
OjpVaW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDMy
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpVaW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6Rmxv
YXQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVk
VmlldzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpT
Qzo6RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mIHZt
LCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2
ZVR5cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci0KLWlubGluZSBS
ZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3
PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQx
NkFycmF5PiB0b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQxNkFk
YXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Vu
c2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Vuc2hhcmVkVWludDhB
cnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5z
aGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlu
bGluZSBSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xhbXBl
ZEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9V
bnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1
ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNoYXJlZFVpbnQxNkFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNo
YXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlu
bGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2
ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQ
dHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0s
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRW
aWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlND
OjpGbG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpT
Qzo6RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgSlNUPiBpbmxpbmUgVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBKU0M6OlZNJiB2
bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwotCi0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93U2VxdWVuY2VU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAg
ICBWZWN0b3I8UmVmPFQ+PiByZXN1bHQ7Ci0gICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCB2
YWx1ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6
SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLQotICAgICAgICBpZiAoanNWYWx1ZS5pbmhlcml0cyh2bSwgSlNUOjppbmZvKCkp
KSB7Ci0gICAgICAgICAgICBhdXRvKiBvYmplY3QgPSBKU1Q6OnRvV3JhcHBlZCh2bSwganNWYWx1
ZSk7Ci0gICAgICAgICAgICBBU1NFUlQob2JqZWN0KTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoKm9iamVjdCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhyb3dBcnJheUVsZW1l
bnRUeXBlRXJyb3IoKnN0YXRlLCBzY29wZSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotaW5saW5lIFN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSk7
Ci0gICAgcmV0dXJuIHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFtZS51aWQoKSA6IHBy
b3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7Ci19Ci0KLWlubGluZSBBdG9taWNTdHJpbmcgcHJvcGVy
dHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewot
ICAgIHJldHVybiBBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1l
LnVpZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci19Ci0KLXRlbXBsYXRlPEpTQzo6
TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpT
VmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17
Ci0gICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRl
KGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9wZXJ0
eU5hbWUucHVibGljTmFtZSgpLCBuYXRpdmVGdW5jdGlvbikpOwotfQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCiB7CkBAIC03OTgsMjgg
KzEyNyw0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUKICAgICBy
ZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIEJp
bmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBUJiBub2RlKQotewotICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwg
Jm5vZGUpID8gJm5vZGUgOiBudWxscHRyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgVCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIFQqIG5vZGUpCi17Ci0gICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2Rl
KHN0YXRlLCBub2RlKSA/IG5vZGUgOiBudWxscHRyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZv
ck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb25PcjxUKj4mJiB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5yZWxl
YXNlRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGNoZWNrU2VjdXJpdHlGb3JOb2RlKHN0YXRlLCB2
YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9k
ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQmPiYmIHZhbHVlKQotewotICAg
IGlmICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVhc2VF
eGNlcHRpb24oKTsKLSAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIHZhbHVl
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShy
ZXZpc2lvbiAyMTEzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRE9N
V2luZG93LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIKICNpbmNsdWRlICJKU0RP
TUdsb2JhbE9iamVjdFRhc2suaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2lu
Y2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgpAQCAtMjg2LDYgKzI4Nyw1NCBAQCBKU0RP
TVdpbmRvdyogdG9KU0RPTVdpbmRvdyhKU0M6OlZNJiB2bSwgCiAgICAgcmV0dXJuIDA7CiB9CiAK
K0RPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBjbGFz
cyBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEdl
dENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgU3RhY2tW
aXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSkgeworICAg
ICAgICAgICAgICAgIG1faGFzU2tpcHBlZEZpcnN0RnJhbWUgPSB0cnVlOworICAgICAgICAgICAg
ICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoYXV0byogY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCkpCisgICAg
ICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHZpc2l0b3ItPmNhbGxl
ZSgpKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ2FsbGVlIGlzIG5vdCBhbiBvYmplY3Qg
aWYgdGhlIGNhbGxlciBpcyBXZWIgQXNzZW1ibHkuCisgICAgICAgICAgICAgICAgLy8gRmlndXJl
IG91dCB3aGF0IHRvIGRvIGhlcmUuIFdlIGNhbiBwcm9iYWJseSBnZXQgdGhlIGdsb2JhbCBvYmpl
Y3QKKyAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSB0b3AtbW9zdCBXYXNtIEluc3RhbmNlLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzIxCisgICAgICAgICAg
ICAgICAgaWYgKHZpc2l0b3ItPmNhbGxlZSgpLT5pc09iamVjdCgpKQorICAgICAgICAgICAgICAg
ICAgICBtX2dsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxlZSgp
KS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gU3Rh
Y2tWaXNpdG9yOjpEb25lOworICAgICAgICB9CisKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0OyB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBtdXRhYmxlIGJvb2wgbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSB7IGZhbHNl
IH07CisgICAgICAgIG11dGFibGUgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0IHsgbnVs
bHB0ciB9OworICAgIH07CisKKyAgICBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yIGl0ZXI7
CisgICAgZXhlYy0+aXRlcmF0ZShpdGVyKTsKKyAgICByZXR1cm4gaXRlci5nbG9iYWxPYmplY3Qo
KSA/IGFzSlNET01XaW5kb3coaXRlci5nbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKSA6IGZpcnN0
RE9NV2luZG93KGV4ZWMpOworfQorCitET01XaW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKS0+d3JhcHBlZCgpOworfQorCitET01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT52bUVudHJ5
R2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCk7Cit9CisKIHZvaWQgSlNET01XaW5kb3dCYXNlOjpm
aXJlRnJhbWVDbGVhcmVkV2F0Y2hwb2ludHNGb3JXaW5kb3coRE9NV2luZG93KiB3aW5kb3cpCiB7
CiAgICAgSlNDOjpWTSYgdm0gPSBjb21tb25WTSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHJldmlzaW9uIDIxMTM4OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC05Nyw0ICs5Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBKU0RPTVdpbmRvdyogdG9K
U0RPTVdpbmRvdyhGcmFtZSosIERPTVdyYXBwZXJXb3JsZCYpOwogICAgIFdFQkNPUkVfRVhQT1JU
IEpTRE9NV2luZG93KiB0b0pTRE9NV2luZG93KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogCisg
ICAgRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKKyAgICBET01X
aW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworICAgIERPTVdpbmRvdyYg
Zmlyc3RET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93Q3Vz
dG9tLmNwcAkocmV2aXNpb24gMjExMzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUg
IkhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiCiAjaW5j
bHVkZSAiSlNFdmVudC5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUg
IkpTSFRNTEF1ZGlvRWxlbWVudC5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dQcm9wZXJ0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCShyZXZpc2lvbiAyMTEzODkpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJKU0RPTUJpbmRpbmdTZWN1cml0eS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5oIgog
I2luY2x1ZGUgIkpTRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTSFRNTENvbGxlY3Rpb24uaCIKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXJDYWNoZS5j
cHAJKHJldmlzaW9uIDIxMTM1MykJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmNwcDoyMTEzNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdyYXBwZXJDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDM0IEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTEsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxz
YW1Ad2Via2l0Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgTWljaGFlbCBQcnVldHQgPG1p
Y2hhZWxANjhrLm9yZz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKworI2luY2x1ZGUgIkNhY2hl
ZFNjcmlwdC5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCisjaW5jbHVkZSAiRE9NQ29uc3RydWN0
b3JXaXRoRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uSGVhZGVycy5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2Vw
dGlvbi5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgIkpTRE9NUHJvbWlz
ZS5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCisjaW5jbHVkZSAiSlNFeGNlcHRp
b25CYXNlLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDxieXRlY29k
ZS9Db2RlQmxvY2suaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+Cisj
aW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0RhdGVJbnN0YW5jZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0Vycm9ySGFuZGxpbmdTY29wZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJy
b3JJbnN0YW5jZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+CisjaW5jbHVkZSA8
cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9u
Lmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNp
bmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKK3VzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU1RBVElDX0FTU0VSVF9JU19U
UklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yT2JqZWN0KTsKK1NUQVRJQ19BU1NF
UlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCk7
CisKK3ZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5h
bWUpCit7CisgICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwor
fQorCitKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBT
dHJpbmcmIHMpCit7CisgICAgaWYgKHMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc051bGwo
KTsKKyAgICByZXR1cm4ganNPd25lZFN0cmluZyhleGVjLCBzKTsKK30KKworSlNWYWx1ZSBqc1N0
cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQoreworICAg
IGlmIChzLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1
cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcyk7Cit9CisKK0pTVmFsdWUganNTdHJpbmcoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICByZXR1cm4ganNTdHJpbmdXaXRo
Q2FjaGUoZXhlYywgdXJsLnN0cmluZygpKTsKK30KKworSlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZp
bmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCit7CisgICAgaWYgKHVybC5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzU3RyaW5n
V2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5n
IHN0cmluZ1RvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlLCBTdHJpbmcmJiBzdHJpbmcpCit7CisgICAgaWYgKCFzdHJpbmcuY29udGFpbnNPbmx5TGF0
aW4xKCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KKworU3RyaW5nIGlk
ZW50aWZpZXJUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnRpZmllcikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSBpZGVudGlm
aWVyLnN0cmluZygpOworICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3RhdGUsIHNjb3Bl
LCBXVEZNb3ZlKHN0cmluZykpOworfQorCitTdHJpbmcgdmFsdWVUb0J5dGVTdHJpbmcoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBz
dHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisKKyAgICByZXR1cm4gc3RyaW5nVG9CeXRlU3RyaW5nKHN0YXRlLCBz
Y29wZSwgV1RGTW92ZShzdHJpbmcpKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGhhc1VucGFp
cmVkU3Vycm9nYXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQoreworICAgIC8vIEZhc3QgcGF0aCBmb3Ig
OC1iaXQgc3RyaW5nczsgdGhleSBjYW4ndCBoYXZlIGFueSBzdXJyb2dhdGVzLgorICAgIGlmIChz
dHJpbmcuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGF1dG8gY29k
ZVBvaW50IDogc3RyaW5nLmNvZGVQb2ludHMoKSkgeworICAgICAgICBpZiAoVV9JU19TVVJST0dB
VEUoY29kZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvVVNWU3RyaW5nKFN0
cmluZyYmIHN0cmluZykKK3sKKyAgICAvLyBGYXN0IHBhdGggZm9yIHRoZSBjYXNlIHdoZXJlIHRo
ZXJlIGFyZSBubyB1bnBhaXJlZCBzdXJyb2dhdGVzLgorICAgIGlmICghaGFzVW5wYWlyZWRTdXJy
b2dhdGUoc3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIHN0cmluZzsKKworICAgIC8vIFNsb3cgcGF0
aDogaHR0cDovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tb2J0YWluLXVuaWNvZGUKKyAg
ICAvLyBSZXBsYWNlcyB1bnBhaXJlZCBzdXJyb2dhdGVzIHdpdGggdGhlIHJlcGxhY2VtZW50IGNo
YXJhY3Rlci4KKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNh
cGFjaXR5KHN0cmluZy5sZW5ndGgoKSk7CisgICAgU3RyaW5nVmlldyB2aWV3IHsgc3RyaW5nIH07
CisgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHZpZXcuY29kZVBvaW50cygpKSB7CisgICAgICAg
IGlmIChVX0lTX1NVUlJPR0FURShjb2RlUG9pbnQpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChyZXBsYWNlbWVudENoYXJhY3Rlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoY29kZVBvaW50KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygp
OworfQorCitTdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYsIGNvbnN0IElk
ZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgU3RyaW5nIHN0cmluZyA9IGlkZW50aWZpZXIu
c3RyaW5nKCk7CisgICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7
Cit9CisKK1N0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZT
dHJpbmcoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisg
ICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK0pTVmFs
dWUganNEYXRlKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlKQoreworICAgIHJldHVybiBE
YXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOworfQorCitkb3VibGUgdmFsdWVUb0RhdGUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc051bWJlcigp
KQorICAgICAgICByZXR1cm4gdmFsdWUuYXNOdW1iZXIoKTsKKyAgICBpZiAoIXZhbHVlLmluaGVy
aXRzKGV4ZWMtPnZtKCksIERhdGVJbnN0YW5jZTo6aW5mbygpKSkKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PERhdGVJbnN0YW5jZSo+KHZhbHVlLnRvT2JqZWN0KGV4ZWMpKS0+aW50ZXJuYWxOdW1i
ZXIoKTsKK30KKwordm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGV4Y2VwdGlvblZhbHVlLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKK3sKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hv
bGRpbmdBUElMb2NrKCkpOworICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpzRHluYW1pY0Rvd25jYXN0
PEpTQzo6RXhjZXB0aW9uKj4odm0sIGV4Y2VwdGlvblZhbHVlKTsKKyAgICBpZiAoIWV4Y2VwdGlv
bikgeworICAgICAgICBleGNlcHRpb24gPSB2bS5sYXN0RXhjZXB0aW9uKCk7CisgICAgICAgIGlm
ICghZXhjZXB0aW9uKQorICAgICAgICAgICAgZXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246OmNy
ZWF0ZShleGVjLT52bSgpLCBleGNlcHRpb25WYWx1ZSwgSlNDOjpFeGNlcHRpb246OkRvTm90Q2Fw
dHVyZVN0YWNrKTsKKyAgICB9CisKKyAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
LCBjYWNoZWRTY3JpcHQpOworfQorCitTdHJpbmcgcmV0cmlldmVFcnJvck1lc3NhZ2UoRXhlY1N0
YXRlJiBzdGF0ZSwgVk0mIHZtLCBKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2F0Y2hTY29wZSYgY2F0Y2hT
Y29wZSkKK3sKKyAgICBpZiAoYXV0byogZXhjZXB0aW9uQmFzZSA9IHRvRXhjZXB0aW9uQmFzZSh2
bSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkJhc2UtPnRvU3RyaW5nKCk7
CisKKyAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE1MDg3PiBXZWIgSW5zcGVj
dG9yOiBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24gc2hvdWxkIG5vdCBldmFsdWF0ZSBKYXZhU2Ny
aXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKKyAgICAvLyBJZiB0aGlzIGlzIGEgY3VzdG9tIGV4Y2Vw
dGlvbiBvYmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5IGFuZCBnZXQgYSBuaWNlIHN0
cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4KKyAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlOworICAgIGlmIChhdXRvKiBlcnJvciA9IGpzRHluYW1pY0Rvd25jYXN0PEVycm9ySW5z
dGFuY2UqPih2bSwgZXhjZXB0aW9uKSkKKyAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3ItPnNh
bml0aXplZFRvU3RyaW5nKCZzdGF0ZSk7CisgICAgZWxzZQorICAgICAgICBlcnJvck1lc3NhZ2Ug
PSBleGNlcHRpb24udG9XVEZTdHJpbmcoJnN0YXRlKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2xl
YXIgYW55IG5ldyBleGNlcHRpb24gdGhhdCBtYXkgYmUgdGhyb3duIGluIHRoZSB0b1N0cmluZygp
IGNhbGwgYWJvdmUuCisgICAgLy8gcmVwb3J0RXhjZXB0aW9uKCkgaXMgbm90IHN1cHBvc2VkIHRv
IGJlIG1ha2luZyBuZXcgZXhjZXB0aW9ucy4KKyAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgdm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIGVycm9yTWVzc2Fn
ZTsKK30KKwordm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0M6OkV4Y2Vw
dGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCwgRXhjZXB0aW9uRGV0
YWlscyogZXhjZXB0aW9uRGV0YWlscykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgIFJFTEVBU0VfQVNT
RVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGlmIChpc1Rlcm1p
bmF0ZWRFeGVjdXRpb25FeGNlcHRpb24odm0sIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybjsK
KworICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkpOworCisgICAg
UmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zy
b21FeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFj
a1NpemVUb0NhcHR1cmUpKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgIHZtLmNs
ZWFyTGFzdEV4Y2VwdGlvbigpOworCisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KSk7CisgICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0RP
TVdpbmRvdyo+KHZtLCBnbG9iYWxPYmplY3QpKSB7CisgICAgICAgIGlmICghd2luZG93LT53cmFw
cGVkKCkuaXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaW50IGxpbmVOdW1iZXIgPSAwOworICAgIGludCBjb2x1bW5OdW1iZXIg
PSAwOworICAgIFN0cmluZyBleGNlcHRpb25Tb3VyY2VVUkw7CisgICAgaWYgKGNvbnN0IFNjcmlw
dENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbFN0YWNrLT5maXJzdE5vbk5hdGl2ZUNhbGxGcmFt
ZSgpKSB7CisgICAgICAgIGxpbmVOdW1iZXIgPSBjYWxsRnJhbWUtPmxpbmVOdW1iZXIoKTsKKyAg
ICAgICAgY29sdW1uTnVtYmVyID0gY2FsbEZyYW1lLT5jb2x1bW5OdW1iZXIoKTsKKyAgICAgICAg
ZXhjZXB0aW9uU291cmNlVVJMID0gY2FsbEZyYW1lLT5zb3VyY2VVUkwoKTsKKyAgICB9CisKKyAg
ICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gcmV0cmlldmVFcnJvck1lc3NhZ2UoKmV4ZWMsIHZtLCBl
eGNlcHRpb24tPnZhbHVlKCksIHNjb3BlKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKGVycm9y
TWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBleGNlcHRpb25Tb3VyY2VVUkwsIGV4
Y2VwdGlvbiwgY2FsbFN0YWNrLT5zaXplKCkgPyBjYWxsU3RhY2sgOiBudWxscHRyLCBjYWNoZWRT
Y3JpcHQpOworCisgICAgaWYgKGV4Y2VwdGlvbkRldGFpbHMpIHsKKyAgICAgICAgZXhjZXB0aW9u
RGV0YWlscy0+bWVzc2FnZSA9IGVycm9yTWVzc2FnZTsKKyAgICAgICAgZXhjZXB0aW9uRGV0YWls
cy0+bGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPmNv
bHVtbk51bWJlciA9IGNvbHVtbk51bWJlcjsKKyAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+c291
cmNlVVJMID0gZXhjZXB0aW9uU291cmNlVVJMOworICAgIH0KK30KKwordm9pZCByZXBvcnRDdXJy
ZW50RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBl
eGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigp
OworICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOworfQorCitzdGF0aWMgSlNW
YWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVj
LCBjb25zdCBTdHJpbmcqIG1lc3NhZ2UgPSBudWxscHRyKQoreworICAgIGlmICghZWMgfHwgZWMg
PT0gRXhpc3RpbmdFeGNlcHRpb25FcnJvcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisKKyAgICAvLyBGSVhNRTogSGFuZGxlIG90aGVyIFdlYklETCBleGNlcHRpb24gdHlwZXMuCisg
ICAgaWYgKGVjID09IFR5cGVFcnJvcikgeworICAgICAgICBpZiAoIW1lc3NhZ2UgfHwgbWVzc2Fn
ZS0+aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVjKTsK
KyAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAqbWVzc2FnZSk7CisgICAgfQor
CisgICAgaWYgKGVjID09IFJhbmdlRXJyb3IpIHsKKyAgICAgICAgaWYgKCFtZXNzYWdlIHx8IG1l
c3NhZ2UtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZUVycm9yKGV4
ZWMsIEFTQ0lJTGl0ZXJhbCgiQmFkIHZhbHVlIikpOworICAgICAgICByZXR1cm4gY3JlYXRlUmFu
Z2VFcnJvcihleGVjLCAqbWVzc2FnZSk7CisgICAgfQorCisgICAgaWYgKGVjID09IFN0YWNrT3Zl
cmZsb3dFcnJvcikKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVj
KTsKKworICAgIC8vIEZJWE1FOiBBbGwgY2FsbGVycyB0byBjcmVhdGVET01FeGNlcHRpb24gbmVl
ZCB0byBwYXNzIGluIHRoZSBjb3JyZWN0IGdsb2JhbCBvYmplY3QuCisgICAgLy8gRm9yIG5vdywg
d2UncmUgZ29pbmcgdG8gYXNzdW1lIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LiBXaGljaCBpcyB3
cm9uZyBpbiBjYXNlcyBsaWtlIHRoaXM6CisgICAgLy8gZnJhbWVzWzBdLmRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQobnVsbCwgbnVsbCk7IC8vIHRocm93cyBhbiBleGNlcHRpb24gd2hpY2ggc2hvdWxk
IGhhdmUgdGhlIHN1YmZyYW1lJ3MgcHJvdG90eXBlcy4KKyAgICBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKTsK
KworICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisKKyAgICBD
U3RyaW5nIG1lc3NhZ2VDU3RyaW5nOworICAgIGlmIChtZXNzYWdlKQorICAgICAgICBtZXNzYWdl
Q1N0cmluZyA9IG1lc3NhZ2UtPnV0ZjgoKTsKKyAgICBpZiAobWVzc2FnZSAmJiAhbWVzc2FnZS0+
aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEl0IGlzIHNhZmUgdG8gZG8gdGhpcyBiZWNhdXNlIHRo
ZSBjaGFyKiBjb250ZW50cyBvZiB0aGUgQ1N0cmluZyBhcmUgY29waWVkIGludG8gYSBuZXcgV1RG
OjpTdHJpbmcgYmVmb3JlIHRoZSBDU3RyaW5nIGlzIGRlc3Ryb3llZC4KKyAgICAgICAgZGVzY3Jp
cHRpb24uZGVzY3JpcHRpb24gPSBtZXNzYWdlQ1N0cmluZy5kYXRhKCk7CisgICAgfQorCisgICAg
SlNWYWx1ZSBlcnJvck9iamVjdDsKKyAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLnR5cGUpIHsKKyAg
ICBjYXNlIERPTUNvcmVFeGNlcHRpb25UeXBlOgorI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQorICAgIGNhc2UgSURCRGF0YWJhc2VFeGNlcHRpb25UeXBlOgorI2VuZGlmCisgICAgICAgIGVy
cm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIERPTUNvcmVFeGNlcHRpb246OmNy
ZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVFeGNlcHRp
b25UeXBlOgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBG
aWxlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBTUUxFeGNlcHRpb25UeXBlOgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCBTUUxFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFNWR0V4Y2VwdGlvblR5cGU6CisgICAgICAgIGVycm9yT2JqZWN0
ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFNWR0V4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0
aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWFBhdGhFeGNlcHRpb25UeXBlOgorICAg
ICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBYUGF0aEV4Y2VwdGlv
bjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAg
ICBBU1NFUlQoZXJyb3JPYmplY3QpOworICAgIGFkZEVycm9ySW5mbyhleGVjLCBhc09iamVjdChl
cnJvck9iamVjdCksIHRydWUpOworICAgIHJldHVybiBlcnJvck9iamVjdDsKK30KKworSlNWYWx1
ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVjLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgcmV0dXJuIGNyZWF0ZURPTUV4Y2VwdGlvbihl
eGVjLCBlYywgJm1lc3NhZ2UpOworfQorCitKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVj
U3RhdGUmIHN0YXRlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCit7CisgICAgcmV0dXJuIGNyZWF0
ZURPTUV4Y2VwdGlvbigmc3RhdGUsIGV4Y2VwdGlvbi5jb2RlKCksIGV4Y2VwdGlvbi5yZWxlYXNl
TWVzc2FnZSgpKTsKK30KKwordm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uJiYg
ZXhjZXB0aW9uKQoreworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAg
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVET01FeGNlcHRpb24oc3Rh
dGUsIFdURk1vdmUoZXhjZXB0aW9uKSkpOworfQorCitib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBKU1ZhbHVlIGFwcGx5TWV0
aG9kID0gb2JqZWN0LT5nZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnBy
b3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC5pdGVyYXRv
ciBwcm9wZXJ0eSBzaG91bGQgYmUgY2FsbGFibGUiKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgZmFsc2UpOworCisgICAgcmV0dXJuICFhcHBseU1ldGhvZC5pc1VuZGVmaW5lZCgp
OworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEV4
ZWNTdGF0ZSYgc3RhdGUsIEZyYW1lJiBmcmFtZSwgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlm
IChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsICZmcmFt
ZSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
bWVzc2FnZSA9IGZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vz
c0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRv
dyhFeGVjU3RhdGUmIHN0YXRlLCBET01XaW5kb3cmIGdsb2JhbE9iamVjdCwgU3RyaW5nJiBtZXNz
YWdlKQoreworICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01X
aW5kb3coJnN0YXRlLCBnbG9iYWxPYmplY3QsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIG1lc3NhZ2UgPSBnbG9iYWxPYmplY3QuY3Jvc3NEb21h
aW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSkpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiBmcmFt
ZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybjsKKyAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPnByaW50RXJyb3JNZXNz
YWdlKG1lc3NhZ2UpOworfQorCitTdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykK
K3sKKyAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5zdHJ1
Y3R1cmVzKE5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgcmV0dXJuIHN0cnVjdHVyZXMuZ2V0KGNs
YXNzSW5mbykuZ2V0KCk7Cit9CisKK1N0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvKQoreworICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtp
bmcoZ2xvYmFsT2JqZWN0LnZtKCkuaGVhcCwgZ2xvYmFsT2JqZWN0LmdjTG9jaygpKTsKKyAgICBK
U0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5zdHJ1Y3R1cmVzKGxv
Y2tlcik7CisgICAgQVNTRVJUKCFzdHJ1Y3R1cmVzLmNvbnRhaW5zKGNsYXNzSW5mbykpOworICAg
IHJldHVybiBzdHJ1Y3R1cmVzLnNldChjbGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
KGdsb2JhbE9iamVjdC52bSgpLCAmZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKS5pdGVyYXRvci0+
dmFsdWUuZ2V0KCk7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQzMl90IGtNYXhJbnQzMiA9IDB4N2Zm
ZmZmZmY7CitzdGF0aWMgY29uc3QgaW50MzJfdCBrTWluSW50MzIgPSAta01heEludDMyIC0gMTsK
K3N0YXRpYyBjb25zdCB1aW50MzJfdCBrTWF4VUludDMyID0gMHhmZmZmZmZmZlU7CitzdGF0aWMg
Y29uc3QgaW50NjRfdCBrSlNNYXhJbnRlZ2VyID0gMHgyMDAwMDAwMDAwMDAwMExMIC0gMTsgLy8g
Ml41MyAtIDEsIGxhcmdlc3QgaW50ZWdlciBleGFjdGx5IHJlcHJlc2VudGFibGUgaW4gRUNNQVNj
cmlwdC4KKworc3RhdGljIFN0cmluZyByYW5nZUVycm9yU3RyaW5nKGRvdWJsZSB2YWx1ZSwgZG91
YmxlIG1pbiwgZG91YmxlIG1heCkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiVmFsdWUgIiwg
U3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQodmFsdWUpLCAiIGlzIG91dHNpZGUgdGhl
IHJhbmdlIFsiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtaW4pLCAiLCAiLCBT
dHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtYXgpLCAiXSIpOworfQorCitzdGF0aWMg
ZG91YmxlIGVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgeCwgZG91YmxlIG1p
bmltdW0sIGRvdWJsZSBtYXhpbXVtKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHN0ZDo6aXNu
YW4oeCkgfHwgc3RkOjppc2luZih4KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUs
IHNjb3BlLCByYW5nZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIHggPSB0cnVuYyh4KTsKKyAgICBpZiAoeCA8IG1pbmltdW0g
fHwgeCA+IG1heGltdW0pIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwg
cmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICByZXR1cm4geDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1
Y3QgSW50VHlwZUxpbWl0cyB7Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVMaW1p
dHM8aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0IGludDhfdCBtaW5WYWx1ZSA9IC0xMjg7Cisg
ICAgc3RhdGljIGNvbnN0IGludDhfdCBtYXhWYWx1ZSA9IDEyNzsKKyAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAorfTsKKwordGVtcGxhdGUgPD4K
K3N0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgdWludDhf
dCBtYXhWYWx1ZSA9IDI1NTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1
ZXMgPSAyNTY7IC8vIDJeOAorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBJbnRUeXBlTGltaXRz
PGludDE2X3Q+IHsKKyAgICBzdGF0aWMgY29uc3Qgc2hvcnQgbWluVmFsdWUgPSAtMzI3Njg7Cisg
ICAgc3RhdGljIGNvbnN0IHNob3J0IG1heFZhbHVlID0gMzI3Njc7CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKK307CisKK3RlbXBsYXRl
IDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50MTZfdD4geworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBzaG9ydCBtYXhWYWx1ZSA9IDY1NTM1OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK3N0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24p
Cit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2lnbmVkPFQ+Ojp2
YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQg
Zm9yIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOworCisgICAgdHlwZWRlZiBJbnRUeXBlTGltaXRz
PFQ+IExpbWl0c1RyYWl0OworICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFk
eSBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCisgICAgaWYgKHZh
bHVlLmlzSW50MzIoKSkgeworICAgICAgICBpbnQzMl90IGQgPSB2YWx1ZS5hc0ludDMyKCk7Cisg
ICAgICAgIGlmIChkID49IExpbWl0c1RyYWl0OjptaW5WYWx1ZSAmJiBkIDw9IExpbWl0c1RyYWl0
OjptYXhWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKKyAgICAg
ICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAg
ICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAg
ICAgICAgICAgIHJldHVybiBkIDwgTGltaXRzVHJhaXQ6Om1pblZhbHVlID8gTGltaXRzVHJhaXQ6
Om1pblZhbHVlIDogTGltaXRzVHJhaXQ6Om1heFZhbHVlOworICAgICAgICB9CisgICAgICAgIGQg
JT0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VD4oZCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/IGQgLSBMaW1pdHNUcmFpdDo6bnVtYmVy
T2ZWYWx1ZXMgOiBkKTsKKyAgICB9CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisKKyAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24pIHsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0
YXRlLCB4LCBMaW1pdHNUcmFpdDo6bWluVmFsdWUsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7Cisg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICBy
ZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOworICAgIH0KKworICAgIGlm
IChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCisgICAgICAgIHJldHVybiAw
OworCisgICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7Cisg
ICAgeCA9IGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKTsKKworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxUPih4ID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8geCAtIExpbWl0c1Ry
YWl0OjpudW1iZXJPZlZhbHVlcyA6IHgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0
YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAg
IFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1ZSAm
JiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHVu
c2lnbmVkIGludGVncmFsIHR5cGVzIik7CisKKyAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4g
TGltaXRzVHJhaXQ7CisgICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEg
MzItYml0IHVuc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgorICAgIGlmICh2YWx1
ZS5pc1VJbnQzMigpKSB7CisgICAgICAgIHVpbnQzMl90IGQgPSB2YWx1ZS5hc1VJbnQzMigpOwor
ICAgICAgICBpZiAoZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOworICAgICAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAg
cmV0dXJuIExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRv
dWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCAwKTsKKworICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAg
ICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIExpbWl0c1RyYWl0OjptYXhWYWx1
ZSk7CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAg
ICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOworICAgIH0KKwor
ICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJl
ck9mVmFsdWVzKSk7Cit9CisKK2ludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50
OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlKTsKK30KKwordWludDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50
OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlKTsKK30KKworaW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUs
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKwordWlu
dDhfdCB0b1VJbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMu
b3JnL1RSL1dlYklETC8jZXMtYnl0ZQoraW50OF90IHRvSW50OChFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKK30KKworLy8g
aHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1vY3RldAordWludDhfdCB0b1VJbnQ4KEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJ
bnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCk7Cit9CisKK2ludDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4o
c3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZSk7Cit9CisKK3VpbnQxNl90IHRvVUludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0
YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2Up
OworfQorCitpbnQxNl90IHRvSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKwordWludDE2X3QgdG9V
SW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVy
biB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Q2xhbXApOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJ
REwvI2VzLXNob3J0CitpbnQxNl90IHRvSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQorCisvLyBodHRwOi8v
d3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLXNob3J0Cit1aW50MTZfdCB0b1VJbnQx
NihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxs
ZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1s
b25nCitpbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAg
ICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisgICAgcmV0
dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwga01pbkludDMyLCBrTWF4SW50MzIpOworfQorCitp
bnQzMl90IHRvSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7
CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0
ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxpbnQzMl90Pih4KTsKK30KKwordWludDMyX3QgdG9V
SW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2
YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAg
IGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25h
bih4KSA/IDAgOiBjbGFtcFRvPHVpbnQzMl90Pih4KTsKK30KKworLy8gaHR0cDovL3d3dy53My5v
cmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nCit1aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VS
YW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigp
OworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgs
IDAsIGtNYXhVSW50MzIpOworfQorCitpbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgZG91
YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIC1rSlNNYXhJbnRl
Z2VyLCBrSlNNYXhJbnRlZ2VyKTsKK30KKwordWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2Uo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtK
U01heEludGVnZXIpOworfQorCitpbnQ2NF90IHRvSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigm
c3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PGludDY0
X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAta0pTTWF4SW50ZWdlciks
IGtKU01heEludGVnZXIpKTsKK30KKwordWludDY0X3QgdG9VSW50NjRDbGFtcChFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0
PHVpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgMCksIGtKU01h
eEludGVnZXIpKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25n
LWxvbmcKK2ludDY0X3QgdG9JbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKworICAgIC8vIE1hcCBO
YU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1ZXMgbW9kdWxvIDJe
NjQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG47CisgICAgZG91YmxlVG9JbnRlZ2VyKHgsIG4p
OworICAgIHJldHVybiBuOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2Vz
LXVuc2lnbmVkLWxvbmctbG9uZwordWludDY0X3QgdG9VSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
CisKKyAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUg
dmFsdWVzIG1vZHVsbyAyXjY0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOworICAgIGRvdWJs
ZVRvSW50ZWdlcih4LCBuKTsKKyAgICByZXR1cm4gbjsKK30KKworY2xhc3MgR2V0Q2FsbGVyR2xv
YmFsT2JqZWN0RnVuY3RvciB7CitwdWJsaWM6CisgICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVu
Y3RvcigpID0gZGVmYXVsdDsKKworICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCko
U3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2hhc1Nr
aXBwZWRGaXJzdEZyYW1lKSB7CisgICAgICAgICAgICBtX2hhc1NraXBwZWRGaXJzdEZyYW1lID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGF1dG8qIGNvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygp
KQorICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdG9yLT5jYWxsZWUoKSk7
CisgICAgICAgICAgICAvLyBGSVhNRTogQ2FsbGVlIGlzIG5vdCBhbiBvYmplY3QgaWYgdGhlIGNh
bGxlciBpcyBXZWIgQXNzZW1ibHkuCisgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdG8g
ZG8gaGVyZS4gV2UgY2FuIHByb2JhYmx5IGdldCB0aGUgZ2xvYmFsIG9iamVjdAorICAgICAgICAg
ICAgLy8gZnJvbSB0aGUgdG9wLW1vc3QgV2FzbSBJbnN0YW5jZS4gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcyMQorICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNh
bGxlZSgpLT5pc09iamVjdCgpKQorICAgICAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0ganND
YXN0PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOworICAgIH0KKworICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVj
dDsgfQorCitwcml2YXRlOgorICAgIG11dGFibGUgYm9vbCBtX2hhc1NraXBwZWRGaXJzdEZyYW1l
IHsgZmFsc2UgfTsKKyAgICBtdXRhYmxlIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdCB7
IG51bGxwdHIgfTsKK307CisKK0RPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yIGl0ZXI7CisgICAgZXhl
Yy0+aXRlcmF0ZShpdGVyKTsKKyAgICByZXR1cm4gaXRlci5nbG9iYWxPYmplY3QoKSA/IGFzSlNE
T01XaW5kb3coaXRlci5nbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKSA6IGZpcnN0RE9NV2luZG93
KGV4ZWMpOworfQorCitET01XaW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KS0+d3JhcHBlZCgpOworfQorCitET01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT52bUVudHJ5R2xvYmFsT2Jq
ZWN0KCkpLT53cmFwcGVkKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjYW5BY2Nlc3NEb2N1
bWVudChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERvY3VtZW50KiB0YXJnZXREb2N1bWVudCwgU2Vj
dXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQoreworICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGlmICghdGFyZ2V0RG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIERP
TVdpbmRvdyYgYWN0aXZlID0gYWN0aXZlRE9NV2luZG93KHN0YXRlKTsKKworICAgIGlmIChhY3Rp
dmUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5jYW5BY2Nlc3ModGFyZ2V0RG9jdW1lbnQt
PnNlY3VyaXR5T3JpZ2luKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHN3aXRjaCAo
cmVwb3J0aW5nT3B0aW9uKSB7CisgICAgY2FzZSBUaHJvd1NlY3VyaXR5RXJyb3I6CisgICAgICAg
IHRocm93U2VjdXJpdHlFcnJvcigqc3RhdGUsIHNjb3BlLCB0YXJnZXREb2N1bWVudC0+ZG9tV2lu
ZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIExvZ1NlY3VyaXR5RXJyb3I6CisgICAgICAgIHByaW50RXJyb3JNZXNz
YWdlRm9yRnJhbWUodGFyZ2V0RG9jdW1lbnQtPmZyYW1lKCksIHRhcmdldERvY3VtZW50LT5kb21X
aW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yOgorICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5
OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRE9N
V2luZG93JiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikK
K3sKKyAgICByZXR1cm4gY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC5kb2N1bWVudCgp
LCByZXBvcnRpbmdPcHRpb24pOworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxs
b3dBY2Nlc3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRnJhbWUqIHRhcmdldCwgU2Vj
dXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQoreworICAgIHJldHVybiB0YXJn
ZXQgJiYgY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC0+ZG9jdW1lbnQoKSwgcmVwb3J0
aW5nT3B0aW9uKTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNz
VG9Ob2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgTm9kZSogdGFyZ2V0KQoreworICAgIHJldHVy
biAhdGFyZ2V0IHx8IGNhbkFjY2Vzc0RvY3VtZW50KCZzdGF0ZSwgJnRhcmdldC0+ZG9jdW1lbnQo
KSwgTG9nU2VjdXJpdHlFcnJvcik7Cit9CisgICAgCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdGhy
b3dUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVF
cnJvcigmc3RhdGUsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZCBhcHBl
bmRBcmd1bWVudE11c3RCZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCB1bnNpZ25lZCBhcmd1bWVu
dEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoIkFyZ3VtZW50ICIpOworICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGFyZ3VtZW50SW5kZXgg
KyAxKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAoJyIpOworICAgIGJ1aWxkZXIuYXBw
ZW5kKGFyZ3VtZW50TmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCInKSB0byAiKTsK
KyAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgeworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
InRoZSAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGNvbnN0cnVjdG9yIik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7CisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCcuJyk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZ1bmN0aW9uTmFtZSk7CisgICAgfQor
ICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG11c3QgYmUgIik7Cit9CisKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkK
K3sKKyAgICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRl
LmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBj
b250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6
OkVycm9yLCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5
ICciLCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VOYW1lLCAiIG9iamVj
dC4iKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKyAg
ICAKK3ZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkK
K3sKKyAgICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRl
LmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBj
b250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6
OkVycm9yLCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gc2V0IHByb3BlcnR5ICci
LCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VOYW1lLCAiIG9iamVjdC4i
KSk7Cit9CisKK3ZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0
aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpKTsKK30KKwordm9pZCB0aHJvd05vdFN1cHBv
cnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
Y29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
KyAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigm
c3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VS
UiwgJm1lc3NhZ2VTdHJpbmcpKTsKK30KKwordm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciog
bWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBTdHJpbmcg
bWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3Bl
LCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTlZBTElEX1NUQVRFX0VSUiwgJm1lc3NhZ2VT
dHJpbmcpKTsKK30KKwordm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7Cisg
ICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRl
LCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU0VDVVJJVFlfRVJSLCBtZXNzYWdl
KSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVk
IGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVu
Y3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIq
IGV4cGVjdGVkVmFsdWVzKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBhcHBl
bmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1
bmN0aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIm9uZSBvZjogIik7CisgICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRWYWx1ZXMpOwor
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJp
bmcoKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0
aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1
bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJn
dW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOwor
ICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYSBmdW5jdGlvbiIpOworICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Cit9CisKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNv
bnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1l
LCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKK3sK
KyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVp
bGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5hbWUs
IGZ1bmN0aW9uTmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJhbiBpbnN0YW5jZSBv
ZiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFR5cGUpOworICAgIHJldHVybiB0aHJv
d1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Cit9CisKK3Zv
aWQgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJJbnZhbGlkIEFycmF5IGVsZW1lbnQgdHlwZSIpKTsKK30KKwordm9pZCB0
aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJp
YnV0ZU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJv
cihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0
dHJpYnV0ZU5hbWUsICIgYXR0cmlidXRlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIiwgZXhwZWN0
ZWRUeXBlKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5
cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNv
bnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25zdCBj
aGFyKiBleHBlY3RlZFR5cGUpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiTWVtYmVyICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGRpY3Rp
b25hcnlOYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnLicpOworICAgIGJ1aWxkZXIuYXBwZW5k
KG1lbWJlck5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGlzIHJlcXVpcmVkIGFu
ZCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVk
VHlwZSk7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRl
ci50b1N0cmluZygpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9y
U2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKQor
eworICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoJnN0YXRlLCBzY29wZSwgY3JlYXRlUmVmZXJlbmNl
RXJyb3IoJnN0YXRlLCBtYWtlU3RyaW5nKGludGVyZmFjZU5hbWUsICIgY29uc3RydWN0b3IgYXNz
b2NpYXRlZCBleGVjdXRpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpKSk7Cit9CisKK3ZvaWQg
dGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpCit7CisgICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoIlZhbHVlIGlzIG5vdCBhIHNlcXVlbmNlIikpOworfQorCit2b2lkIHRocm93Tm9uRmlu
aXRlVHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7
CisgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJUaGUgcHJv
dmlkZWQgdmFsdWUgaXMgbm9uLWZpbml0ZSIpKTsKK30KKworU3RyaW5nIG1ha2VHZXR0ZXJUeXBl
RXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJp
YnV0ZU5hbWUpCit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1l
LCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgZ2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFu
Y2VzIG9mICIsIGludGVyZmFjZU5hbWUpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93
R2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFt
ZSkKK3sKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBtYWtlR2V0
dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7Cit9CisK
K0pTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBhdHRyaWJ1dGVOYW1lKQoreworICAgIHJldHVybiBjcmVhdGVSZWplY3RlZFByb21pc2VXaXRo
VHlwZUVycm9yKHN0YXRlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1l
LCBhdHRyaWJ1dGVOYW1lKSk7Cit9CisKK2Jvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQoreworICAgIHRocm93VHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcuJywg
YXR0cmlidXRlTmFtZSwgIiBzZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBpbnN0YW5jZXMgb2Yg
IiwgaW50ZXJmYWNlTmFtZSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIG1ha2VU
aGlzVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUpCit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNhbiBvbmx5IGNhbGwg
IiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBmdW5jdGlvbk5hbWUsICIgb24gaW5zdGFuY2VzIG9mICIs
IGludGVyZmFjZU5hbWUpOworfQorCitFbmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3Io
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFy
KiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7CisgICAgcmV0dXJu
IHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGlu
dGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHJl
amVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmIHByb21pc2UsIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCit7CisgICAg
cHJvbWlzZS5yZWplY3QoVHlwZUVycm9yLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJm
YWNlTmFtZSwgbWV0aG9kTmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlz
VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlUmVqZWN0ZWRQ
cm9taXNlV2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVy
ZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKK30KKwordm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVu
dEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmpl
Y3QsIEpTQzo6SlNGdW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAgSlNDOjpDYWxsRGF0YSBjYWxs
RGF0YTsKKyAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YSgmZnVu
Y3Rpb24sIGNhbGxEYXRhKTsKKyAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUp
OworCisgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICBKU0M6OmNh
bGwoJnN0YXRlLCAmZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJnRoaXNPYmplY3QsIGFy
Z3VtZW50cyk7Cit9CisKK3ZvaWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnZpc2l0
Q2hpbGRyZW4oSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9i
amVjdCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwor
ICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsKK30K
Kworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFRocm93VHlwZUVycm9y
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICB0aHJvd1R5cGVFcnJvcihleGVj
LCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyBvcGVyYXRv
ciIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKK30KKworQ2FsbFR5
cGUgRE9NQ29uc3RydWN0b3JPYmplY3Q6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBj
YWxsRGF0YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsVGhyb3dUeXBl
RXJyb3I7CisgICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0OworfQorCit2b2lkIHRocm93RE9NU3lu
dGF4RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQor
eworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZz
dGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNZTlRBWF9FUlIpKTsKK30K
Kwordm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAg
ICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRl
LCBEQVRBX0NMT05FX0VSUikpOworfQorCit2b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElOREVYX1NJWkVfRVJSKSk7Cit9CisKK3ZvaWQgdGhy
b3dUeXBlTWlzbWF0Y2hFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgVFlQRV9N
SVNNQVRDSF9FUlIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdyYXBwZXJDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuY3BwCShyZXZpc2lvbiAyMTEzNTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXJDYWNoZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwLDM3NCArMjAsMTIgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCi0KLSNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKLSNpbmNs
dWRlICJDb21tb25WTS5oIgotI2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNj
cmlwdGlvbi5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkhlYWRlcnMuaCIKLSNpbmNsdWRlICJFeGNl
cHRpb25JbnRlcmZhY2VzLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MUGFy
c2VySWRpb21zLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRl
ICJKU0RPTUNvbnZlcnQuaCIKLSNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKLSNpbmNsdWRlICJK
U0RPTVdpbmRvd0N1c3RvbS5oIgotI2luY2x1ZGUgIkpTRXhjZXB0aW9uQmFzZS5oIgotI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSA8Ynl0ZWNvZGUvQ29kZUJsb2NrLmg+Ci0j
aW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5oPgotI2luY2x1ZGUgPGluc3BlY3Rv
ci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFu
Y2UuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJv
ckhhbmRsaW5nU2NvcGUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9ySW5zdGFuY2UuaD4KLSNp
bmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbi5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9u
SGVscGVycy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgotI2luY2x1ZGUgPHN0
ZGFyZy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3VuaWNv
ZGUvQ2hhcmFjdGVyTmFtZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1RB
VElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yT2JqZWN0
KTsKLVNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3Rv
cldpdGhEb2N1bWVudCk7Ci0KLXZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShw
cm9wZXJ0eU5hbWUpOwotfQotCi1KU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgaWYgKHMuaXNOdWxsKCkpCi0gICAgICAg
IHJldHVybiBqc051bGwoKTsKLSAgICByZXR1cm4ganNPd25lZFN0cmluZyhleGVjLCBzKTsKLX0K
LQotSlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3Ry
aW5nJiBzKQotewotICAgIGlmIChzLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcyk7Ci19Ci0KLUpTVmFs
dWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKLXsKLSAgICByZXR1
cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdXJsLnN0cmluZygpKTsKLX0KLQotSlNWYWx1ZSBq
c1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCi17Ci0g
ICAgaWYgKHVybC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
cmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlLCBTdHJpbmcmJiBzdHJpbmcpCi17Ci0gICAgaWYgKCFzdHJpbmcu
Y29udGFpbnNPbmx5TGF0aW4xKCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0cmluZzsK
LX0KLQotU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIFN0cmluZyBz
dHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOwotICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJp
bmcoc3RhdGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOwotfQotCi1TdHJpbmcgdmFsdWVUb0J5
dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0g
PSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LQotICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICByZXR1cm4gc3RyaW5nVG9CeXRl
U3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBib29sIGhhc1VucGFpcmVkU3Vycm9nYXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQotewotICAgIC8v
IEZhc3QgcGF0aCBmb3IgOC1iaXQgc3RyaW5nczsgdGhleSBjYW4ndCBoYXZlIGFueSBzdXJyb2dh
dGVzLgotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBmb3IgKGF1dG8gY29kZVBvaW50IDogc3RyaW5nLmNvZGVQb2ludHMoKSkgewotICAgICAgICBp
ZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmlu
Z1RvVVNWU3RyaW5nKFN0cmluZyYmIHN0cmluZykKLXsKLSAgICAvLyBGYXN0IHBhdGggZm9yIHRo
ZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBubyB1bnBhaXJlZCBzdXJyb2dhdGVzLgotICAgIGlmICgh
aGFzVW5wYWlyZWRTdXJyb2dhdGUoc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIHN0cmluZzsKLQot
ICAgIC8vIFNsb3cgcGF0aDogaHR0cDovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tb2J0
YWluLXVuaWNvZGUKLSAgICAvLyBSZXBsYWNlcyB1bnBhaXJlZCBzdXJyb2dhdGVzIHdpdGggdGhl
IHJlcGxhY2VtZW50IGNoYXJhY3Rlci4KLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICBy
ZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nVmlldyB2
aWV3IHsgc3RyaW5nIH07Ci0gICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHZpZXcuY29kZVBvaW50
cygpKSB7Ci0gICAgICAgIGlmIChVX0lTX1NVUlJPR0FURShjb2RlUG9pbnQpKQotICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVudENoYXJhY3Rlcik7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29kZVBvaW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJl
c3VsdC50b1N0cmluZygpOwotfQotCi1TdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEV4ZWNT
dGF0ZSYsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCi17Ci0gICAgU3RyaW5nIHN0cmlu
ZyA9IGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdU
Rk1vdmUoc3RyaW5nKSk7Ci19Ci0KLVN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBTdHJpbmcgc3RyaW5n
ID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwotCi0gICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5n
KSk7Ci19Ci0KLUpTVmFsdWUganNEYXRlKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlKQot
ewotICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOwotfQotCi1kb3VibGUg
dmFsdWVUb0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZS5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNOdW1iZXIoKTsKLSAgICBp
ZiAoIXZhbHVlLmluaGVyaXRzKGV4ZWMtPnZtKCksIERhdGVJbnN0YW5jZTo6aW5mbygpKSkKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHZhbHVlLnRvT2JqZWN0KGV4ZWMp
KS0+aW50ZXJuYWxOdW1iZXIoKTsKLX0KLQotdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlw
dCkKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpz
RHluYW1pY0Rvd25jYXN0PEpTQzo6RXhjZXB0aW9uKj4odm0sIGV4Y2VwdGlvblZhbHVlKTsKLSAg
ICBpZiAoIWV4Y2VwdGlvbikgewotICAgICAgICBleGNlcHRpb24gPSB2bS5sYXN0RXhjZXB0aW9u
KCk7Ci0gICAgICAgIGlmICghZXhjZXB0aW9uKQotICAgICAgICAgICAgZXhjZXB0aW9uID0gSlND
OjpFeGNlcHRpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGNlcHRpb25WYWx1ZSwgSlNDOjpFeGNl
cHRpb246OkRvTm90Q2FwdHVyZVN0YWNrKTsKLSAgICB9Ci0KLSAgICByZXBvcnRFeGNlcHRpb24o
ZXhlYywgZXhjZXB0aW9uLCBjYWNoZWRTY3JpcHQpOwotfQotCi1TdHJpbmcgcmV0cmlldmVFcnJv
ck1lc3NhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgVk0mIHZtLCBKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2F0
Y2hTY29wZSYgY2F0Y2hTY29wZSkKLXsKLSAgICBpZiAoYXV0byogZXhjZXB0aW9uQmFzZSA9IHRv
RXhjZXB0aW9uQmFzZSh2bSwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkJh
c2UtPnRvU3RyaW5nKCk7Ci0KLSAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE1
MDg3PiBXZWIgSW5zcGVjdG9yOiBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24gc2hvdWxkIG5vdCBl
dmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKLSAgICAvLyBJZiB0aGlzIGlz
IGEgY3VzdG9tIGV4Y2VwdGlvbiBvYmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5IGFu
ZCBnZXQgYSBuaWNlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4KLSAg
ICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlmIChhdXRvKiBlcnJvciA9IGpzRHluYW1pY0Rv
d25jYXN0PEVycm9ySW5zdGFuY2UqPih2bSwgZXhjZXB0aW9uKSkKLSAgICAgICAgZXJyb3JNZXNz
YWdlID0gZXJyb3ItPnNhbml0aXplZFRvU3RyaW5nKCZzdGF0ZSk7Ci0gICAgZWxzZQotICAgICAg
ICBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb24udG9XVEZTdHJpbmcoJnN0YXRlKTsKLQotICAgIC8v
IFdlIG5lZWQgdG8gY2xlYXIgYW55IG5ldyBleGNlcHRpb24gdGhhdCBtYXkgYmUgdGhyb3duIGlu
IHRoZSB0b1N0cmluZygpIGNhbGwgYWJvdmUuCi0gICAgLy8gcmVwb3J0RXhjZXB0aW9uKCkgaXMg
bm90IHN1cHBvc2VkIHRvIGJlIG1ha2luZyBuZXcgZXhjZXB0aW9ucy4KLSAgICBjYXRjaFNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgdm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7Ci0gICAgcmV0
dXJuIGVycm9yTWVzc2FnZTsKLX0KLQotdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlw
dCwgRXhjZXB0aW9uRGV0YWlscyogZXhjZXB0aW9uRGV0YWlscykKLXsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQot
ICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwot
ICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24odm0sIGV4Y2VwdGlvbikpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4ZWMt
PnZtKCkpOwotCi0gICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNj
cmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBTY3JpcHRDYWxsU3Rh
Y2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUpKTsKLSAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwotICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOwotCi0gICAgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSk7Ci0gICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cgPSBqc0R5bmFt
aWNEb3duY2FzdDxKU0RPTVdpbmRvdyo+KHZtLCBnbG9iYWxPYmplY3QpKSB7Ci0gICAgICAgIGlm
ICghd2luZG93LT53cmFwcGVkKCkuaXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAgIGlu
dCBjb2x1bW5OdW1iZXIgPSAwOwotICAgIFN0cmluZyBleGNlcHRpb25Tb3VyY2VVUkw7Ci0gICAg
aWYgKGNvbnN0IFNjcmlwdENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbFN0YWNrLT5maXJzdE5v
bk5hdGl2ZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIGxpbmVOdW1iZXIgPSBjYWxsRnJhbWUtPmxp
bmVOdW1iZXIoKTsKLSAgICAgICAgY29sdW1uTnVtYmVyID0gY2FsbEZyYW1lLT5jb2x1bW5OdW1i
ZXIoKTsKLSAgICAgICAgZXhjZXB0aW9uU291cmNlVVJMID0gY2FsbEZyYW1lLT5zb3VyY2VVUkwo
KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gcmV0cmlldmVFcnJvck1lc3Nh
Z2UoKmV4ZWMsIHZtLCBleGNlcHRpb24tPnZhbHVlKCksIHNjb3BlKTsKLSAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cmVwb3J0
RXhjZXB0aW9uKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBleGNlcHRp
b25Tb3VyY2VVUkwsIGV4Y2VwdGlvbiwgY2FsbFN0YWNrLT5zaXplKCkgPyBjYWxsU3RhY2sgOiBu
dWxscHRyLCBjYWNoZWRTY3JpcHQpOwotCi0gICAgaWYgKGV4Y2VwdGlvbkRldGFpbHMpIHsKLSAg
ICAgICAgZXhjZXB0aW9uRGV0YWlscy0+bWVzc2FnZSA9IGVycm9yTWVzc2FnZTsKLSAgICAgICAg
ZXhjZXB0aW9uRGV0YWlscy0+bGluZU51bWJlciA9IGxpbmVOdW1iZXI7Ci0gICAgICAgIGV4Y2Vw
dGlvbkRldGFpbHMtPmNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJlcjsKLSAgICAgICAgZXhjZXB0
aW9uRGV0YWlscy0+c291cmNlVVJMID0gZXhjZXB0aW9uU291cmNlVVJMOwotICAgIH0KLX0KLQot
dm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKLSAgICBhdXRvKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKLSAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwotICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwot
fQotCi1zdGF0aWMgSlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBF
eGNlcHRpb25Db2RlIGVjLCBjb25zdCBTdHJpbmcqIG1lc3NhZ2UgPSBudWxscHRyKQotewotICAg
IGlmICghZWMgfHwgZWMgPT0gRXhpc3RpbmdFeGNlcHRpb25FcnJvcikKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBGSVhNRTogSGFuZGxlIG90aGVyIFdlYklETCBleGNl
cHRpb24gdHlwZXMuCi0gICAgaWYgKGVjID09IFR5cGVFcnJvcikgewotICAgICAgICBpZiAoIW1l
c3NhZ2UgfHwgbWVzc2FnZS0+aXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVR5
cGVFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAqbWVz
c2FnZSk7Ci0gICAgfQotCi0gICAgaWYgKGVjID09IFJhbmdlRXJyb3IpIHsKLSAgICAgICAgaWYg
KCFtZXNzYWdlIHx8IG1lc3NhZ2UtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBjcmVh
dGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQmFkIHZhbHVlIikpOwotICAgICAgICBy
ZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAqbWVzc2FnZSk7Ci0gICAgfQotCi0gICAgaWYg
KGVjID09IFN0YWNrT3ZlcmZsb3dFcnJvcikKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YWNrT3Zl
cmZsb3dFcnJvcihleGVjKTsKLQotICAgIC8vIEZJWE1FOiBBbGwgY2FsbGVycyB0byBjcmVhdGVE
T01FeGNlcHRpb24gbmVlZCB0byBwYXNzIGluIHRoZSBjb3JyZWN0IGdsb2JhbCBvYmplY3QuCi0g
ICAgLy8gRm9yIG5vdywgd2UncmUgZ29pbmcgdG8gYXNzdW1lIHRoZSBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LiBXaGljaCBpcyB3cm9uZyBpbiBjYXNlcyBsaWtlIHRoaXM6Ci0gICAgLy8gZnJhbWVzWzBd
LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobnVsbCwgbnVsbCk7IC8vIHRocm93cyBhbiBleGNlcHRp
b24gd2hpY2ggc2hvdWxkIGhhdmUgdGhlIHN1YmZyYW1lJ3MgcHJvdG90eXBlcy4KLSAgICBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclBy
b3RvdHlwZShleGVjKTsKLQotICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlv
bihlYyk7Ci0KLSAgICBDU3RyaW5nIG1lc3NhZ2VDU3RyaW5nOwotICAgIGlmIChtZXNzYWdlKQot
ICAgICAgICBtZXNzYWdlQ1N0cmluZyA9IG1lc3NhZ2UtPnV0ZjgoKTsKLSAgICBpZiAobWVzc2Fn
ZSAmJiAhbWVzc2FnZS0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEl0IGlzIHNhZmUgdG8gZG8g
dGhpcyBiZWNhdXNlIHRoZSBjaGFyKiBjb250ZW50cyBvZiB0aGUgQ1N0cmluZyBhcmUgY29waWVk
IGludG8gYSBuZXcgV1RGOjpTdHJpbmcgYmVmb3JlIHRoZSBDU3RyaW5nIGlzIGRlc3Ryb3llZC4K
LSAgICAgICAgZGVzY3JpcHRpb24uZGVzY3JpcHRpb24gPSBtZXNzYWdlQ1N0cmluZy5kYXRhKCk7
Ci0gICAgfQotCi0gICAgSlNWYWx1ZSBlcnJvck9iamVjdDsKLSAgICBzd2l0Y2ggKGRlc2NyaXB0
aW9uLnR5cGUpIHsKLSAgICBjYXNlIERPTUNvcmVFeGNlcHRpb25UeXBlOgotI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotICAgIGNhc2UgSURCRGF0YWJhc2VFeGNlcHRpb25UeXBlOgotI2Vu
ZGlmCi0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIERPTUNv
cmVFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZpbGVFeGNlcHRpb25UeXBlOgotICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCBGaWxlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBTUUxFeGNlcHRpb25UeXBlOgotICAgICAgICBlcnJvck9iamVj
dCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTUUxFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlw
dGlvbikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR0V4Y2VwdGlvblR5cGU6Ci0gICAg
ICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFNWR0V4Y2VwdGlvbjo6
Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgWFBhdGhFeGNl
cHRpb25UeXBlOgotICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBYUGF0aEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICAKLSAgICBBU1NFUlQoZXJyb3JPYmplY3QpOwotICAgIGFkZEVycm9ySW5mbyhl
eGVjLCBhc09iamVjdChlcnJvck9iamVjdCksIHRydWUpOwotICAgIHJldHVybiBlcnJvck9iamVj
dDsKLX0KLQotSlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNl
cHRpb25Db2RlIGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIGNyZWF0
ZURPTUV4Y2VwdGlvbihleGVjLCBlYywgJm1lc3NhZ2UpOwotfQotCi1KU1ZhbHVlIGNyZWF0ZURP
TUV4Y2VwdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCi17Ci0g
ICAgcmV0dXJuIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIGV4Y2VwdGlvbi5jb2RlKCksIGV4
Y2VwdGlvbi5yZWxlYXNlTWVzc2FnZSgpKTsKLX0KLQotdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25T
bG93UGF0aChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQotewotICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNl
cHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVE
T01FeGNlcHRpb24oc3RhdGUsIFdURk1vdmUoZXhjZXB0aW9uKSkpOwotfQotCi1ib29sIGhhc0l0
ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ewotICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVl
KTsKLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZTsKLSAgICBK
U1ZhbHVlIGFwcGx5TWV0aG9kID0gb2JqZWN0LT5nZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwg
Y2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBBU0NJSUxpdGVyYWwo
IlN5bWJvbC5pdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotCi0gICAgcmV0dXJuICFhcHBseU1ldGhv
ZC5pc1VuZGVmaW5lZCgpOwotfQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb0ZyYW1lKEV4ZWNTdGF0ZSYgc3RhdGUsIEZyYW1lJiBmcmFtZSwgU3RyaW5nJiBtZXNz
YWdlKQotewotICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFt
ZSgmc3RhdGUsICZmcmFtZSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgbWVzc2FnZSA9IGZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5j
cm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb0RPTVdpbmRvdyhFeGVjU3RhdGUmIHN0YXRlLCBET01XaW5kb3cmIGdsb2JhbE9iamVj
dCwgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRlLCBnbG9iYWxPYmplY3QsIERvTm90UmVwb3J0U2Vj
dXJpdHlFcnJvcikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIG1lc3NhZ2UgPSBnbG9iYWxP
YmplY3QuY3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZzdGF0
ZSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZy
YW1lKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICghZnJh
bWUpCi0gICAgICAgIHJldHVybjsKLSAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkt
PnByaW50RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOwotfQotCiBTdHJ1Y3R1cmUqIGdldENhY2hlZERP
TVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbykKIHsKICAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGds
b2JhbE9iamVjdC5zdHJ1Y3R1cmVzKE5vTG9ja2luZ05lY2Vzc2FyeSk7CkBAIC00MDIsNjMzICs0
MCw0IEBAIFN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWwKICAgICByZXR1
cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPihnbG9i
YWxPYmplY3Qudm0oKSwgJmdsb2JhbE9iamVjdCwgc3RydWN0dXJlKSkuaXRlcmF0b3ItPnZhbHVl
LmdldCgpOwogfQogCi1zdGF0aWMgY29uc3QgaW50MzJfdCBrTWF4SW50MzIgPSAweDdmZmZmZmZm
Owotc3RhdGljIGNvbnN0IGludDMyX3Qga01pbkludDMyID0gLWtNYXhJbnQzMiAtIDE7Ci1zdGF0
aWMgY29uc3QgdWludDMyX3Qga01heFVJbnQzMiA9IDB4ZmZmZmZmZmZVOwotc3RhdGljIGNvbnN0
IGludDY0X3Qga0pTTWF4SW50ZWdlciA9IDB4MjAwMDAwMDAwMDAwMDBMTCAtIDE7IC8vIDJeNTMg
LSAxLCBsYXJnZXN0IGludGVnZXIgZXhhY3RseSByZXByZXNlbnRhYmxlIGluIEVDTUFTY3JpcHQu
Ci0KLXN0YXRpYyBTdHJpbmcgcmFuZ2VFcnJvclN0cmluZyhkb3VibGUgdmFsdWUsIGRvdWJsZSBt
aW4sIGRvdWJsZSBtYXgpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIlZhbHVlICIsIFN0cmlu
Zzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHZhbHVlKSwgIiBpcyBvdXRzaWRlIHRoZSByYW5n
ZSBbIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWluKSwgIiwgIiwgU3RyaW5n
OjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWF4KSwgIl0iKTsKLX0KLQotc3RhdGljIGRvdWJs
ZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgZG91YmxlIHgsIGRvdWJsZSBtaW5pbXVt
LCBkb3VibGUgbWF4aW11bSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmIChzdGQ6OmlzbmFuKHgp
IHx8IHN0ZDo6aXNpbmYoeCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICB4ID0gdHJ1bmMoeCk7Ci0gICAgaWYgKHggPCBtaW5pbXVtIHx8IHgg
PiBtYXhpbXVtKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIHJhbmdl
RXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IElu
dFR5cGVMaW1pdHMgewotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzPGlu
dDhfdD4gewotICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWluVmFsdWUgPSAtMTI4OwotICAgIHN0
YXRpYyBjb25zdCBpbnQ4X3QgbWF4VmFsdWUgPSAxMjc7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1
Y3QgSW50VHlwZUxpbWl0czx1aW50OF90PiB7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgbWF4
VmFsdWUgPSAyNTU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0g
MjU2OyAvLyAyXjgKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czxpbnQx
Nl90PiB7Ci0gICAgc3RhdGljIGNvbnN0IHNob3J0IG1pblZhbHVlID0gLTMyNzY4OwotICAgIHN0
YXRpYyBjb25zdCBzaG9ydCBtYXhWYWx1ZSA9IDMyNzY3OwotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Ci19OwotCi10ZW1wbGF0ZSA8Pgot
c3RydWN0IEludFR5cGVMaW1pdHM8dWludDE2X3Q+IHsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgbWF4VmFsdWUgPSA2NTUzNTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVt
YmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci1zdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQotewot
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NpZ25lZDxUPjo6dmFsdWUg
JiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBiZSB1c2VkIGZvciBz
aWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKLQotICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBM
aW1pdHNUcmFpdDsKLSAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAz
Mi1iaXQgc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgotICAgIGlmICh2YWx1ZS5p
c0ludDMyKCkpIHsKLSAgICAgICAgaW50MzJfdCBkID0gdmFsdWUuYXNJbnQzMigpOwotICAgICAg
ICBpZiAoZCA+PSBMaW1pdHNUcmFpdDo6bWluVmFsdWUgJiYgZCA8PSBMaW1pdHNUcmFpdDo6bWF4
VmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7Ci0gICAgICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAg
ICAgICByZXR1cm4gZCA8IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA/IExpbWl0c1RyYWl0OjptaW5W
YWx1ZSA6IExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKLSAgICAgICAgfQotICAgICAgICBkICU9IExp
bWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlczsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+
KGQgPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyBkIC0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFs
dWVzIDogZCk7Ci0gICAgfQotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotCi0gICAgc3dpdGNoIChjb25m
aWd1cmF0aW9uKSB7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwg
eCwgTGltaXRzVHJhaXQ6Om1pblZhbHVlLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOwotICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgcmV0dXJu
IHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsKLSAgICB9Ci0KLSAgICBpZiAoc3Rk
Ojppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6IGZsb29yKGZhYnMoeCkpOwotICAgIHgg
PSBmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyk7Ci0KLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VD4oeCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/IHggLSBMaW1pdHNUcmFpdDo6
bnVtYmVyT2ZWYWx1ZXMgOiB4KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdGF0aWMg
aW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUgJiYgc3Rk
Ojppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBiZSB1c2VkIGZvciB1bnNpZ25l
ZCBpbnRlZ3JhbCB0eXBlcyIpOwotCi0gICAgdHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0
c1RyYWl0OwotICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJp
dCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KLSAgICBpZiAodmFsdWUuaXNV
SW50MzIoKSkgewotICAgICAgICB1aW50MzJfdCBkID0gdmFsdWUuYXNVSW50MzIoKTsKLSAgICAg
ICAgaWYgKGQgPD0gTGltaXRzVHJhaXQ6Om1heFZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KGQpOwotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVy
biBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBkb3VibGUg
eCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgMCk7Ci0KLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICBjYXNlIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICBy
ZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOwot
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAg
cmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsKLSAgICB9Ci0KLSAgICBp
ZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6IGZsb29yKGZhYnMoeCkpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZh
bHVlcykpOwotfQotCi1pbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4o
c3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZSk7Ci19Ci0KLXVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4o
c3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZSk7Ci19Ci0KLWludDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Ci19Ci0KLXVpbnQ4X3Qg
dG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9U
Ui9XZWJJREwvI2VzLWJ5dGUKLWludDhfdCB0b0ludDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLS8vIGh0dHA6
Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtb2N0ZXQKLXVpbnQ4X3QgdG9VSW50OChFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVp
bnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWwpOwotfQotCi1pbnQxNl90IHRvSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRl
LCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwot
fQotCi11aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0K
LQotaW50MTZfdCB0b0ludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Ci19Ci0KLXVpbnQxNl90IHRvVUludDE2
Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9T
bWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkNsYW1wKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNl
cy1zaG9ydAotaW50MTZfdCB0b0ludDE2KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotLy8gaHR0cDovL3d3dy53
My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1zaG9ydAotdWludDE2X3QgdG9VSW50MTYoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUlu
dDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtbG9uZwot
aW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigm
c3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVybiBl
bmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIGtNaW5JbnQzMiwga01heEludDMyKTsKLX0KLQotaW50MzJf
dCB0b0ludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0g
ICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6Omlz
bmFuKHgpID8gMCA6IGNsYW1wVG88aW50MzJfdD4oeCk7Ci19Ci0KLXVpbnQzMl90IHRvVUludDMy
Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUu
aXNVSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICBkb3Vi
bGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkg
PyAwIDogY2xhbXBUbzx1aW50MzJfdD4oeCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1dlYklETC8jZXMtdW5zaWduZWQtbG9uZwotdWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2Uo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlm
ICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQot
ICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBr
TWF4VUludDMyKTsKLX0KLQotaW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGRvdWJsZSB4
ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAta0pTTWF4SW50ZWdlciwg
a0pTTWF4SW50ZWdlcik7Ci19Ci0KLXVpbnQ2NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGRv
dWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrSlNNYXhJ
bnRlZ2VyKTsKLX0KLQotaW50NjRfdCB0b0ludDY0Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ2NF90Pihz
dGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgLWtKU01heEludGVnZXIpLCBrSlNN
YXhJbnRlZ2VyKSk7Ci19Ci0KLXVpbnQ2NF90IHRvVUludDY0Q2xhbXAoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+KHgsIDApLCBrSlNNYXhJbnRl
Z2VyKSk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtbG9uZy1sb25n
Ci1pbnQ2NF90IHRvSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0KLSAgICAvLyBNYXAgTmFOcyBh
bmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0Lgot
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOwotICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsKLSAg
ICByZXR1cm4gbjsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNp
Z25lZC1sb25nLWxvbmcKLXVpbnQ2NF90IHRvVUludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotCi0g
ICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVl
cyBtb2R1bG8gMl42NC4KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbjsKLSAgICBkb3VibGVUb0lu
dGVnZXIoeCwgbik7Ci0gICAgcmV0dXJuIG47Ci19Ci0KLWNsYXNzIEdldENhbGxlckdsb2JhbE9i
amVjdEZ1bmN0b3IgewotcHVibGljOgotICAgIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3Io
KSA9IGRlZmF1bHQ7Ci0KLSAgICBTdGFja1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNr
VmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghbV9oYXNTa2lwcGVk
Rmlyc3RGcmFtZSkgewotICAgICAgICAgICAgbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSA9IHRydWU7
Ci0gICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250aW51ZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChhdXRvKiBjb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKSkKLSAg
ICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQodmlzaXRvci0+Y2FsbGVlKCkpOwotICAg
ICAgICAgICAgLy8gRklYTUU6IENhbGxlZSBpcyBub3QgYW4gb2JqZWN0IGlmIHRoZSBjYWxsZXIg
aXMgV2ViIEFzc2VtYmx5LgotICAgICAgICAgICAgLy8gRmlndXJlIG91dCB3aGF0IHRvIGRvIGhl
cmUuIFdlIGNhbiBwcm9iYWJseSBnZXQgdGhlIGdsb2JhbCBvYmplY3QKLSAgICAgICAgICAgIC8v
IGZyb20gdGhlIHRvcC1tb3N0IFdhc20gSW5zdGFuY2UuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjU3MjEKLSAgICAgICAgICAgIGlmICh2aXNpdG9yLT5jYWxsZWUo
KS0+aXNPYmplY3QoKSkKLSAgICAgICAgICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGpzQ2FzdDxK
U09iamVjdCo+KHZpc2l0b3ItPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKLSAgICB9Ci0KLSAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3Q7IH0K
LQotcHJpdmF0ZToKLSAgICBtdXRhYmxlIGJvb2wgbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSB7IGZh
bHNlIH07Ci0gICAgbXV0YWJsZSBKU0dsb2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3QgeyBudWxs
cHRyIH07Ci19OwotCi1ET01XaW5kb3cmIGNhbGxlckRPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvciBpdGVyOwotICAgIGV4ZWMtPml0
ZXJhdGUoaXRlcik7Ci0gICAgcmV0dXJuIGl0ZXIuZ2xvYmFsT2JqZWN0KCkgPyBhc0pTRE9NV2lu
ZG93KGl0ZXIuZ2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCkgOiBmaXJzdERPTVdpbmRvdyhleGVj
KTsKLX0KLQotRE9NV2luZG93JiBhY3RpdmVET01XaW5kb3coRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPndy
YXBwZWQoKTsKLX0KLQotRE9NV2luZG93JiBmaXJzdERPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgp
KS0+d3JhcHBlZCgpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY2FuQWNjZXNzRG9jdW1lbnQo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEb2N1bWVudCogdGFyZ2V0RG9jdW1lbnQsIFNlY3VyaXR5
UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBp
ZiAoIXRhcmdldERvY3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBET01XaW5k
b3cmIGFjdGl2ZSA9IGFjdGl2ZURPTVdpbmRvdyhzdGF0ZSk7Ci0KLSAgICBpZiAoYWN0aXZlLmRv
Y3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkuY2FuQWNjZXNzKHRhcmdldERvY3VtZW50LT5zZWN1
cml0eU9yaWdpbigpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBzd2l0Y2ggKHJlcG9y
dGluZ09wdGlvbikgewotICAgIGNhc2UgVGhyb3dTZWN1cml0eUVycm9yOgotICAgICAgICB0aHJv
d1NlY3VyaXR5RXJyb3IoKnN0YXRlLCBzY29wZSwgdGFyZ2V0RG9jdW1lbnQtPmRvbVdpbmRvdygp
LT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmUpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBMb2dTZWN1cml0eUVycm9yOgotICAgICAgICBwcmludEVycm9yTWVzc2FnZUZv
ckZyYW1lKHRhcmdldERvY3VtZW50LT5mcmFtZSgpLCB0YXJnZXREb2N1bWVudC0+ZG9tV2luZG93
KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZSkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcjoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6c2hv
dWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERPTVdpbmRv
dyYgdGFyZ2V0LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCi17Ci0g
ICAgcmV0dXJuIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJnZXQuZG9jdW1lbnQoKSwgcmVw
b3J0aW5nT3B0aW9uKTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEZyYW1lKiB0YXJnZXQsIFNlY3VyaXR5
UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKLXsKLSAgICByZXR1cm4gdGFyZ2V0ICYm
IGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJnZXQtPmRvY3VtZW50KCksIHJlcG9ydGluZ09w
dGlvbik7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvTm9k
ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIE5vZGUqIHRhcmdldCkKLXsKLSAgICByZXR1cm4gIXRh
cmdldCB8fCBjYW5BY2Nlc3NEb2N1bWVudCgmc3RhdGUsICZ0YXJnZXQtPmRvY3VtZW50KCksIExv
Z1NlY3VyaXR5RXJyb3IpOwotfQotICAgIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIHRocm93VHlw
ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKLX0KLQotc3RhdGljIHZvaWQgYXBwZW5kQXJn
dW1lbnRNdXN0QmUoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgdW5zaWduZWQgYXJndW1lbnRJbmRl
eCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJB
cmd1bWVudCAiKTsKLSAgICBidWlsZGVyLmFwcGVuZE51bWJlcihhcmd1bWVudEluZGV4ICsgMSk7
Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgKCciKTsKLSAgICBidWlsZGVyLmFwcGVuZChh
cmd1bWVudE5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJykgdG8gIik7Ci0gICAg
aWYgKCFmdW5jdGlvbk5hbWUpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ0aGUg
Iik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5hbWUpOwotICAgICAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIiBjb25zdHJ1Y3RvciIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5hbWUpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgn
LicpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChmdW5jdGlvbk5hbWUpOwotICAgIH0KLSAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiBtdXN0IGJlICIpOwotfQotCi1KU0M6OkVuY29kZWRKU1Zh
bHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0g
ICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgY29udGV4
dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJv
ciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnIiwg
YXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNlTmFtZSwgIiBvYmplY3QuIikp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0gICAgCi12
b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0g
ICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgY29udGV4
dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJv
ciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIHNldCBwcm9wZXJ0eSAnIiwgYXR0
cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNlTmFtZSwgIiBvYmplY3QuIikpOwot
fQotCi12b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigm
c3RhdGUsIE5PVF9TVVBQT1JURURfRVJSKSk7Ci19Ci0KLXZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0
IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAg
U3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRl
LCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIsICZt
ZXNzYWdlU3RyaW5nKSk7Ci19Ci0KLXZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgU3RyaW5nIG1lc3Nh
Z2VTdHJpbmcobWVzc2FnZSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3Jl
YXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5WQUxJRF9TVEFURV9FUlIsICZtZXNzYWdlU3RyaW5n
KSk7Ci19Ci0KLXZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIEFT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2Nv
cGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNFQ1VSSVRZX0VSUiwgbWVzc2FnZSkpOwot
fQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1
bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9u
SW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBl
Y3RlZFZhbHVlcykKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBwZW5kQXJn
dW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBmdW5jdGlv
bkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJvbmUgb2Y6ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVmFsdWVzKTsKLSAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkp
OwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVy
cm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWdu
ZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBp
bnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOwotICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50
SW5kZXgsIGFyZ3VtZW50TmFtZSwgaW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKLSAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoImEgZnVuY3Rpb24iKTsKLSAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOwotfQotCi1KU0M6OkVu
Y29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBj
aGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCi17Ci0gICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIs
IGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5j
dGlvbk5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYW4gaW5zdGFuY2Ugb2YgIik7
Ci0gICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRUeXBlKTsKLSAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOwotfQotCi12b2lkIHRo
cm93QXJyYXlFbGVtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkKLXsKLSAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiSW52YWxpZCBBcnJheSBlbGVtZW50IHR5cGUiKSk7Ci19Ci0KLXZvaWQgdGhyb3dB
dHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCi17Ci0gICAgdGhyb3dUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1
dGVOYW1lLCAiIGF0dHJpYnV0ZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICIsIGV4cGVjdGVkVHlw
ZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBj
aGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciog
ZXhwZWN0ZWRUeXBlKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoIk1lbWJlciAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChkaWN0aW9uYXJ5
TmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJy4nKTsKLSAgICBidWlsZGVyLmFwcGVuZChtZW1i
ZXJOYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBpcyByZXF1aXJlZCBhbmQgbXVz
dCBiZSBhbiBpbnN0YW5jZSBvZiAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFR5cGUp
OwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9T
dHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSkKLXsKLSAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9y
KCZzdGF0ZSwgbWFrZVN0cmluZyhpbnRlcmZhY2VOYW1lLCAiIGNvbnN0cnVjdG9yIGFzc29jaWF0
ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKSkpOwotfQotCi12b2lkIHRocm93
U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKQotewotICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJWYWx1ZSBpcyBub3QgYSBzZXF1ZW5jZSIpKTsKLX0KLQotdm9pZCB0aHJvd05vbkZpbml0ZVR5
cGVFcnJvcihFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAg
IHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIHByb3ZpZGVk
IHZhbHVlIGlzIG5vbi1maW5pdGUiKSk7Ci19Ci0KLVN0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9y
TWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4n
LCBhdHRyaWJ1dGVOYW1lLCAiIGdldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBv
ZiAiLCBpbnRlcmZhY2VOYW1lKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRl
clR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUs
IGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17
Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgbWFrZUdldHRlclR5
cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgYXR0cmlidXRlTmFtZSkpOwotfQotCi1KU0M6
OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0
cmlidXRlTmFtZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVF
cnJvcihzdGF0ZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgYXR0
cmlidXRlTmFtZSkpOwotfQotCi1ib29sIHRocm93U2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICB0aHJvd1R5cGVFcnJvcihz
dGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJp
YnV0ZU5hbWUsICIgc2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9mICIsIGlu
dGVyZmFjZU5hbWUpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVN0cmluZyBtYWtlVGhpc1R5
cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lKQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJDYW4gb25seSBjYWxsICIsIGlu
dGVyZmFjZU5hbWUsICcuJywgZnVuY3Rpb25OYW1lLCAiIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRl
cmZhY2VOYW1lKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgdGhyb3dUaGlzVHlwZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQotewotICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZh
Y2VOYW1lLCBmdW5jdGlvbk5hbWUpKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQ
cm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiBwcm9taXNlLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lKQotewotICAgIHByb21p
c2UucmVqZWN0KFR5cGVFcnJvciwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5h
bWUsIG1ldGhvZE5hbWUpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIG1ldGhvZE5hbWUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlz
ZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VO
YW1lLCBtZXRob2ROYW1lKSk7Ci19Ci0KLXZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1
bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBK
U0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQotewotICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7
Ci0gICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoJmZ1bmN0aW9u
LCBjYWxsRGF0YSk7Ci0gICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKLQot
ICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzdGF0ZS5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgSlNDOjpjYWxsKCZz
dGF0ZSwgJmZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVu
dHMpOwotfQotCi12b2lkIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojp2aXNpdENoaWxk
cmVuKEpTQzo6SlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Qq
PihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8o
KSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2
aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luaXRpYWxpemVGdW5jdGlvbik7Ci19Ci0KLXN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJvcihFeGVj
U3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2Nv
cGUsIEFTQ0lJTGl0ZXJhbCgiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldycgb3BlcmF0b3IiKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci19Ci0KLUNhbGxUeXBlIERP
TUNvbnN0cnVjdG9yT2JqZWN0OjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERh
dGEpCi17Ci0gICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbFRocm93VHlwZUVycm9y
OwotICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsKLX0KLQotdm9pZCB0aHJvd0RPTVN5bnRheEVy
cm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAg
ICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUs
IHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTWU5UQVhfRVJSKSk7Ci19Ci0KLXZv
aWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhy
b3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgREFU
QV9DTE9ORV9FUlIpKTsKLX0KLQotdm9pZCB0aHJvd0luZGV4U2l6ZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVE
T01FeGNlcHRpb24oJnN0YXRlLCBJTkRFWF9TSVpFX0VSUikpOwotfQotCi12b2lkIHRocm93VHlw
ZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0
aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFRZUEVfTUlTTUFU
Q0hfRVJSKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuaAkocmV2aXNpb24gMjExMzUz
KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoyMTEzNTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXJDYWNoZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODI1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMDYsIDIwMDgtMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3Jn
PgorICogIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5v
cmc+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb25Pci5oIgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisj
aW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNEeW5hbWljRG93bmNhc3QuaCIK
KyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKKyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGVJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCisjaW5j
bHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CisjaW5jbHVkZSA8
aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KKyNpbmNs
dWRlIDxoZWFwL1dlYWtJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9BdXhpbGlhcnlCYXJy
aWVySW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlND
SlNWYWx1ZUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ2VsbElubGluZXMuaD4KKyNp
bmNsdWRlIDxydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNU
eXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CisjaW5jbHVkZSA8cnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5s
aW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRl
IDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGltZS9Xcml0ZUJhcnJpZXIu
aD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKy8v
IEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgZmlsZSBhIGxvdCBlYXNpZXIgdG8gcmVhZCBieSBw
dXR0aW5nIGFsbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXQgdGhlIHRvcCwKKy8vIGFuZCBmdW5j
dGlvbiBkZWZpbml0aW9ucyBiZWxvdywgZXZlbiBmb3IgdGVtcGxhdGUgYW5kIGlubGluZSBmdW5j
dGlvbnMuCisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgSlNGdW5jdGlvbjsKK30KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRTY3JpcHQ7CitjbGFzcyBEZWZlcnJlZFByb21p
c2U7CitjbGFzcyBET01XaW5kb3c7CitjbGFzcyBGcmFtZTsKK2NsYXNzIFVSTDsKK2NsYXNzIE5v
ZGU7CisKK3N0cnVjdCBFeGNlcHRpb25EZXRhaWxzIHsKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAg
ICBpbnQgbGluZU51bWJlciB7IDAgfTsKKyAgICBpbnQgY29sdW1uTnVtYmVyIHsgMCB9OworICAg
IFN0cmluZyBzb3VyY2VVUkw7Cit9OworCisvLyBCYXNlIGNsYXNzIGZvciBhbGwgY29uc3RydWN0
b3Igb2JqZWN0cyBpbiB0aGUgSlNDIGJpbmRpbmdzLgorY2xhc3MgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgOiBwdWJsaWMgSlNET01PYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNET01PYmpl
Y3QgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpJbXBs
ZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERh
dGE7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYs
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworCitwcm90ZWN0ZWQ6CisgICAg
RE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYp
OworCisgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKKyAgICBz
dGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBKU0M6OkNhbGxEYXRhJik7
Cit9OworCitjbGFzcyBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCA6IHB1YmxpYyBET01D
b25zdHJ1Y3Rvck9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9i
amVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmpl
Y3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisKKyAgICBK
U0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOworICAgIHZvaWQgc2V0SW5pdGlh
bGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKKworcHJpdmF0ZToKKyAg
ICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6ZUZ1bmN0aW9u
OworfTsKKworRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKK0RP
TVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CitET01XaW5kb3cmIGZp
cnN0RE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5j
b2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitX
RUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUpOworCit2b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0
cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK1dFQkNPUkVfRVhQT1JUIGJv
b2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsK
Kwordm9pZCB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93RE9NU3ludGF4RXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmKTsgLy8gTm90IHRoZSBzYW1lIGFzIGEgSmF2YVNjcmlwdCBz
eW50YXggZXJyb3IuCit2b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworV0VCQ09SRV9F
WFBPUlQgdm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKK3ZvaWQg
dGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgdGhyb3dTZXF1ZW5jZVR5
cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd1R5
cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7CisKK1dF
QkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1F
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50
SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVk
VmFsdWVzKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9u
RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVu
dEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKK1dFQkNPUkVfRVhQT1JUIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFy
Z3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7CitXRUJDT1JFX0VYUE9S
VCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25z
dCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK0pTQzo6
RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2
YWlsYWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSk7CisKK1N0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKK1N0
cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgdGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dUaGlzVHlwZUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKKworV0VCQ09SRV9FWFBPUlQgSlND
OjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0
ZU5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNl
V2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiwgY29uc3QgY2hhciogaW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkVu
Y29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUp
OworCitXRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJl
KEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKK1dFQkNPUkVfRVhQ
T1JUIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYs
IEpTQzo6U3RydWN0dXJlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3RydWN0dXJlKEpTQzo6
Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNz
PiBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0
ZSopOwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTT2JqZWN0KiBnZXRE
T01Qcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKwordm9pZCBjYWxs
RnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNPYmpl
Y3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBK
U0NsYXNzPiBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVj
dCYpOworCitKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3Js
ZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKK3ZvaWQqIHdyYXBwZXJLZXkoSlNDOjpBcnJheUJ1ZmZl
ciopOworCitKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29y
bGQmLCB2b2lkKik7CitKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqKTsKK0pTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5s
aW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKik7CisK
K2Jvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNE
T01PYmplY3QqLCBKU0M6OldlYWtIYW5kbGVPd25lciopOworYm9vbCBzZXRJbmxpbmVDYWNoZWRX
cmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9NT2JqZWN0KiB3
cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKTsKK2Jvb2wgc2V0SW5s
aW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKiwgSlND
OjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93
bmVyKTsKKworYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwg
dm9pZCosIEpTRE9NT2JqZWN0Kik7Citib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01X
cmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3JhcHBlcik7Citi
b29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5
QnVmZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgRE9NQ2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiwgRE9NQ2xhc3MmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlND
OjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBSZWY8
RE9NQ2xhc3M+JiBvYmplY3QpIHsgcmV0dXJuIGdldENhY2hlZFdyYXBwZXIod29ybGQsIG9iamVj
dC5nZXQoKSk7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVy
Q2xhc3M+IHZvaWQgY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNzKiwgV3Jh
cHBlckNsYXNzKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBl
ckNsYXNzPiB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNzKiwg
V3JhcHBlckNsYXNzKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4g
YXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpIC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBl
bmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3Mq
Pjo6dHlwZTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBhdXRvIGNy
ZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlw
ZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNWYWx1ZSB3cmFwKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBET01DbGFzcyYpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBKU0NsYXNzPiBKU0NsYXNzJiBjYXN0VGhpc1ZhbHVlKEpTQzo6RXhlY1N0YXRlJik7
CisKK3ZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJik7CisKK2NvbnN0
IEpTQzo6SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKEpTQzo6Vk0mLCBjb25z
dCBKU0M6Okhhc2hUYWJsZSYgc3RhdGljVGFibGUpOworCitTdHJpbmcgcmV0cmlldmVFcnJvck1l
c3NhZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiwg
SlNDOjpDYXRjaFNjb3BlJik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogPSBu
dWxscHRyKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFeGNlcHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0ciwgRXhjZXB0aW9u
RGV0YWlscyogPSBudWxscHRyKTsKK3ZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihKU0M6OkV4
ZWNTdGF0ZSopOworCitKU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpTQzo6RXhlY1N0
YXRlJiwgRXhjZXB0aW9uJiYpOworSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihKU0M6
OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUsIGNvbnN0IFN0cmluZyYpOworCisvLyBDb252ZXJ0
IGEgRE9NIGltcGxlbWVudGF0aW9uIGV4Y2VwdGlvbiBpbnRvIGEgSmF2YVNjcmlwdCBleGNlcHRp
b24gaW4gdGhlIGV4ZWN1dGlvbiBzdGF0ZS4KK3ZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOworV0VCQ09SRV9FWFBP
UlQgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKKworSlNDOjpKU1ZhbHVlIGpzU3RyaW5nKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgVVJMJik7IC8vIGVtcHR5IGlmIHRoZSBVUkwgaXMgbnVsbAorCitK
U0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0
cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCitKU0M6OkpTVmFsdWUg
anNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFVSTCYpOyAvLyB1bmRl
ZmluZWQgaWYgdGhlIFVSTCBpcyBudWxsCisKKy8vIFNlZSBKYXZhU2NyaXB0Q29yZSBmb3IgZXhw
bGFuYXRpb246IFNob3VsZCBiZSB1c2VkIGZvciBhbnkgc3RyaW5nIHRoYXQgaXMgYWxyZWFkeSBv
d25lZCBieSBhbm90aGVyCisvLyBvYmplY3QsIHRvIGxldCB0aGUgZW5naW5lIGtub3cgdGhhdCBj
b2xsZWN0aW5nIHRoZSBKU1N0cmluZyB3cmFwcGVyIGlzIHVubGlrZWx5IHRvIHNhdmUgbWVtb3J5
LgorSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBTdHJpbmcmKTsKKworU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlO
YW1lKTsKKworQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJv
cGVydHlOYW1lKTsKKworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVTdHJp
bmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK1dFQkNPUkVfRVhQ
T1JUIFN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEpTQzo6RXhl
Y1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
dmFsdWVUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK2ludDMy
X3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUsIEpTQzo6RXhlY1N0YXRlKiwgYm9vbCYg
b2theSk7CisKKy8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbnZlcnQgdmFsdWVzIHRvIGlu
dGVnZXJzIGFzIHBlciB0aGUgV2ViSURMIHNwZWNpZmljYXRpb24uCisvLyBUaGUgY29udmVyc2lv
biBmYWlscyBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIG51bWJlciBvciwg
aWYgRW5mb3JjZVJhbmdlIGlzIHNwZWNpZmllZCwKKy8vIHRoZSB2YWx1ZSBpcyBvdXRzaWRlIHRo
ZSByYW5nZSBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlciB0eXBlLgorCitXRUJDT1JFX0VYUE9S
VCBpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZFbmZv
cmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQg
dWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOworV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQzMl90IHRvVUludDMy
RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQ
T1JUIGludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK1dFQkNPUkVfRVhQT1JUIGludDhfdCB0b0lu
dDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1
aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJD
T1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkNsYW1wKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDMyX3QgdG9JbnQzMkNsYW1w
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQzMl90
IHRvVUludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9F
WFBPUlQgaW50NjRfdCB0b0ludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OworV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRDbGFtcChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7CisKK1dFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDgoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9J
bnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50
MTZfdCB0b1VJbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VY
UE9SVCBpbnQ2NF90IHRvSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VC
Q09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOworCitKU0M6OkpTVmFsdWUganNEYXRlKEpTQzo6RXhlY1N0YXRlKiwgZG91YmxlIHZhbHVl
KTsKKworLy8gTmFOIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gYSBkYXRlLgor
ZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKKworLy8g
VmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBlciBz
ZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCitKU0M6OkpTT2JqZWN0KiB0b0pTU2Vx
dWVuY2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpOwor
CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
SlNDOjpBcnJheUJ1ZmZlciYpOworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcmKTsKK0pTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVm
ZmVyKik7CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyopOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxU
PiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWZQdHI8VD4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgY29uc3QgVmVjdG9yPFQ+Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxUPj4mKTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJik7CisKK0pTQzo6SlNWYWx1ZSB0b0pT
SXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1
ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUJik7CitKU0M6OkpTVmFsdWUg
dG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJik7CisKK1JlZlB0cjxKU0M6OkFycmF5QnVm
ZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDhBcnJh
eShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvUG9z
c2libHlTaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpT
Qzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhB
cnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFy
cmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQxNkFy
cmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRv
UG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0
cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9Qb3NzaWJseVNo
YXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKworUmVmUHRyPEpTQzo6
QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mLCBKU0M6
OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVkSW50OEFycmF5KEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9VbnNoYXJl
ZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQzMkFy
cmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0
cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpT
VmFsdWUpOworUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5zaGFyZWRVaW50OENs
YW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQxNkFy
cmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQ
dHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6
OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVkRmxvYXQzMkFy
cmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0
b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1R5cGU+IFZlY3RvcjxSZWY8VD4+IHRvUmVmTmF0aXZl
QXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgYm9v
bCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK2Vu
dW0gU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IsIExv
Z1NlY3VyaXR5RXJyb3IsIFRocm93U2VjdXJpdHlFcnJvciB9OworbmFtZXNwYWNlIEJpbmRpbmdT
ZWN1cml0eSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hlY2tTZWN1cml0eUZvck5v
ZGUoSlNDOjpFeGVjU3RhdGUmLCBUJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hl
Y2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUKik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0
YXRlJiwgRXhjZXB0aW9uT3I8VCo+JiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEV4Y2Vw
dGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2VwdGlv
bk9yPFQmPiYmKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpF
eGVjU3RhdGUqLCBET01XaW5kb3cmLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9IExvZ1NlY3Vy
aXR5RXJyb3IpOworICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4
ZWNTdGF0ZSYsIERPTVdpbmRvdyYsIFN0cmluZyYgbWVzc2FnZSk7CisgICAgYm9vbCBzaG91bGRB
bGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSosIFNlY3VyaXR5UmVwb3J0
aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7CisgICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vz
c1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUmLCBGcmFtZSYsIFN0cmluZyYgbWVzc2FnZSk7CisgICAg
Ym9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIE5vZGUqKTsKK307
CisKK3ZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSk7CisKK1N0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFt
ZSk7CitBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0
eU5hbWUpOworCit0ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3RoPiBKU0M6
OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworCitlbnVt
IGNsYXNzIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHsgVGhyb3csIFJldHVybkVhcmx5LCBSZWpl
Y3RQcm9taXNlLCBBc3NlcnQgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4KK3N0cnVj
dCBCaW5kaW5nQ2FsbGVyIHsKKyAgICB1c2luZyBBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiA9IGJv
b2woSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlRocm93U2Nv
cGUmKTsKKyAgICB1c2luZyBBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiA9IEpTQzo6SlNWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICB1c2luZyBP
cGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNpbmcgUHJvbWlzZU9wZXJh
dGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQ2xhc3MqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93U2NvcGUmKTsKKwor
ICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CisgICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RGb3JPcGVyYXRpb24o
SlNDOjpFeGVjU3RhdGUmKTsKKworICAgIHRlbXBsYXRlPFByb21pc2VPcGVyYXRpb25DYWxsZXJG
dW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRo
cm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2U+CisgICAgc3RhdGlj
IEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbFByb21pc2VPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNvbnN0IGNoYXIqIG9wZXJh
dGlvbk5hbWUpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhdGUpOworICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0
byogdGhpc09iamVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsKKyAgICAgICAgaWYgKHNo
b3VsZFRocm93ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5MSUtFTFko
IXRoaXNPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoVGhpc1R5
cGVFcnJvcihwcm9taXNlLmdldCgpLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0
aW9uTmFtZSk7CisgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKKyAgICAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZvKCkpOworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2RlIHRv
IHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KKyAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhpc09iamVjdCwgV1RGTW92ZShwcm9taXNlKSwgdGhy
b3dTY29wZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8T3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24g
b3BlcmF0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBjYWxsT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgY2hhciogb3Bl
cmF0aW9uTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3RhdGUpOworICAgICAgICBpZiAo
c2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCAmJiBVTkxJS0VM
WSghdGhpc09iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93VGhp
c1R5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1l
LCBvcGVyYXRpb25OYW1lKTsKKyAgICAgICAgICAgIC8vIEZvciBjdXN0b20gcHJvbWlzZS1yZXR1
cm5pbmcgb3BlcmF0aW9ucworICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoVGhp
c1R5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25O
YW1lKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7CisgICAgICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygpKTsKKyAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5lcmF0ZWQg
Y29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNPYmplY3QuCisgICAgICAg
IHJldHVybiBvcGVyYXRpb25DYWxsZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9uIHNldHRlciwgQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6VGhyb3c+CisgICAgc3RhdGljIGJvb2wgc2V0QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHN0YXRlKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yQXR0
cmlidXRlKCpzdGF0ZSwgdGhpc1ZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2Jq
ZWN0KSkKKyAgICAgICAgICAgIHJldHVybiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OlRocm93KSA/IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpIDogZmFsc2U7Cisg
ICAgICAgIHJldHVybiBzZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgSlNDOjpKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgdGhyb3dTY29wZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
QXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBz
aG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0aWMg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBhdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7CisgICAgICAgIGlmIChVTkxJ
S0VMWSghdGhpc09iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFz
c05hbWUsIGF0dHJpYnV0ZU5hbWUpOworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlKQorICAgICAgICAgICAgICAgIHJl
dHVybiByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6Omlu
Zm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBKU0M6
OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzVW5kZWZpbmVkKCkpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwg
dGhyb3dTY29wZSkpOworICAgIH0KK307CisKKy8vIEV4Y2VwdGlvbk9yIGhhbmRsaW5nLgordm9p
ZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBF
eGNlcHRpb25Pcjx2b2lkPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUm
LCBFeGNlcHRpb25PcjxUPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6
OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKTsKKworLy8gSW5saW5lIGZ1bmN0
aW9ucyBhbmQgdGVtcGxhdGUgZGVmaW5pdGlvbnMuCisKK2lubGluZSBKU0M6OlN0cnVjdHVyZSog
RE9NQ29uc3RydWN0b3JPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorewor
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKK30KKworaW5saW5lIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpET01Db25zdHJ1Y3Rvck9i
amVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQorICAgIDogSlNET01PYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9
CisKK2lubGluZSBTdHJpbmcgRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBK
U09iamVjdCopCit7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRnVuY3Rpb24iKTsKK30KKwor
aW5saW5lIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0OjpET01Db25zdHJ1Y3RvckpTQnVp
bHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQorICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9i
YWxPYmplY3QpCit7Cit9CisKK2lubGluZSBKU0M6OkpTRnVuY3Rpb24qIERPTUNvbnN0cnVjdG9y
SlNCdWlsdGluT2JqZWN0Ojppbml0aWFsaXplRnVuY3Rpb24oKQoreworICAgIHJldHVybiBtX2lu
aXRpYWxpemVGdW5jdGlvbi5nZXQoKTsKK30KKworaW5saW5lIHZvaWQgRE9NQ29uc3RydWN0b3JK
U0J1aWx0aW5PYmplY3Q6OnNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiB2bSwgSlNDOjpK
U0Z1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBtX2luaXRpYWxpemVGdW5jdGlvbi5zZXQodm0s
IHRoaXMsICZmdW5jdGlvbik7Cit9CisKK2lubGluZSBKU0RPTUdsb2JhbE9iamVjdCogZGVwcmVj
YXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICAvLyBGSVhNRTogQ2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2luZyB0aGUg
Z2xvYmFsIG9iamVjdAorICAgIC8vIGZyb20gd2hpY2ggdGhlIG9iamVjdCBpcyBiZWluZyBjcmVh
dGVkLCBpbnN0ZWFkIG9mIGFzc3VtaW5nIHRoZSBsZXhpY2FsIG9uZS4KKyAgICAvLyBlLmcuIHN1
YmZyYW1lLmRvY3VtZW50LmJvZHkgc2hvdWxkIHVzZSB0aGUgc3ViZnJhbWUncyBnbG9iYWwgb2Jq
ZWN0LCBub3QgdGhlIGxleGljYWwgb25lLgorICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3RydWN0dXJlKiBnZXRET01TdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgaWYgKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYWNoZWRET01TdHJ1Y3R1cmUo
Z2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmluZm8oKSkpCisgICAgICAgIHJldHVybiBzdHJ1
Y3R1cmU7CisgICAgcmV0dXJuIGNhY2hlRE9NU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgV3JhcHBl
ckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFzczo6
Y3JlYXRlUHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSksIFdyYXBwZXJDbGFzczo6aW5mbygp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1
Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgd3JvbmcuIEl0IHVzZXMgdGhlIHdyb25n
IGdsb2JhbCBvYmplY3QgZm9yIGNyZWF0aW5nIHRoZSBwcm90b3R5cGUgc3RydWN0dXJlLgorICAg
IHJldHVybiBnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihleGVjLT52bSgpLCAqZGVwcmVj
YXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldERPTVByb3RvdHlwZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJl
dHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oYXNPYmplY3QoZ2V0RE9NU3RydWN0dXJl
PFdyYXBwZXJDbGFzcz4odm0sICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2Jh
bE9iamVjdCkpLT5zdG9yZWRQcm90b3R5cGUoKSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBK
U0NsYXNzPiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0aW4oSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlvbiwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QgPSBKU0NsYXNzOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpTQ2xhc3M+KGdsb2JhbE9iamVj
dC52bSgpLCBnbG9iYWxPYmplY3QpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICBjYWxsRnVuY3Rpb25X
aXRoQ3VycmVudEFyZ3VtZW50cyhzdGF0ZSwgKm9iamVjdCwgaW5pdGlhbGl6ZUZ1bmN0aW9uKTsK
KyAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsKK30KKworaW5saW5lIEpT
Qzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwg
SlNDOjpBcnJheUJ1ZmZlciopCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlcio+KHdvcmxkLnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci5nZXQo
KSktPndyYXBwZXJPd25lcigpOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBlcktleShKU0M6OkFy
cmF5QnVmZmVyKiBkb21PYmplY3QpCit7CisgICAgcmV0dXJuIGRvbU9iamVjdDsKK30KKworaW5s
aW5lIEpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYs
IHZvaWQqKSB7IHJldHVybiBudWxscHRyOyB9CitpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRX
cmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCosIEpTQzo6V2Vha0hh
bmRsZU93bmVyKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIGNsZWFySW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqKSB7IHJldHVy
biBmYWxzZTsgfQorCitpbmxpbmUgSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIo
RE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QpCit7Cisg
ICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gZG9tT2JqZWN0LT53cmFwcGVyKCk7Cit9CisKK2lubGluZSBKU0M6OkpTQXJyYXlCdWZm
ZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpB
cnJheUJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGJ1ZmZlci0+bV93cmFwcGVyLmdldCgpOwor
fQorCitpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYg
d29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTU9iamVjdCogd3JhcHBlciwg
SlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcikKK3sKKyAgICBpZiAoIXdvcmxkLmlz
Tm9ybWFsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb21PYmplY3QtPnNldFdyYXBw
ZXIod3JhcHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQpOworICAgIHJldHVybiB0cnVlOworfQor
CitpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29y
bGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFw
cGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKQoreworICAgIGlmICghd29y
bGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvbU9iamVjdC0+bV93
cmFwcGVyID0gSlNDOjpXZWFrPEpTQzo6SlNBcnJheUJ1ZmZlcj4od3JhcHBlciwgd3JhcHBlck93
bmVyLCAmd29ybGQpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBjbGVhcklu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxl
KiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyKQoreworICAgIGlmICghd29ybGQuaXNO
b3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvbU9iamVjdC0+Y2xlYXJXcmFw
cGVyKHdyYXBwZXIpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBjbGVhcklu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZl
ciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIpCit7CisgICAgaWYgKCF3
b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgd2Vha0NsZWFyKGRv
bU9iamVjdC0+bV93cmFwcGVyLCB3cmFwcGVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRX
cmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzJiBkb21PYmplY3QpCit7Cisg
ICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCAmZG9t
T2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIHdvcmxkLm1fd3Jh
cHBlcnMuZ2V0KHdyYXBwZXJLZXkoJmRvbU9iamVjdCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCBjYWNoZVdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgV3JhcHBlckNs
YXNzKiB3cmFwcGVyKQoreworICAgIEpTQzo6V2Vha0hhbmRsZU93bmVyKiBvd25lciA9IHdyYXBw
ZXJPd25lcih3b3JsZCwgZG9tT2JqZWN0KTsKKyAgICBpZiAoc2V0SW5saW5lQ2FjaGVkV3JhcHBl
cih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyLCBvd25lcikpCisgICAgICAgIHJldHVybjsKKyAg
ICB3ZWFrQWRkKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwgSlNDOjpX
ZWFrPEpTQzo6SlNPYmplY3Q+KHdyYXBwZXIsIG93bmVyLCAmd29ybGQpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQg
dW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVj
dCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQoreworICAgIGlmIChjbGVhcklubGluZUNhY2hlZFdy
YXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCisgICAgICAgIHJldHVybjsKKyAgICB3
ZWFrUmVtb3ZlKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwgd3JhcHBl
cik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBpbmxpbmUg
YXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxU
PiYmIGRvbU9iamVjdCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPERP
TUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxE
T01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCit7CisgICAgdXNpbmcgV3JhcHBlckNsYXNz
ID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBl
ckNsYXNzOworCisgICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29y
bGQoKSwgZG9tT2JqZWN0KSk7CisgICAgYXV0byogZG9tT2JqZWN0UHRyID0gZG9tT2JqZWN0LnB0
cigpOworICAgIGF1dG8qIHdyYXBwZXIgPSBXcmFwcGVyQ2xhc3M6OmNyZWF0ZShnZXRET01TdHJ1
Y3R1cmU8V3JhcHBlckNsYXNzPihnbG9iYWxPYmplY3QtPnZtKCksICpnbG9iYWxPYmplY3QpLCBn
bG9iYWxPYmplY3QsIFdURk1vdmUoZG9tT2JqZWN0KSk7CisgICAgY2FjaGVXcmFwcGVyKGdsb2Jh
bE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0UHRyLCB3cmFwcGVyKTsKKyAgICByZXR1cm4gd3Jh
cHBlcjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlubGlu
ZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVm
PFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1l
PERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCit7CisgICAgcmV0dXJuIGNyZWF0ZVdy
YXBwZXI8RE9NQ2xhc3M+KGdsb2JhbE9iamVjdCwgc3RhdGljX3JlZmVyZW5jZV9jYXN0PERPTUNs
YXNzPihXVEZNb3ZlKGRvbU9iamVjdCkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xh
c3M+IGlubGluZSBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERPTUNsYXNzJiBkb21PYmplY3QpCit7CisgICAg
aWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQo
KSwgZG9tT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIHRvSlNO
ZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgUmVmPERPTUNsYXNzPihkb21PYmplY3Qp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQ2xhc3MmIGNhc3RU
aGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQoreworICAgIGF1dG8gdGhpc1ZhbHVlID0g
c3RhdGUudGhpc1ZhbHVlKCk7CisgICAgYXV0byBjYXN0ZWRUaGlzID0ganNEeW5hbWljRG93bmNh
c3Q8SlNDbGFzcyo+KHN0YXRlLnZtKCksIHRoaXNWYWx1ZSk7CisgICAgQVNTRVJUKGNhc3RlZFRo
aXMpOworICAgIHJldHVybiAqY2FzdGVkVGhpczsKK30KKworaW5saW5lIGludDMyX3QgZmluaXRl
SW50MzJWYWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBib29s
JiBva2F5KQoreworICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcihleGVjKTsKKyAg
ICBva2F5ID0gc3RkOjppc2Zpbml0ZShudW1iZXIpOworICAgIHJldHVybiBKU0M6OnRvSW50MzIo
bnVtYmVyKTsKK30KKworLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBz
ZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCitpbmxp
bmUgSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpCit7CisgICAgSlNDOjpWTSYgdm0gPSBl
eGVjLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0KCk7CisgICAgaWYgKCFv
YmplY3QpIHsKKyAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29wZSk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEpTQzo6SlNWYWx1ZSBsZW5ndGhW
YWx1ZSA9IG9iamVjdC0+Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAgaWYgKGxlbmd0
aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVF
cnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IGxlbmd0aCA9IGxlbmd0aFZhbHVlLnRvVUludDMyKCZleGVjKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK2lubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICBpZiAo
YXV0byByZXN1bHQgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgYnVm
ZmVyKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIC8vIFRoZSBKU0FycmF5QnVmZmVy
OjpjcmVhdGUgZnVuY3Rpb24gd2lsbCByZWdpc3RlciB0aGUgd3JhcHBlciBpbiBmaW5pc2hDcmVh
dGlvbi4KKyAgICByZXR1cm4gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUtPnZtKCks
IGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYnVmZmVyLnNoYXJpbmdNb2RlKCkp
LCAmYnVmZmVyKTsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVm
ZmVyVmlldyYgdmlldykKK3sKKyAgICByZXR1cm4gdmlldy53cmFwKHN0YXRlLCBnbG9iYWxPYmpl
Y3QpOworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyKiBidWZm
ZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwor
ICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICpidWZmZXIpOworfQorCitpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3KiB2aWV3KQoreworICAg
IGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgcmV0dXJuIHRv
SlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKnZpZXcpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIHB0cikKK3sKKyAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+JiYgcHRyKQoreworICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VD4mIHZlY3RvcikK
K3sKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0g
Y29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXJyYXktPnB1dERp
cmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0pKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAg
IH0KKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mIHZlY3RvcikKK3sKKyAgICBK
U0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4
KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0uZ2V0KCkpKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIH0K
KyAgICByZXR1cm4gYXJyYXk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1l
JiBwcml2YXRlTmFtZSkKK3sKKyAgICByZXR1cm4gSlNDOjpTeW1ib2w6OmNyZWF0ZShleGVjLT52
bSgpLCBwcml2YXRlTmFtZS51aWQoKSk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0
ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KCZz
dGF0ZSwgdmFsdWUsIGZhbHNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY3Jl
YXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVj
dCwgdmFsdWUpLCBmYWxzZSk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9y
RW5kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JS
ZXN1bHRPYmplY3QoJnN0YXRlLCBKU0M6OmpzVW5kZWZpbmVkKCksIHRydWUpOworfQorCitpbmxp
bmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZm
ZXJWaWV3KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byogd3Jh
cHBlciA9IGpzRHluYW1pY0Rvd25jYXN0PEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqPih2bSwgdmFs
dWUpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0
dXJuIHdyYXBwZXItPnBvc3NpYmx5U2hhcmVkSW1wbCgpOworfQorCitpbmxpbmUgUmVmUHRyPEpT
Qzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mIHZt
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byByZXN1bHQgPSB0b1Bvc3NpYmx5U2hh
cmVkQXJyYXlCdWZmZXJWaWV3KHZtLCB2YWx1ZSk7CisgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0
LT5pc1NoYXJlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitpbmxpbmUgUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50
OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Q
b3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDhBZGFwdG9yPih2bSwgdmFsdWUp
OyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDE2
QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bv
c3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFwdG9yPih2bSwgdmFsdWUp
OyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMy
QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bv
c3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFwdG9yPih2bSwgdmFsdWUp
OyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4
QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bv
c3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwgdmFsdWUp
OyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlTaGFy
ZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENsYW1w
ZWRBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+
IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpV
aW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDMyQXJy
YXk+IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlND
OjpVaW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQz
MkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmll
dzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6
RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mIHZtLCBK
U0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5
cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9CisKK2lubGluZSBSZWZQ
dHI8SlNDOjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpT
Qzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQxNkFy
cmF5PiB0b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQxNkFkYXB0
b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Vuc2hh
cmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1
ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Vuc2hhcmVkVWludDhBcnJh
eShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFy
ZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGlu
ZSBSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xhbXBlZEFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNo
YXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7
IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNoYXJlZFVpbnQxNkFycmF5
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJl
ZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGlu
ZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5
cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8
SlNDOjpGbG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3
PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpG
bG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6
RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgSlNUPiBpbmxpbmUgVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIHRocm93U2VxdWVuY2VUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBW
ZWN0b3I8UmVmPFQ+PiByZXN1bHQ7CisgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCB2YWx1
ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNW
YWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgICAgICBpZiAoanNWYWx1ZS5pbmhlcml0cyh2bSwgSlNUOjppbmZvKCkpKSB7
CisgICAgICAgICAgICBhdXRvKiBvYmplY3QgPSBKU1Q6OnRvV3JhcHBlZCh2bSwganNWYWx1ZSk7
CisgICAgICAgICAgICBBU1NFUlQob2JqZWN0KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
Km9iamVjdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhyb3dBcnJheUVsZW1lbnRU
eXBlRXJyb3IoKnN0YXRlLCBzY29wZSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworaW5saW5lIFN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCit7CisgICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSk7Cisg
ICAgcmV0dXJuIHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFtZS51aWQoKSA6IHByb3Bl
cnR5TmFtZS5wdWJsaWNOYW1lKCk7Cit9CisKK2lubGluZSBBdG9taWNTdHJpbmcgcHJvcGVydHlO
YW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAg
IHJldHVybiBBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVp
ZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Cit9CisKK3RlbXBsYXRlPEpTQzo6TmF0
aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFs
dWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7Cisg
ICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKGV4
ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9wZXJ0eU5h
bWUucHVibGljTmFtZSgpLCBuYXRpdmVGdW5jdGlvbikpOworfQorCitBTFdBWVNfSU5MSU5FIHZv
aWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCit7CisgICAgaWYgKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBwcm9wYWdhdGVFeGNlcHRp
b25TbG93UGF0aChzdGF0ZSwgdGhyb3dTY29wZSwgV1RGTW92ZShleGNlcHRpb24pKTsKK30KKwor
aW5saW5lIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25Pcjx2b2lkPiYmIHZhbHVlKQorewor
ICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpCisgICAgICAgIHByb3BhZ2F0
ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQoreworICAgIGlm
IChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhj
ZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxP
YmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VM
WSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0
YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9i
YWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBUJiBub2RlKQoreworICAgIHJldHVybiBzaG91bGRBbGxv
d0FjY2Vzc1RvTm9kZShzdGF0ZSwgJm5vZGUpID8gJm5vZGUgOiBudWxscHRyOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5
Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQqIG5vZGUpCit7CisgICAgcmV0dXJuIHNo
b3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBub2RlKSA/IG5vZGUgOiBudWxscHRyOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1
cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRp
b25PcjxUKj4mJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIGNoZWNrU2Vj
dXJpdHlGb3JOb2RlKHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5
OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9y
PFQmPiYmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gY2hlY2tTZWN1cml0
eUZvck5vZGUoc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQoj
IyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXJDYWNoZS5oCShy
ZXZpc2lvbiAyMTEzNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBw
ZXJDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMjkgKzI0LDIwIEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiSlNEeW5hbWljRG93
bmNhc3QuaCIKICNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKICNpbmNsdWRlICJTY3JpcHRX
cmFwcGFibGVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
LmgiCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLSNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+Ci0j
aW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KICNpbmNsdWRlIDxoZWFwL1dlYWsu
aD4KICNpbmNsdWRlIDxoZWFwL1dlYWtJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9BdXhp
bGlhcnlCYXJyaWVySW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNs
dWRlIDxydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNB
cnJheS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ2VsbElubGlu
ZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvSlNUeXBlZEFycmF5cy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvU3Ry
dWN0dXJlSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4K
ICNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9Xcml0
ZUJhcnJpZXIuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9HZXRQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0KLS8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgZmlsZSBhIGxvdCBlYXNpZXIgdG8g
cmVhZCBieSBwdXR0aW5nIGFsbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXQgdGhlIHRvcCwKLS8v
IGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucyBiZWxvdywgZXZlbiBmb3IgdGVtcGxhdGUgYW5kIGlu
bGluZSBmdW5jdGlvbnMuCi0KLW5hbWVzcGFjZSBKU0MgewotY2xhc3MgSlNGdW5jdGlvbjsKLX0K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDYWNoZWRTY3JpcHQ7Ci1jbGFzcyBEZWZl
cnJlZFByb21pc2U7Ci1jbGFzcyBET01XaW5kb3c7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIFVSTDsK
LWNsYXNzIE5vZGU7Ci0KLXN0cnVjdCBFeGNlcHRpb25EZXRhaWxzIHsKLSAgICBTdHJpbmcgbWVz
c2FnZTsKLSAgICBpbnQgbGluZU51bWJlciB7IDAgfTsKLSAgICBpbnQgY29sdW1uTnVtYmVyIHsg
MCB9OwotICAgIFN0cmluZyBzb3VyY2VVUkw7Ci19OwotCi0vLyBCYXNlIGNsYXNzIGZvciBhbGwg
Y29uc3RydWN0b3Igb2JqZWN0cyBpbiB0aGUgSlNDIGJpbmRpbmdzLgotY2xhc3MgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgOiBwdWJsaWMgSlNET01PYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYg
SlNET01PYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwg
SlNDOjpJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91bGRDYWxs
R2V0Q2FsbERhdGE7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwotCi1wcm90ZWN0
ZWQ6Ci0gICAgRE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2Jh
bE9iamVjdCYpOwotCi0gICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3Qq
KTsKLSAgICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBKU0M6OkNh
bGxEYXRhJik7Ci19OwotCi1jbGFzcyBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCA6IHB1
YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25z
dHJ1Y3Rvck9iamVjdCBCYXNlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgRE9NQ29uc3RydWN0b3JKU0J1
aWx0aW5PYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7
Ci0KLSAgICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOwotICAgIHZvaWQg
c2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKLQotcHJp
dmF0ZToKLSAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6
ZUZ1bmN0aW9uOwotfTsKLQotRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coSlNDOjpFeGVjU3Rh
dGUqKTsKLURPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci1ET01X
aW5kb3cmIGZpcnN0RE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci0KLVdFQkNPUkVfRVhQT1JU
IEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRl
TmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUpOwotCi12b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogYXR0cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKLVdFQkNPUkVf
RVhQT1JUIGJvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKTsKLQotdm9pZCB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93RE9NU3ludGF4RXJyb3IoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsgLy8gTm90IHRoZSBzYW1lIGFzIGEgSmF2
YVNjcmlwdCBzeW50YXggZXJyb3IuCi12b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLXZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwot
V0VCQ09SRV9FWFBPUlQgdm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93Tm90U3VwcG9ydGVkRXJy
b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdl
KTsKLXZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgdGhyb3dT
ZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9p
ZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
Jik7Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11
c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVk
IGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVu
Y3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIq
IGV4cGVjdGVkVmFsdWVzKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RC
ZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25l
ZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKLVdFQkNPUkVf
RVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0
IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1XRUJD
T1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJy
b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZW1iZXJO
YW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBl
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSk7Ci0KLVN0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9y
TWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKTsKLVN0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBh
dHRyaWJ1dGVOYW1lKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dU
aGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKLQotV0VCQ09SRV9F
WFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWpl
Y3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7Ci1XRUJDT1JFX0VYUE9S
VCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJh
dGlvbk5hbWUpOwotCiBXRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9N
U3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKIFdF
QkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2Jh
bE9iamVjdCYsIEpTQzo6U3RydWN0dXJlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKIApAQCAt
MTU0LDEwICs0NSw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpTdHIK
IHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpTdHJ1Y3R1cmUqIGRlcHJlY2F0
ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqKTsKIHRlbXBsYXRlPHR5cGVuYW1lIFdy
YXBwZXJDbGFzcz4gSlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6
OkpTR2xvYmFsT2JqZWN0Kik7CiAKLXZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVu
dHMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVu
Y3Rpb24mKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gSlNDOjpFbmNvZGVkSlNWYWx1
ZSBjcmVhdGVKU0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRp
YWxpemVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQogSlNDOjpXZWFrSGFuZGxlT3du
ZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKik7CiB2
b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIqKTsKIApAQCAtMTgyLDI1MCArNjksOSBA
QCB0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gCiAKIHRlbXBsYXRlPHR5
cGVuYW1lIERPTUNsYXNzPiBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgRE9NQ2xhc3MmKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4g
SlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYpOwotCi12b2lkIGFkZEltcHVy
ZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYpOwotCi1jb25zdCBKU0M6Okhhc2hUYWJsZSYg
Z2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShKU0M6OlZNJiwgY29uc3QgSlNDOjpIYXNoVGFibGUm
IHN0YXRpY1RhYmxlKTsKLQotU3RyaW5nIHJldHJpZXZlRXJyb3JNZXNzYWdlKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIEpTQzo6Q2F0Y2hTY29wZSYp
OwotV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7Ci1XRUJDT1JF
X0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0
aW9uKiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIsIEV4Y2VwdGlvbkRldGFpbHMqID0gbnVsbHB0
cik7Ci12b2lkIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKLQotSlND
OjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2VwdGlvbiYm
KTsKLUpTQzo6SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBFeGNl
cHRpb25Db2RlLCBjb25zdCBTdHJpbmcmKTsKLQotLy8gQ29udmVydCBhIERPTSBpbXBsZW1lbnRh
dGlvbiBleGNlcHRpb24gaW50byBhIEphdmFTY3JpcHQgZXhjZXB0aW9uIGluIHRoZSBleGVjdXRp
b24gc3RhdGUuCi12b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgcHJvcGFnYXRl
RXhjZXB0aW9uU2xvd1BhdGgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNl
cHRpb24mJik7Ci0KLUpTQzo6SlNWYWx1ZSBqc1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IFVSTCYpOyAvLyBlbXB0eSBpZiB0aGUgVVJMIGlzIG51bGwKLQotSlNDOjpKU1ZhbHVlIGpzU3Ry
aW5nT3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsgLy8gdW5kZWZp
bmVkIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAotSlNDOjpKU1ZhbHVlIGpzU3RyaW5nT3JVbmRlZmlu
ZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBVUkwmKTsgLy8gdW5kZWZpbmVkIGlmIHRoZSBVUkwg
aXMgbnVsbAotCi0vLyBTZWUgSmF2YVNjcmlwdENvcmUgZm9yIGV4cGxhbmF0aW9uOiBTaG91bGQg
YmUgdXNlZCBmb3IgYW55IHN0cmluZyB0aGF0IGlzIGFscmVhZHkgb3duZWQgYnkgYW5vdGhlcgot
Ly8gb2JqZWN0LCB0byBsZXQgdGhlIGVuZ2luZSBrbm93IHRoYXQgY29sbGVjdGluZyB0aGUgSlNT
dHJpbmcgd3JhcHBlciBpcyB1bmxpa2VseSB0byBzYXZlIG1lbW9yeS4KLUpTQzo6SlNWYWx1ZSBq
c093bmVkU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7Ci0KLVN0
cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7Ci0KLUF0b21pY1N0
cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7Ci0KLVdF
QkNPUkVfRVhQT1JUIFN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEpTQzo6RXhlY1N0YXRl
JiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgdmFsdWVU
b0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYpOwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmco
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi1pbnQzMl90IGZpbml0ZUludDMyVmFs
dWUoSlNDOjpKU1ZhbHVlLCBKU0M6OkV4ZWNTdGF0ZSosIGJvb2wmIG9rYXkpOwotCi0vLyBUaGUg
Zm9sbG93aW5nIGZ1bmN0aW9ucyBjb252ZXJ0IHZhbHVlcyB0byBpbnRlZ2VycyBhcyBwZXIgdGhl
IFdlYklETCBzcGVjaWZpY2F0aW9uLgotLy8gVGhlIGNvbnZlcnNpb24gZmFpbHMgaWYgdGhlIHZh
bHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgb3IsIGlmIEVuZm9yY2VSYW5nZSBp
cyBzcGVjaWZpZWQsCi0vLyB0aGUgdmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIGRl
c3RpbmF0aW9uIGludGVnZXIgdHlwZS4KLQotV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50OEVu
Zm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9S
VCB1aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdlKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2
RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQ
T1JUIGludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50
NjRFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9F
WFBPUlQgdWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwotCi1XRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4Q2xhbXAoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4Q2xh
bXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MTZf
dCB0b0ludDE2Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9F
WFBPUlQgdWludDE2X3QgdG9VSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJDbGFtcChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQzMkNsYW1wKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9J
bnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JU
IHVpbnQ2NF90IHRvVUludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
Ci1XRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTYoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTYoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0lu
dDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ2
NF90IHRvVUludDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotSlNDOjpKU1Zh
bHVlIGpzRGF0ZShKU0M6OkV4ZWNTdGF0ZSosIGRvdWJsZSB2YWx1ZSk7Ci0KLS8vIE5hTiBpZiB0
aGUgdmFsdWUgY2FuJ3QgYmUgY29udmVydGVkIHRvIGEgZGF0ZS4KLWRvdWJsZSB2YWx1ZVRvRGF0
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7Ci0KLS8vIFZhbGlkYXRlcyB0aGF0IHRo
ZSBwYXNzZWQgb2JqZWN0IGlzIGEgc2VxdWVuY2UgdHlwZSBwZXIgc2VjdGlvbiA0LjEuMTMgb2Yg
dGhlIFdlYklETCBzcGVjLgotSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlLCB1bnNpZ25lZCYgbGVuZ3RoKTsKLQotSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXIm
KTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Jik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciopOwotSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJh
eUJ1ZmZlclZpZXcqKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJik7Ci10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgUmVmUHRyPFQ+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFZlY3RvcjxU
PiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFZlY3RvcjxSZWZQdHI8VD4+Jik7Ci1KU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3Qg
SlNDOjpQcml2YXRlTmFtZSYpOwotCi1KU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhl
Y1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgY29uc3QgVCYpOwotSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvckVuZChK
U0M6OkV4ZWNTdGF0ZSYpOwotCi1SZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvUG9zc2li
bHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8
SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MTZB
cnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRv
UG9zc2libHlTaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRy
PEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYsIEpT
Qzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9Qb3NzaWJseVNo
YXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpT
Qzo6VWludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiwgSlND
OjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWlu
dDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpGbG9hdDMyQXJy
YXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
Ci1SZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDY0QXJyYXko
SlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4g
dG9VbnNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0
cjxKU0M6OkludDhBcnJheT4gdG9VbnNoYXJlZEludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1Zh
bHVlKTsKLVJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFycmF5KEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9VbnNoYXJlZElu
dDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OEFycmF5
PiB0b1Vuc2hhcmVkVWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxK
U0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNoYXJlZFVp
bnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDMyQXJy
YXk+IHRvVW5zaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0
cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiwgSlND
OjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZsb2F0NjRB
cnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgSlNUeXBlPiBWZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSXRlcmF0b3JNZXRo
b2QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi1lbnVtIFNlY3VyaXR5UmVwb3J0
aW5nT3B0aW9uIHsgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yLCBMb2dTZWN1cml0eUVycm9yLCBU
aHJvd1NlY3VyaXR5RXJyb3IgfTsKLW5hbWVzcGFjZSBCaW5kaW5nU2VjdXJpdHkgewotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRl
JiwgVCYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JOb2Rl
KEpTQzo6RXhlY1N0YXRlJiwgVCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEV4Y2VwdGlv
bk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2VwdGlvbk9y
PFQqPiYmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNlcHRpb25PcjxUKj4gY2hlY2tT
ZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb25PcjxUJj4mJik7Ci0gICAg
Ym9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKiwgRE9NV2lu
ZG93JiwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1cml0eUVycm9yKTsKLSAgICBi
b29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUmLCBET01XaW5k
b3cmLCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1l
KEpTQzo6RXhlY1N0YXRlKiwgRnJhbWUqLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9IExvZ1Nl
Y3VyaXR5RXJyb3IpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6RXhl
Y1N0YXRlJiwgRnJhbWUmLCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dB
Y2Nlc3NUb05vZGUoSlNDOjpFeGVjU3RhdGUmLCBOb2RlKik7Ci19OwotCi12b2lkIHByaW50RXJy
b3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotCi1TdHJp
bmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwotQXRvbWljU3RyaW5n
IHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKLQotdGVtcGxh
dGU8SlNDOjpOYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBu
b25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci0KLQotZW51bSBjbGFzcyBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvciB7IFRocm93LCBSZXR1cm5FYXJseSwgUmVqZWN0UHJvbWlzZSwgQXNzZXJ0
IH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+Ci1zdHJ1Y3QgQmluZGluZ0NhbGxlciB7
Ci0gICAgdXNpbmcgQXR0cmlidXRlU2V0dGVyRnVuY3Rpb24gPSBib29sKEpTQzo6RXhlY1N0YXRl
JiwgSlNDbGFzcyYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAgdXNpbmcg
QXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gPSBKU0M6OkpTVmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBK
U0NsYXNzJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAgdXNpbmcgT3BlcmF0aW9uQ2FsbGVyRnVu
Y3Rpb24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDbGFzcyosIEpT
Qzo6VGhyb3dTY29wZSYpOwotICAgIHVzaW5nIFByb21pc2VPcGVyYXRpb25DYWxsZXJGdW5jdGlv
biA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwgUmVmPERl
ZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0KLSAgICBzdGF0aWMgSlNDbGFz
cyogY2FzdEZvckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6RW5jb2RlZEpTVmFsdWUp
OwotICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlJik7
Ci0KLSAgICB0ZW1wbGF0ZTxQcm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gb3BlcmF0aW9u
Q2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlPgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1Zh
bHVlIGNhbGxQcm9taXNlT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUmVmPERlZmVy
cmVkUHJvbWlzZT4mJiBwcm9taXNlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBj
YXN0Rm9yT3BlcmF0aW9uKCpzdGF0ZSk7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdyAhPSBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0ICYmIFVOTElLRUxZKCF0aGlzT2JqZWN0KSkKLSAg
ICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IocHJvbWlzZS5n
ZXQoKSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOwotICAgICAg
ICBBU1NFUlQodGhpc09iamVjdCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygpKTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBm
b3Igc3RhdGUgYW5kIHRoaXNPYmplY3QuCi0gICAgICAgIHJldHVybiBvcGVyYXRpb25DYWxsZXIo
c3RhdGUsIHRoaXNPYmplY3QsIFdURk1vdmUocHJvbWlzZSksIHRocm93U2NvcGUpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNhbGxlciwg
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6VGhyb3c+Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbE9wZXJhdGlv
bihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpCi0gICAg
ewotICAgICAgICBBU1NFUlQoc3RhdGUpOwotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAgICAgYXV0byogdGhpc09iamVjdCA9
IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsKLSAgICAgICAgaWYgKHNob3VsZFRocm93ICE9IENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5MSUtFTFkoIXRoaXNPYmplY3QpKSB7
Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6
OlRocm93KQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9uTmFtZSk7
Ci0gICAgICAgICAgICAvLyBGb3IgY3VzdG9tIHByb21pc2UtcmV0dXJuaW5nIG9wZXJhdGlvbnMK
LSAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoKnN0YXRl
LCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9uTmFtZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIEpTQ2xhc3M6OmluZm8oKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgcmVmYWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgdG8gdXNlIHJlZmVy
ZW5jZXMgZm9yIHN0YXRlIGFuZCB0aGlzT2JqZWN0LgotICAgICAgICByZXR1cm4gb3BlcmF0aW9u
Q2FsbGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTxBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiBzZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgotICAgIHN0
YXRpYyBib29sIHNldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgY29u
c3QgY2hhciogYXR0cmlidXRlTmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSk7Ci0g
ICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkp
OwotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3RhdGUsIHRo
aXNWYWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCi0gICAgICAgICAg
ICByZXR1cm4gKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykg
PyB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8o
KS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKSA6IGZhbHNlOwotICAgICAgICByZXR1cm4gc2V0
dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIEpTQzo6SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSksIHRocm93U2NvcGUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPEF0dHJpYnV0ZUdldHRlckZ1
bmN0aW9uIGdldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFs
dWUgYXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi0gICAgewotICAgICAgICBBU1NF
UlQoc3RhdGUpOwotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHN0YXRlLT52bSgpKTsKLSAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JBdHRyaWJ1
dGUoKnN0YXRlLCB0aGlzVmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3Qp
KSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OlRocm93KQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigq
c3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVO
YW1lKTsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6UmVqZWN0UHJvbWlzZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlz
ZVdpdGhHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwg
YXR0cmlidXRlTmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUo
SlNDOjpqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSlNDOjpKU1Zh
bHVlOjplbmNvZGUoZ2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpKTsKLSAg
ICB9Ci19OwotCi0vLyBFeGNlcHRpb25PciBoYW5kbGluZy4KLXZvaWQgcHJvcGFnYXRlRXhjZXB0
aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8dm9pZD4m
Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VD4m
Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChK
U0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhj
ZXB0aW9uT3I8VD4mJiB2YWx1ZSk7CiAKIC8vIElubGluZSBmdW5jdGlvbnMgYW5kIHRlbXBsYXRl
IGRlZmluaXRpb25zLgogCi1pbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLXsKLSAgICByZXR1cm4gSlNDOjpT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUlu
Zm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Ci19Ci0KLWlubGlu
ZSBET01Db25zdHJ1Y3Rvck9iamVjdDo6RE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICA6IEpT
RE9NT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQotewotfQotCi1pbmxpbmUgU3RyaW5n
IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKQotewotICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoIkZ1bmN0aW9uIik7Ci19Ci0KLWlubGluZSBET01Db25zdHJ1
Y3RvckpTQnVpbHRpbk9iamVjdDo6RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QoSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAg
ICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQotewotfQot
Ci1pbmxpbmUgSlNDOjpKU0Z1bmN0aW9uKiBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6
aW5pdGlhbGl6ZUZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gbV9pbml0aWFsaXplRnVuY3Rpb24u
Z2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojpz
ZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYgdm0sIEpTQzo6SlNGdW5jdGlvbiYgZnVuY3Rp
b24pCi17Ci0gICAgbV9pbml0aWFsaXplRnVuY3Rpb24uc2V0KHZtLCB0aGlzLCAmZnVuY3Rpb24p
OwotfQotCiBpbmxpbmUgSlNET01HbG9iYWxPYmplY3QqIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RG
b3JQcm90b3R5cGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgLy8gRklYTUU6IENhbGxl
cnMgdG8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNpbmcgdGhlIGdsb2JhbCBvYmplY3QKQEAg
LTQ1MiwxMyArOTgsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBK
CiAgICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTQzo6SlNPYmplY3QqPihhc09iamVjdChnZXRET01T
dHJ1Y3R1cmU8V3JhcHBlckNsYXNzPih2bSwgKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0
Kj4oZ2xvYmFsT2JqZWN0KSktPnN0b3JlZFByb3RvdHlwZSgpKSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRp
bihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0
aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIEpTQzo6SlNPYmpl
Y3QqIG9iamVjdCA9IEpTQ2xhc3M6OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNDbGFzcz4oZ2xv
YmFsT2JqZWN0LnZtKCksIGdsb2JhbE9iamVjdCksICZnbG9iYWxPYmplY3QpOwotICAgIGNhbGxG
dW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKHN0YXRlLCAqb2JqZWN0LCBpbml0aWFsaXplRnVu
Y3Rpb24pOwotICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShvYmplY3QpOwotfQotCiBp
bmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQm
IHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKikKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2Vi
Q29yZVR5cGVkQXJyYXlDb250cm9sbGVyKj4od29ybGQudm0oKS5tX3R5cGVkQXJyYXlDb250cm9s
bGVyLmdldCgpKS0+d3JhcHBlck93bmVyKCk7CkBAIC01NjQsMjYyICsyMDMsNCBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6CiAgICAgcmV0dXJuIHRvSlNOZXdseUNy
ZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgUmVmPERPTUNsYXNzPihkb21PYmplY3QpKTsKIH0K
IAotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQ2xhc3MmIGNhc3RUaGlzVmFs
dWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQotewotICAgIGF1dG8gdGhpc1ZhbHVlID0gc3RhdGUu
dGhpc1ZhbHVlKCk7Ci0gICAgYXV0byBjYXN0ZWRUaGlzID0ganNEeW5hbWljRG93bmNhc3Q8SlND
bGFzcyo+KHN0YXRlLnZtKCksIHRoaXNWYWx1ZSk7Ci0gICAgQVNTRVJUKGNhc3RlZFRoaXMpOwot
ICAgIHJldHVybiAqY2FzdGVkVGhpczsKLX0KLQotaW5saW5lIGludDMyX3QgZmluaXRlSW50MzJW
YWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBib29sJiBva2F5
KQotewotICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcihleGVjKTsKLSAgICBva2F5
ID0gc3RkOjppc2Zpbml0ZShudW1iZXIpOwotICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVy
KTsKLX0KLQotLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5j
ZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCi1pbmxpbmUgSlND
OjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpCi17Ci0gICAgSlNDOjpWTSYgdm0gPSBleGVjLnZt
KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgSlND
OjpKU09iamVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0KCk7Ci0gICAgaWYgKCFvYmplY3Qp
IHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIEpTQzo6SlNWYWx1ZSBsZW5ndGhWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotCi0gICAgaWYgKGxlbmd0aFZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihl
eGVjLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGxlbmd0
aCA9IGxlbmd0aFZhbHVlLnRvVUludDMyKCZleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKLQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLWlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXImIGJ1ZmZlcikKLXsKLSAgICBpZiAoYXV0byBy
ZXN1bHQgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgYnVmZmVyKSkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIC8vIFRoZSBKU0FycmF5QnVmZmVyOjpjcmVh
dGUgZnVuY3Rpb24gd2lsbCByZWdpc3RlciB0aGUgd3JhcHBlciBpbiBmaW5pc2hDcmVhdGlvbi4K
LSAgICByZXR1cm4gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUtPnZtKCksIGdsb2Jh
bE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYnVmZmVyLnNoYXJpbmdNb2RlKCkpLCAmYnVm
ZmVyKTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyVmll
dyYgdmlldykKLXsKLSAgICByZXR1cm4gdmlldy53cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QpOwot
fQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCi17
Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgIHJl
dHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICpidWZmZXIpOwotfQotCi1pbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAgIGlmICgh
dmlldykKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgcmV0dXJuIHRvSlMoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgKnZpZXcpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIHB0cikKLXsKLSAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+JiYgcHRyKQotewotICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VD4mIHZlY3RvcikKLXsKLSAg
ICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3Ry
dWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXJyYXktPnB1dERpcmVjdElu
ZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0pKTsKLSAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwotICAgIH0KLSAg
ICByZXR1cm4gYXJyYXk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mIHZlY3RvcikKLXsKLSAgICBKU0M6OlZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2
ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMs
IGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0uZ2V0KCkpKTsKLSAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwotICAgIH0KLSAgICBy
ZXR1cm4gYXJyYXk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJiBwcml2
YXRlTmFtZSkKLXsKLSAgICByZXR1cm4gSlNDOjpTeW1ib2w6OmNyZWF0ZShleGVjLT52bSgpLCBw
cml2YXRlTmFtZS51aWQoKSk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwg
dmFsdWUsIGZhbHNlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlSXRl
cmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFs
dWUpLCBmYWxzZSk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yRW5kKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRP
YmplY3QoJnN0YXRlLCBKU0M6OmpzVW5kZWZpbmVkKCksIHRydWUpOwotfQotCi1pbmxpbmUgUmVm
UHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byogd3JhcHBlciA9
IGpzRHluYW1pY0Rvd25jYXN0PEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqPih2bSwgdmFsdWUpOwot
ICAgIGlmICghd3JhcHBlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHdy
YXBwZXItPnBvc3NpYmx5U2hhcmVkSW1wbCgpOwotfQotCi1pbmxpbmUgUmVmUHRyPEpTQzo6QXJy
YXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byByZXN1bHQgPSB0b1Bvc3NpYmx5U2hhcmVkQXJy
YXlCdWZmZXJWaWV3KHZtLCB2YWx1ZSk7Ci0gICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT5pc1No
YXJlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1pbmxpbmUgUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50OEFycmF5
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJs
eVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1p
bmxpbmUgUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDE2QXJyYXko
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5
U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1p
bmxpbmUgUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXko
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5
U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1p
bmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4QXJyYXko
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5
U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1p
bmxpbmUgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50
OENsYW1wZWRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENsYW1wZWRBZGFw
dG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvUG9z
c2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7
IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MTZB
ZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRv
UG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50
MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5
PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQ2
NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmll
dzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci0KLWlubGluZSBSZWZQdHI8SlND
OjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50
OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0
b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQxNkFkYXB0b3I+KHZt
LCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Vuc2hhcmVkSW50
MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRv
VW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0K
LWlubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Vuc2hhcmVkVWludDhBcnJheShKU0M6
OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRp
dmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQ
dHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5h
dGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlu
bGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNoYXJlZFVpbnQxNkFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2
ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQ
dHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBK
U0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmll
dzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpG
bG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6
RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0
QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2
NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
SlNUPiBpbmxpbmUgVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBKU0M6OlZNJiB2bSA9IHN0YXRl
LnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7Ci0gICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Io
c3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8
UmVmPFQ+PiByZXN1bHQ7Ci0gICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCB2YWx1ZSwgWyZy
ZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBq
c1ZhbHVlKSB7Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LQotICAgICAgICBpZiAoanNWYWx1ZS5pbmhlcml0cyh2bSwgSlNUOjppbmZvKCkpKSB7Ci0gICAg
ICAgICAgICBhdXRvKiBvYmplY3QgPSBKU1Q6OnRvV3JhcHBlZCh2bSwganNWYWx1ZSk7Ci0gICAg
ICAgICAgICBBU1NFUlQob2JqZWN0KTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKm9iamVj
dCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJy
b3IoKnN0YXRlLCBzY29wZSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5s
aW5lIFN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCi17Ci0gICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSk7Ci0gICAgcmV0
dXJuIHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFtZS51aWQoKSA6IHByb3BlcnR5TmFt
ZS5wdWJsaWNOYW1lKCk7Ci19Ci0KLWlubGluZSBBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9B
dG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIHJldHVy
biBBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVpZCgpIDog
cHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci19Ci0KLXRlbXBsYXRlPEpTQzo6TmF0aXZlRnVu
Y3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9u
Q2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0
dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZt
KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9wZXJ0eU5hbWUucHVi
bGljTmFtZSgpLCBuYXRpdmVGdW5jdGlvbikpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgcHJv
cGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCi17Ci0gICAgaWYgKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBwcm9wYWdhdGVFeGNlcHRpb25TbG93
UGF0aChzdGF0ZSwgdGhyb3dTY29wZSwgV1RGTW92ZShleGNlcHRpb24pKTsKLX0KLQotaW5saW5l
IHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25Pcjx2b2lkPiYmIHZhbHVlKQotewotICAgIGlm
IChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpCi0gICAgICAgIHByb3BhZ2F0ZUV4Y2Vw
dGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJ
S0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9u
KHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICBy
ZXR1cm4geyB9OwotICAgIH0KLSAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3Qs
IHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1
ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0
aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9
OwotICAgIH0KLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBUJiBub2RlKQotewotICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vz
c1RvTm9kZShzdGF0ZSwgJm5vZGUpID8gJm5vZGUgOiBudWxscHRyOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9k
ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQqIG5vZGUpCi17Ci0gICAgcmV0dXJuIHNob3VsZEFs
bG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBub2RlKSA/IG5vZGUgOiBudWxscHRyOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0eTo6
Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb25PcjxU
Kj4mJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGNoZWNrU2VjdXJpdHlG
b3JOb2RlKHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5OjpjaGVj
a1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQmPiYm
IHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJu
IHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZvck5v
ZGUoc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdl
dEN1c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRUYXJnZXRDdXN0b20uaAkocmV2aXNpb24gMjExMzg5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw4IEBACiAKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcu
aCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmdDYWxsZXIuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRp
bmdTZWN1cml0eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lv
biAyMTEzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNDdXN0b21F
bGVtZW50SW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkpTTm9kZUN1c3RvbS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
ICNpbmNsdWRlIDxydW50aW1lL0ludGVybmFsRnVuY3Rpb24uaD4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiAyMTEz
ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgIkpTTG9jYXRpb24uaCIK
IAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZ1NlY3Vy
aXR5LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIlJ1
bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5o
PgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTXV0
YXRpb25PYnNlcnZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDIxMTM4OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU011dGF0aW9uT2JzZXJ2ZXIuaCIKIAog
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiSlNNdXRhdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSlNOb2RlQ3VzdG9t
LmgiCiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5oIgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2tDdXN0b20uY3BwCShyZXZpc2lvbiAyMTEzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2tDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCiAKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhh
bmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNTUUxFcnJvci5oIgogI2luY2x1ZGUgIkpTU1FMVHJhbnNh
Y3Rpb24uaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAJKHJldmlzaW9u
IDIxMTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJKU1N0b3JhZ2Uu
aCIKIAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9u
SGFuZGxpbmcuaCIKICNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8cnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
Q3VzdG9tLmNwcAkocmV2aXNpb24gMjExMzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw4IEBACiAj
aW5jbHVkZSAiSlNXb3JrZXIuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5o
IgogI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiV29ya2VyLmgiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoTlNSZXNvbHZlckN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNYUGF0aE5TUmVz
b2x2ZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyMTEzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1hQYXRoTlNSZXNvbHZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDcgKzI3LDcgQEAKICNpbmNsdWRlICJKU1hQYXRoTlNSZXNvbHZlci5oIgogCiAjaW5jbHVkZSAi
SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNp
bmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9u
LmNwcAkocmV2aXNpb24gMjExMzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2No
ZWR1bGVkQWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9u
SGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkpTTWFpblRo
cmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZUluc3RydW1l
bnRhdGlvbi5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIxMTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4
IEBACiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSFRNTFBsdWdJbkVsZW1l
bnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJK
U0RPTUJpbmRpbmdTZWN1cml0eS5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcu
aCIKICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkpTRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDIxMTM4OSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNTYsMTEgKzU2LDEyIEBAIGNsYXNzIEZyYW1lOwogY2xhc3MgSFRNTERvY3VtZW50Owog
Y2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQ7CiBjbGFzcyBMb2FkYWJsZU1vZHVsZVNjcmlwdDsKLWNs
YXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgU2NyaXB0U291cmNlQ29kZTsKK2NsYXNzIFNlY3Vy
aXR5T3JpZ2luOwogY2xhc3MgV2lkZ2V0Oworc3RydWN0IEV4Y2VwdGlvbkRldGFpbHM7CiAKLXR5
cGVkZWYgSGFzaE1hcDx2b2lkKiwgUmVmUHRyPEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+PiBS
b290T2JqZWN0TWFwOwordXNpbmcgUm9vdE9iamVjdE1hcCA9IEhhc2hNYXA8dm9pZCosIFJlZlB0
cjxKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0Pj47CiAKIGVudW0gUmVhc29uRm9yQ2FsbGluZ0Nh
bkV4ZWN1dGVTY3JpcHRzIHsKICAgICBBYm91dFRvRXhlY3V0ZVNjcmlwdCwKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdEdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0R2xvYmFsT2JqZWN0LmNwcAkocmV2
aXNpb24gMjExMzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0R2xvYmFs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsOCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlNjcmlwdEdsb2JhbE9iamVjdC5oIgogCi0jaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01F
eGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTSW5zcGVjdG9yRnJvbnRlbmRIb3N0Lmgi
CiAjaW5jbHVkZSA8cnVudGltZS9JZGVudGlmaWVySW5saW5lcy5oPgogCkBAIC00NSw3ICs0Niw3
IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoRXhlY1N0YXRlJiAKICAgICBKU0xvY2tI
b2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwogICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihz
Y3JpcHRTdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwotICAgIGdsb2JhbE9iamVjdC5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBuYW1lKSwgdG9KUygmc2NyaXB0
U3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlKSk7CisgICAgZ2xvYmFsT2JqZWN0LnB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIG5hbWUpLCB0b0pTPElETEludGVyZmFj
ZTxJbnNwZWN0b3JGcm9udGVuZEhvc3Q+PihzY3JpcHRTdGF0ZSwgZ2xvYmFsT2JqZWN0LCB2YWx1
ZSkpOwogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgcmVw
b3J0RXhjZXB0aW9uKCZzY3JpcHRTdGF0ZSwgc2NvcGUuZXhjZXB0aW9uKCkpOwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJ1Y3R1cmVk
Q2xvbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cnVj
dHVyZWRDbG9uZS5jcHAJKHJldmlzaW9uIDIxMTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1N0cnVjdHVyZWRDbG9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVkQ2xvbmUuaCIKIAogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlIDxydW50
aW1lL0pTVHlwZWRBcnJheXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAyMTEzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMzAxMyw2ICszMDEzLDkgQEAgc3ViIEdl
bmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBwdXNoKEBpbXBsQ29udGVudEhlYWRlciwgR2VuZXJh
dGVJbXBsZW1lbnRhdGlvbkNvbnRlbnRIZWFkZXIoJGludGVyZmFjZSkpOwogCiAgICAgJGltcGxJ
bmNsdWRlc3siSlNET01CaW5kaW5nLmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siSlNET01C
aW5kaW5nQ2FsbGVyLmgifSA9IDE7CisgICAgJGltcGxJbmNsdWRlc3siSlNET01FeGNlcHRpb25I
YW5kbGluZy5oIn0gPSAxOworICAgICRpbXBsSW5jbHVkZXN7IkpTRE9NV3JhcHBlckNhY2hlLmgi
fSA9IDE7CiAgICAgJGltcGxJbmNsdWRlc3siPHd0Zi9HZXRQdHIuaD4ifSA9IDE7CiAgICAgJGlt
cGxJbmNsdWRlc3siPHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaD4ifSA9IDEgaWYgJGluZGV4
ZWRHZXR0ZXJGdW5jdGlvbjsKIApAQCAtMzYzMyw2ICszNjM2LDcgQEAgc3ViIEdlbmVyYXRlSW1w
bGVtZW50YXRpb24KICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntDaGVja1NlY3VyaXR5fSAmJgogICAgICAgICAgICAgICAgICEkYXR0cmlidXRlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntEb05vdENoZWNrU2VjdXJpdHl9ICYmCiAgICAgICAgICAgICAgICAg
ISRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvTm90Q2hlY2tTZWN1cml0eU9uR2V0
dGVyfSkgeworICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUJpbmRpbmdT
ZWN1cml0eS5oIik7CiAgICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01X
aW5kb3ciKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlm
ICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCZzdGF0ZSwg
dGhpc09iamVjdC53cmFwcGVkKCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgewpAQCAtMzgwMyw2ICszODA3LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2UtPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0NoZWNrU2VjdXJpdHl9ICYmICEkYXR0cmlidXRlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntEb05vdENoZWNrU2VjdXJpdHl9ICYmICEkYXR0cmlidXRlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPntEb05vdENoZWNrU2VjdXJpdHlPblNldHRlcn0pIHsKKyAgICAgICAgICAg
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIpOwogICAgICAg
ICAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikgewogICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6
c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIHRoaXNPYmplY3Qud3JhcHBlZCgp
LCBUaHJvd1NlY3VyaXR5RXJyb3IpKVxuIik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAg
LTQwNTEsNiArNDA1Niw3IEBAIEVORAogICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTtcbiIpOwogCiAgICAgICAgICAgICAgICAg
aWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NoZWNrU2VjdXJpdHl9IGFuZCAh
JGZ1bmN0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntEb05vdENoZWNrU2VjdXJpdHl9KSB7Cisg
ICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUJpbmRpbmdTZWN1cml0
eS5oIik7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2lu
ZG93IikgewogICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coc3RhdGUs
IGNhc3RlZFRoaXMtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKSlcbiIpOwogICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDQ3Nyw2ICs0NDgzLDcgQEAgc3ViIEdlbmVyYXRl
Q2FsbFdpdGgKICAgICB9CiAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0
ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkNhbGxlckRvY3VtZW50IikpIHsKICAgICAgICAgJGltcGxJ
bmNsdWRlc3siRG9jdW1lbnQuaCJ9ID0gMTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siSlNET01X
aW5kb3dCYXNlLmgifSA9IDE7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRv
KiBkb2N1bWVudCA9IGNhbGxlckRPTVdpbmRvdygkc3RhdGVQb2ludGVyKS5kb2N1bWVudCgpO1xu
Iik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWRvY3VtZW50KVxuIik7
CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIiAuICgkcmV0dXJu
VmFsdWUgPyAiICIgLiAkcmV0dXJuVmFsdWUgOiAiIikgLiAiO1xuIik7CkBAIC00NDg4LDkgKzQ0
OTUsMjEgQEAgc3ViIEdlbmVyYXRlQ2FsbFdpdGgKICAgICAgICAgJGltcGxJbmNsdWRlc3siPGlu
c3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg+In0gPSAxOwogICAgICAgICBwdXNoKEBj
YWxsV2l0aEFyZ3MsICJXVEZNb3ZlKHNjcmlwdEFyZ3VtZW50cykiKTsKICAgICB9Ci0gICAgcHVz
aChAY2FsbFdpdGhBcmdzLCAiYWN0aXZlRE9NV2luZG93KCRzdGF0ZVBvaW50ZXIpIikgaWYgJGNv
ZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiQWN0aXZl
V2luZG93Iik7Ci0gICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiZmlyc3RET01XaW5kb3coJHN0YXRl
UG9pbnRlcikiKSBpZiAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygk
Y2FsbFdpdGgsICJGaXJzdFdpbmRvdyIpOwotICAgIHB1c2goQGNhbGxXaXRoQXJncywgImNhbGxl
ckRPTVdpbmRvdygkc3RhdGVQb2ludGVyKSIpIGlmICRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0
dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkNhbGxlcldpbmRvdyIpOworICAgIGlmICgkY29k
ZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJBY3RpdmVX
aW5kb3ciKSkgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTVdpbmRvd0Jhc2UuaCJ9ID0g
MTsKKyAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiYWN0aXZlRE9NV2luZG93KCRzdGF0ZVBv
aW50ZXIpIik7CisgICAgICAgIAorICAgIH0KKyAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkV4dGVu
ZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiRmlyc3RXaW5kb3ciKSkgeworICAgICAg
ICAkaW1wbEluY2x1ZGVzeyJKU0RPTVdpbmRvd0Jhc2UuaCJ9ID0gMTsKKyAgICAgICAgcHVzaChA
Y2FsbFdpdGhBcmdzLCAiZmlyc3RET01XaW5kb3coJHN0YXRlUG9pbnRlcikiKTsKKyAgICAgICAg
CisgICAgfQorICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlu
cygkY2FsbFdpdGgsICJDYWxsZXJXaW5kb3ciKSkgeworICAgICAgICAkaW1wbEluY2x1ZGVzeyJK
U0RPTVdpbmRvd0Jhc2UuaCJ9ID0gMTsKKyAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiY2Fs
bGVyRE9NV2luZG93KCRzdGF0ZVBvaW50ZXIpIik7CisgICAgICAgIAorICAgIH0KIAogICAgIHJl
dHVybiBAY2FsbFdpdGhBcmdzOwogfQpAQCAtNDU5OSw4ICs0NjE4LDYgQEAgc3ViIEdlbmVyYXRl
UGFyYW1ldGVyc0NoZWNrCiAgICAgICAgICRxdW90ZWRGdW5jdGlvbk5hbWUgPSAibnVsbHB0ciI7
CiAgICAgfQogCi0gICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NQmluZGluZy5oIiwgJGNvbmRp
dGlvbmFsKTsKLQogICAgIG15ICRhcmd1bWVudEluZGV4ID0gMDsKICAgICBmb3JlYWNoIG15ICRh
cmd1bWVudCAoQHskZnVuY3Rpb24tPmFyZ3VtZW50c30pIHsKICAgICAgICAgbXkgJHR5cGUgPSAk
YXJndW1lbnQtPnR5cGU7CkBAIC01MDY0LDYgKzUwODEsNyBAQCBzdWIgR2VuZXJhdGVDYWxsYmFj
a0ltcGxlbWVudGF0aW9uQ29udGVuCiAKICAgICAgICAgICAgICMgRklYTUU6IFdlIGN1cnJlbnRs
eSBqdXN0IHJlcG9ydCB0aGUgZXhjZXB0aW9uLiBXZSBzaG91bGQgcHJvYmFibHkgYWRkIGFuIGV4
dGVuZGVkIGF0dHJpYnV0ZSB0byBpbmRpY2F0ZSB3aGVuCiAgICAgICAgICAgICAjIHdlIHdhbnQg
dGhlIGV4Y2VwdGlvbiB0byBiZSByZXRocm93biBpbnN0ZWFkLgorICAgICAgICAgICAgJGluY2x1
ZGVzUmVmLT57IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCJ9ID0gMTsKICAgICAgICAgICAgIHB1
c2goQCRjb250ZW50UmVmLCAiICAgIGlmIChyZXR1cm5lZEV4Y2VwdGlvbilcbiIpOwogICAgICAg
ICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgICAgIHJlcG9ydEV4Y2VwdGlvbihzdGF0ZSwg
cmV0dXJuZWRFeGNlcHRpb24pO1xuIik7CiAgICAgICAgICAgICBwdXNoKEAkY29udGVudFJlZiwg
IiAgICByZXR1cm4gIXJldHVybmVkRXhjZXB0aW9uO1xuIik7CkBAIC01NjEyLDcgKzU2MzAsMTAg
QEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIEFkZFRvSW1wbEluY2x1ZGVzRm9ySURMVHlwZSgk
dHlwZSwgJGNvbmRpdGlvbmFsKTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlNET01Db252ZXJ0
LmgiLCAkY29uZGl0aW9uYWwpOwogCi0gICAgJHZhbHVlID0gIkJpbmRpbmdTZWN1cml0eTo6Y2hl
Y2tTZWN1cml0eUZvck5vZGUoJHN0YXRlUmVmZXJlbmNlLCAkdmFsdWUpIiBpZiAkY29udGV4dC0+
ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2hlY2tTZWN1cml0eUZvck5vZGV9OworICAgIGlmICgkY29u
dGV4dC0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2hlY2tTZWN1cml0eUZvck5vZGV9KSB7CisgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUJpbmRpbmdTZWN1cml0eS5oIiwgJGNvbmRpdGlv
bmFsKTsKKyAgICAgICAgJHZhbHVlID0gIkJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZv
ck5vZGUoJHN0YXRlUmVmZXJlbmNlLCAkdmFsdWUpIjsKKyAgICB9CiAKICAgICBteSAkSURMVHlw
ZSA9IEdldElETFR5cGUoJGludGVyZmFjZSwgJHR5cGUsICRjb250ZXh0KTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL1dlYlNjcmlwdE9iamVjdC5tbQkocmV2aXNpb24g
MjExMzg5KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbXBvcnQgIkJyaWRnZUpTQy5o
IgogI2ltcG9ydCAiRnJhbWUuaCIKKyNpbXBvcnQgIkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiCiAj
aW1wb3J0ICJKU0RPTVdpbmRvdy5oIgogI2ltcG9ydCAiSlNET01XaW5kb3dDdXN0b20uaCIKICNp
bXBvcnQgIkpTSFRNTEVsZW1lbnQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZy
YW1lRWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiAyMTEzODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyAr
MzEsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIK
KyNpbmNsdWRlICJKU0RPTUJpbmRpbmdTZWN1cml0eS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAJKHJldmlzaW9uIDIx
MTM4OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VM
b2FkZXIuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIxMTM4OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvclRpbWVsaW5l
QWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JXb3JrZXJBZ2VudC5oIgogI2luY2x1ZGUgIklu
c3RydW1lbnRpbmdBZ2VudHMuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmdTZWN1cml0eS5oIgog
I2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIK
ICNpbmNsdWRlICJKU01haW5UaHJlYWRFeGVjU3RhdGUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMjExMzg5KQor
KysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvclBhZ2VBZ2VudC5o
IgogI2luY2x1ZGUgIkluc3RydW1lbnRpbmdBZ2VudHMuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKICNpbmNsdWRlICJNYWluRnJhbWUuaCIKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwCShyZXZpc2lvbiAyMTEzODkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvUGFn
ZVNjcmlwdERlYnVnU2VydmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENsaWVudC5oIgorI2luY2x1ZGUgIkpTRE9NRXhj
ZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2luY2x1
ZGUgIk1haW5GcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTQ1LDcgKzQ2LDYgQEAKICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNpZiBQTEFURk9STShJT1MpCi0jaW5jbHVk
ZSAiSlNET01XaW5kb3dCYXNlLmgiCiAjaW5jbHVkZSAiV2ViQ29yZVRocmVhZEludGVybmFsLmgi
CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1dvcmtlclNjcmlwdERl
YnVnU2VydmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvV29y
a2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCShyZXZpc2lvbiAyMTEzODkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV29ya2Vy
U2NyaXB0RGVidWdTZXJ2ZXIuaCIKIAotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1
ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1
ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCiAjaW5jbHVkZSAiV29ya2VyUnVuTG9vcC5oIgpJbmRl
eDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkocmV2aXNpb24gMjExMzg5KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTctMDEtMzAgIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBKU0RPTUJpbmRpbmcgaXMgdG9vIGJpZy4gU3Bs
aXQgaXQgdXAhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjc2MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICBSZXBsYWNlIGlu
Y2x1ZGUgb2YgSlNET01CaW5kaW5nIHdpdGggSlNET01FeGNlcHRpb25IYW5kbGluZy4KKwogMjAx
Ny0wMS0zMCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbaU9TXSBwb3NpdGlvbjpmaXhlZCBpbnNpZGUgdG91Y2gtc2Nyb2xsYWJsZSBvdmVyZmxvdyBp
cyBtaXNwb3NpdGlvbmVkCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmNwcAkocmV2aXNpb24gMjExMzg5KQorKysgU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcg
KzQ3LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0lEQkdldFJlc3VsdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2UuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0pTRE9NQmluZGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNET01FeGNl
cHRpb25IYW5kbGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTGVuZ3RoLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9QYXRoLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5EYXRhLmg+CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlLmNwcAkocmV2aXNpb24gMjExMzg5KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dlb2xvY2F0aW9uQ2xpZW50
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0dlb2xvY2F0aW9uUG9zaXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9KU05vdGlmaWNhdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWFp
bkZyYW1lLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300156</attachid>
            <date>2017-01-30 16:13:48 -0800</date>
            <delta_ts>2017-01-30 17:26:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167601-20170130161138.patch</filename>
            <type>text/plain</type>
            <size>719723</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBACisyMDE3LTAxLTMwICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSlNET01CaW5kaW5nIGlzIHRvbyBiaWcu
IFNwbGl0IGl0IHVwIQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY3NjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU3BsaXRzIEpTRE9NQmluZGluZy5oL2NwcCB1cCBhIGJpdCBieSBzcGxpdHRpbmcgb3V0
OgorICAgICAgICAtIEpTRE9NQmluZGluZ0NhbGxlci5oCisgICAgICAgIC0gSlNET01CaW5kaW5n
U2VjdXJpdHkuaC9jcHAKKyAgICAgICAgLSBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgvY3BwCisg
ICAgICAgIC0gSlNET01XcmFwcGVyQ2FjaGUuaC9jcHAKKworICAgICAgICBBbHNvOgorICAgICAg
ICAtIE1vdmVzIGFsbCBjb25zdHJ1Y3RvciBvYmplY3RzIHRvIEpTRE9NQ29uc3RydWN0b3IuaC9j
cHAsICAKKyAgICAgICAgLSBNb3ZlcyBzcGVjaWFsIERPTVdpbmRvdyBhY2Nlc3NvcnMgdG8gSlNE
T01XaW5kb3dCYXNlLgorICAgICAgICAtIERlbGV0ZXMgdW51c2VkIENhbGxiYWNrRnVuY3Rpb24u
aC9jcHAKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmg6IFJlbW92
ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHA6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nQ2FsbGVyLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oLgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcC4KKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUNvbnN0cnVjdG9yLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmNwcC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnN0
cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0Lmg6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAuCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbGVyRE9NV2luZG93KTog
TW92ZWQgZnJvbSBKU0RPTUJpbmRpbmcuaAorICAgICAgICAoV2ViQ29yZTo6YWN0aXZlRE9NV2lu
ZG93KTogTW92ZWQgZnJvbSBKU0RPTUJpbmRpbmcuaAorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RE
T01XaW5kb3cpOiBNb3ZlZCBmcm9tIEpTRE9NQmluZGluZy5oCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01XaW5kb3dCYXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oLgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXRDdXN0b20uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxFbGVt
ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFja0N1c3RvbS5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNYUGF0aE5TUmVzb2x2ZXJDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVk
dWxlZEFjdGlvbi5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdEdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvU3RydWN0dXJl
ZENsb25lLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVD
YWxsV2l0aCk6CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6CisgICAgICAgIChH
ZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250ZW50KToKKyAgICAgICAgKE5hdGl2ZVRv
SlNWYWx1ZSk6CisgICAgICAgICogYnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOgorICAg
ICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwOgorICAgICAgICAqIGh0bWwvSFRN
TFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgICogaW5z
cGVjdG9yL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcDoKKwogMjAxNy0wMS0zMCAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBwb3NpdGlv
bjpmaXhlZCBpbnNpZGUgdG91Y2gtc2Nyb2xsYWJsZSBvdmVyZmxvdyBpcyBtaXNwb3NpdGlvbmVk
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjExMzkyKQorKysgU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwNjksNyArMTA2OSw2IEBA
IHNldChXZWJDb3JlX1NPVVJDRVMKIAogICAgIGJpbmRpbmdzL2pzL0NhY2hlZE1vZHVsZVNjcmlw
dExvYWRlci5jcHAKICAgICBiaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRGZXRjaGVyLmNwcAotICAg
IGJpbmRpbmdzL2pzL0NhbGxiYWNrRnVuY3Rpb24uY3BwCiAgICAgYmluZGluZ3MvanMvQ29tbW9u
Vk0uY3BwCiAgICAgYmluZGluZ3MvanMvRE9NV3JhcHBlcldvcmxkLmNwcAogICAgIGJpbmRpbmdz
L2pzL0dDQ29udHJvbGxlci5jcHAKQEAgLTExMDAsNiArMTA5OSw5IEBAIHNldChXZWJDb3JlX1NP
VVJDRVMKICAgICBiaW5kaW5ncy9qcy9KU0N1c3RvbUV2ZW50Q3VzdG9tLmNwcAogICAgIGJpbmRp
bmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5jcHAKKyAgICBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5jcHAKKyAg
ICBiaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yLmNwcAorICAgIGJpbmRpbmdzL2pzL0pTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuY3BwCiAgICAgYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3Qu
Y3BwCiAgICAgYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3RUYXNrLmNwcAogICAgIGJpbmRp
bmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAKQEAgLTExMDksNiArMTExMSw3IEBAIHNldChXZWJDb3Jl
X1NPVVJDRVMKICAgICBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCiAgICAg
YmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0RPTVdy
YXBwZXIuY3BwCisgICAgYmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuY3BwCiAgICAgYmlu
ZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0RvY3VtZW50
RnJhZ21lbnRDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcApJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5j
cHAJKHJldmlzaW9uIDIxMTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVk
ZSAiRGF0YWJhc2VUaHJlYWQuaCIKICNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJK
U0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJTUUxFcnJvci5o
IgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMjExMzkyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODM3LDYgKzI4MzcsMTQg
QEAKIAkJN0MzRTUxMEIxOERGOEYzNTAwQzExMkY3IC8qIEhUTUxDb252ZXJ0ZXIubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzNFNTEwOTE4REY4RjM1
MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5tbSAqLzsgfTsKIAkJN0MzRjAxQzExQzhFNUFCQTAw
QUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDM0YwMUMwMUM4RTVBQjEwMEFERDk2MiAvKiBVc2VyQ29u
dGVudFByb3ZpZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJN0MzRjAxQzIxQzhFNUFDMjAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzRjAx
QkYxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuY3BwICovOyB9OworCQk3
QzQ1QzlDRjFFM0VGREY3MDBBQUI1NTggLyogSlNET01CaW5kaW5nU2VjdXJpdHkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0NUM5Q0ExRTNFOEQy
RTAwQUFCNTU4IC8qIEpTRE9NQmluZGluZ1NlY3VyaXR5LmNwcCAqLzsgfTsKKwkJN0M0NUM5RDAx
RTNFRkRGQjAwQUFCNTU4IC8qIEpTRE9NV3JhcHBlckNhY2hlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDVDOUNCMUUzRThFNDkwMEFBQjU1OCAv
KiBKU0RPTVdyYXBwZXJDYWNoZS5jcHAgKi87IH07CisJCTdDNDVDOUQxMUUzRUZFMDUwMEFBQjU1
OCAvKiBKU0RPTUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDNDVDOUNEMUUzRTkwMEIwMEFBQjU1OCAvKiBKU0RPTUNvbnN0cnVj
dG9yLmNwcCAqLzsgfTsKKwkJN0M0NUM5RDIxRTNFRkUwODAwQUFCNTU4IC8qIEpTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0M0NUM5Q0MxRTNFOEYwODAwQUFCNTU4IC8qIEpTRE9NRXhjZXB0aW9uSGFuZGxpbmcu
Y3BwICovOyB9OworCQk3QzQ1QzlEMzFFM0ZDQkQ3MDBBQUI1NTggLyogSlNET01XcmFwcGVyQ2Fj
aGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDVD
OUM4MUUzRThCNTEwMEFBQjU1OCAvKiBKU0RPTVdyYXBwZXJDYWNoZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdDNDVDOUQ0MUUzRkNCREYwMEFB
QjU1OCAvKiBKU0RPTUJpbmRpbmdTZWN1cml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0NUM5QzkxRTNFOENENzAwQUFCNTU4IC8qIEpTRE9NQmlu
ZGluZ1NlY3VyaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJN0M0NUM5RDUxRTNGQ0JFNDAwQUFCNTU4IC8qIEpTRE9NQmluZGluZ0NhbGxlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0NUM5QzYx
RTNFOEFCQTAwQUFCNTU4IC8qIEpTRE9NQmluZGluZ0NhbGxlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTdDNDVDOUQ2MUUzRkNCRjgwMEFBQjU1
OCAvKiBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ1QzlDNzFFM0U4QUZGMDBBQUI1NTggLyogSlNET01FeGNl
cHRpb25IYW5kbGluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTdDNDhBNkQwMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0OEE2Q0Ux
OTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5jcHAgKi87IH07CiAJCTdDNDhBNkQx
MTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDhBNkNGMTkxQzlENjUwMDAyNjY3NCAvKiBX
ZWJLaXROYW1lc3BhY2UuaCAqLzsgfTsKIAkJN0M0Qzk2REMxQUQ0NDgzNTAwMzY1QTUwIC8qIEpT
UmVhZGFibGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0M0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW0uY3Bw
ICovOyB9OwpAQCAtNDU2MiwxMCArNDU3MCw4IEBACiAJCUIxMEI2OTgwMTQwQzE3NDAwMEJDMUMy
NiAvKiBXZWJWVFRUb2tlbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQjEwQjY5N0QxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuLmggKi87IH07
CiAJCUIxMEI2OTgxMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbml6ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjEwQjY5N0UxNDBDMTc0
MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5jcHAgKi87IH07CiAJCUIxMEI2OTgyMTQwQzE3
NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxMEI2OTdGMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRU
b2tlbml6ZXIuaCAqLzsgfTsKLQkJQjE4Mjc0OTMxMzRDQTRDMTAwQjk4QzJEIC8qIENhbGxiYWNr
RnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjE4Mjc0OTIxMzRDQTRDMTAwQjk4QzJEIC8qIENhbGxiYWNrRnVuY3Rpb24uY3BwICovOyB9
OwogCQlCMUFENEU3MzEzQTEyQTQ2MDA4NDZCMjcgLyogVGV4dFRyYWNrTG9hZGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxQUQ0RTcxMTNBMTJB
NDYwMDg0NkIyNyAvKiBUZXh0VHJhY2tMb2FkZXIuY3BwICovOyB9OwogCQlCMUFENEU3NDEzQTEy
QTQ2MDA4NDZCMjcgLyogVGV4dFRyYWNrTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMUFENEU3MjEzQTEyQTQ2MDA4NDZCMjcgLyogVGV4dFRy
YWNrTG9hZGVyLmggKi87IH07Ci0JCUIxRDVFQ0I1MTM0QjU4REEwMDg3Qzc4RiAvKiBDYWxsYmFj
a0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMUQ1RUNCNDEzNEI1OERBMDA4N0M3OEYgLyogQ2FsbGJhY2tGdW5jdGlvbi5oICovOyB9Owog
CQlCMjAxMTEwNzBBQjc3NDA1MDBEQjBFNjggLyogSlNTVkdBRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjAxMTEwNTBBQjc3NDA1MDBE
QjBFNjggLyogSlNTVkdBRWxlbWVudC5jcHAgKi87IH07CiAJCUIyMDExMTA4MEFCNzc0MDUwMERC
MEU2OCAvKiBKU1NWR0FFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCMjAxMTEwNjBBQjc3NDA1MDBEQjBFNjggLyogSlNTVkdBRWxlbWVudC5o
ICovOyB9OwogCQlCMjIyNzk2NDBEMDBCRjIyMDA3MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjIyNzdD
RDBEMDBCRjFGMDA3MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVzLmggKi87IH07CkBAIC01MTM4
LDcgKzUxNDQsNiBAQAogCQlCNTQzQjg1NzE3RUI3NThGMDAzQkU5M0EgLyogU1ZHUHJvcGVydHlJ
bmZvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1
NDNCODU2MTdFQjc1OEYwMDNCRTkzQSAvKiBTVkdQcm9wZXJ0eUluZm8uY3BwICovOyB9OwogCQlC
NTYyREI2MDE3RDNDRDYzMDAxMEFGOTYgLyogSFRNTEVsZW1lbnRUeXBlSGVscGVycy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjU2MkRCNUUxN0QzQ0Q1
NjAwMTBBRjk2IC8qIEhUTUxFbGVtZW50VHlwZUhlbHBlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCNTYyREI2MTE3RDNDRDY2MDAxMEFGOTYg
LyogU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCNTYyREI1RjE3RDNDRDU2MDAxMEFGOTYgLyogU1ZHRWxlbWVudFR5
cGVIZWxwZXJzLmggKi87IH07Ci0JCUI1NjU3NkU4MTdEQTk0RTIwMEE1NkJEQyAvKiBET01Db25z
dHJ1Y3RvcldpdGhEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjU2NTc2RTcxN0RBOTRFMjAwQTU2QkRDIC8qIERPTUNvbnN0cnVjdG9yV2l0
aERvY3VtZW50LmggKi87IH07CiAJCUI1NjU3OUI1MTgyNEQxMkEwMEU3OUYyMyAvKiBSZW5kZXJD
aGlsZEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNTY1NzlCNDE4MjREMTJBMDBFNzlGMjMgLyogUmVuZGVyQ2hpbGRJdGVyYXRvci5oICov
OyB9OwogCQlCNTdDQjUyRDE4MkEzRUVEMDA3OUE2NDcgLyogSW5saW5lRWxlbWVudEJveC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTdDQjUyQzE4
MkEzRUVEMDA3OUE2NDcgLyogSW5saW5lRWxlbWVudEJveC5jcHAgKi87IH07CiAJCUI1N0NCNTJF
MTgyQTNFRkMwMDc5QTY0NyAvKiBJbmxpbmVFbGVtZW50Qm94LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTdDQjUyQjE4MkEzN0Y2MDA3OUE2NDcgLyog
SW5saW5lRWxlbWVudEJveC5oICovOyB9OwpAQCAtMTAzNjIsNiArMTAzNjcsMTQgQEAKIAkJN0Mz
RjAxQzAxQzhFNUFCMTAwQUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckNvbnRlbnRQcm92aWRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QzQxODlBQjFCMDdDMTcwMDAwRkE3NTcgLyogR2xvYmFsRXZl
bnRIYW5kbGVycy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gR2xvYmFsRXZlbnRIYW5kbGVycy5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDNDE4OUFDMUIwN0NCRjIwMDBGQTc1NyAvKiBXaW5kb3dFdmVu
dEhhbmRsZXJzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBXaW5kb3dFdmVudEhhbmRsZXJzLmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0M0NUM5QzYxRTNFOEFCQTAwQUFCNTU4IC8qIEpTRE9NQmluZGlu
Z0NhbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUJpbmRpbmdD
YWxsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M0NUM5QzcxRTNFOEFGRjAw
QUFCNTU4IC8qIEpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNET01FeGNlcHRpb25IYW5kbGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3QzQ1QzlDODFFM0U4QjUxMDBBQUI1NTggLyogSlNET01XcmFwcGVyQ2FjaGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01XcmFwcGVyQ2FjaGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M0NUM5QzkxRTNFOENENzAwQUFCNTU4IC8q
IEpTRE9NQmluZGluZ1NlY3VyaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTRE9NQmluZGluZ1NlY3VyaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdD
NDVDOUNBMUUzRThEMkUwMEFBQjU1OCAvKiBKU0RPTUJpbmRpbmdTZWN1cml0eS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0RPTUJpbmRpbmdTZWN1cml0eS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNDVDOUNCMUUzRThFNDkwMEFBQjU1OCAv
KiBKU0RPTVdyYXBwZXJDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RPTVdyYXBwZXJDYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTdDNDVDOUNDMUUzRThGMDgwMEFBQjU1OCAvKiBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NRXhjZXB0aW9uSGFuZGxp
bmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzQ1QzlDRDFFM0U5MDBCMDBB
QUI1NTggLyogSlNET01Db25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0RPTUNvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0M0OEE2Q0UxOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXROYW1lc3BhY2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzQ4QTZDRjE5MUM5RDY1MDAwMjY2NzQgLyog
V2ViS2l0TmFtZXNwYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktp
dE5hbWVzcGFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzQ4QTZEMjE5MUM5
RDhFMDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJLaXROYW1lc3BhY2Uu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIzMzIsMTIgKzEyMzQ1LDEwIEBA
CiAJCUIxMEI2OTdEMTQwQzE3NDAwMEJDMUMyNiAvKiBXZWJWVFRUb2tlbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWVFRUb2tlbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMTBCNjk3RTE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlZUVFRva2VuaXplci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxMEI2OTdGMTQwQzE3NDAwMEJDMUMy
NiAvKiBXZWJWVFRUb2tlbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViVlRUVG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIxODI3NDky
MTM0Q0E0QzEwMEI5OEMyRCAvKiBDYWxsYmFja0Z1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxiYWNrRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMUE5NDJFMTE1QjVDRTIyMDBENTI1RDEgLyogTWVkaWFTb3VyY2VS
ZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVNv
dXJjZVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjFBOTQyRTIx
NUI1Q0UyMjAwRDUyNUQxIC8qIE1lZGlhU291cmNlUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTb3VyY2VSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMUFENEU3MTEzQTEyQTQ2MDA4NDZCMjcgLyogVGV4dFRyYWNrTG9hZGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRUcmFja0xvYWRl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxQUQ0RTcyMTNBMTJBNDYwMDg0
NkIyNyAvKiBUZXh0VHJhY2tMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGV4dFRyYWNrTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIxRDVF
Q0I0MTM0QjU4REEwMDg3Qzc4RiAvKiBDYWxsYmFja0Z1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxiYWNrRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjIwMTExMDUwQUI3NzQwNTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHQUVsZW1lbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjAxMTEwNjBBQjc3NDA1MDBEQjBFNjgg
LyogSlNTVkdBRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNT
VkdBRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjIyNzdDRDBEMDBC
RjFGMDA3MUI3ODIgLyogR3JhZGllbnRBdHRyaWJ1dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHcmFkaWVudEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEzMDUxLDcgKzEzMDYyLDYgQEAKIAkJQjU2MkRCNUUxN0QzQ0Q1NjAwMTBBRjk2
IC8qIEhUTUxFbGVtZW50VHlwZUhlbHBlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTEVsZW1lbnRU
eXBlSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTYyREI1RjE3RDND
RDU2MDAxMEFGOTYgLyogU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0VsZW1lbnRUeXBlSGVscGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTY1
NzZFNDE3REE1OTlGMDBBNTZCREMgLyogSlNNYWluVGhyZWFkRXhlY1N0YXRlSW5zdHJ1bWVudGF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTWFpblRocmVhZEV4ZWNT
dGF0ZUluc3RydW1lbnRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCNTY1
NzZFNzE3REE5NEUyMDBBNTZCREMgLyogRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU2NTc5QjQxODI0RDEyQTAwRTc5RjIz
IC8qIFJlbmRlckNoaWxkSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyQ2hpbGRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
NTdDQjUyQjE4MkEzN0Y2MDA3OUE2NDcgLyogSW5saW5lRWxlbWVudEJveC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVFbGVtZW50Qm94Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUI1N0NCNTJDMTgyQTNFRUQwMDc5QTY0NyAvKiBJbmxpbmVFbGVtZW50
Qm94LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUVsZW1l
bnRCb3guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIxMzYsNyArMjIxNDYs
NiBAQAogCQkJCUJDRDUzMzYzMEVENjg0ODkwMDg4NzQ2OCAvKiBDYWNoZWRTY3JpcHRTb3VyY2VQ
cm92aWRlci5oICovLAogCQkJCTBGNjBGMzI5MURGQkIxMDQwMDQxNkQ2QyAvKiBDb21tb25WTS5j
cHAgKi8sCiAJCQkJMEY2MEYzMkExREZCQjEwNDAwNDE2RDZDIC8qIENvbW1vblZNLmggKi8sCi0J
CQkJQjU2NTc2RTcxN0RBOTRFMjAwQTU2QkRDIC8qIERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50
LmggKi8sCiAJCQkJQkM1M0RBNDcxMTQzMTM0RDAwMEQ4MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5j
cHAgKi8sCiAJCQkJQkM1M0RBMkQxMTQzMTIxRTAwMEQ4MTdFIC8qIERPTVdyYXBwZXJXb3JsZC5o
ICovLAogCQkJCTE0MzJFODQ4MEM1MTQ5M0YwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuY3BwICov
LApAQCAtMjIxNTUsOCArMjIxNjQsMTQgQEAKIAkJCQk5QkQ0RTkxNTFDNDYyODcyMDA1MDY1QkMg
LyogSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmggKi8sCiAJCQkJOTNCNzBENDcwOUVCMEM3QzAw
OUQ4NDY4IC8qIEpTRE9NQmluZGluZy5jcHAgKi8sCiAJCQkJOTNCNzBENDgwOUVCMEM3QzAwOUQ4
NDY4IC8qIEpTRE9NQmluZGluZy5oICovLAorCQkJCTdDNDVDOUM2MUUzRThBQkEwMEFBQjU1OCAv
KiBKU0RPTUJpbmRpbmdDYWxsZXIuaCAqLywKKwkJCQk3QzQ1QzlDQTFFM0U4RDJFMDBBQUI1NTgg
LyogSlNET01CaW5kaW5nU2VjdXJpdHkuY3BwICovLAorCQkJCTdDNDVDOUM5MUUzRThDRDcwMEFB
QjU1OCAvKiBKU0RPTUJpbmRpbmdTZWN1cml0eS5oICovLAorCQkJCTdDNDVDOUNEMUUzRTkwMEIw
MEFBQjU1OCAvKiBKU0RPTUNvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQk0MTNDMkMzMzFCQzI5QTdC
MDA3NTIwNEMgLyogSlNET01Db25zdHJ1Y3Rvci5oICovLAogCQkJCTkzMDg0MTMzMUNEREIxNTUw
MEIwOTU4QyAvKiBKU0RPTUNvbnZlcnQuaCAqLywKKwkJCQk3QzQ1QzlDQzFFM0U4RjA4MDBBQUI1
NTggLyogSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAgKi8sCisJCQkJN0M0NUM5QzcxRTNFOEFG
RjAwQUFCNTU4IC8qIEpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCAqLywKIAkJCQlFMUMzNkNCQzBF
QjA4MDYyMDA3NDEwQkMgLyogSlNET01HbG9iYWxPYmplY3QuY3BwICovLAogCQkJCUUxQzM2QzAy
MEVCMDc2RDYwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5oICovLAogCQkJCTdDMkJERDNC
MTdDN0Y5OEIwMDM4RkYxNSAvKiBKU0RPTUdsb2JhbE9iamVjdFRhc2suY3BwICovLApAQCAtMjIx
NzMsNiArMjIxODgsOCBAQAogCQkJCUJDQkZCNTNCMERDRDI5Q0YwMDE5QjNFNSAvKiBKU0RPTVdp
bmRvd1NoZWxsLmggKi8sCiAJCQkJNDE3MEEyRTkxRDhDMENDMDAwMzE4NDUyIC8qIEpTRE9NV3Jh
cHBlci5jcHAgKi8sCiAJCQkJNjVFMEU5NDMxMTMzQzg5RjAwQjRDQjEwIC8qIEpTRE9NV3JhcHBl
ci5oICovLAorCQkJCTdDNDVDOUNCMUUzRThFNDkwMEFBQjU1OCAvKiBKU0RPTVdyYXBwZXJDYWNo
ZS5jcHAgKi8sCisJCQkJN0M0NUM5QzgxRTNFOEI1MTAwQUFCNTU4IC8qIEpTRE9NV3JhcHBlckNh
Y2hlLmggKi8sCiAJCQkJRTNBNTg3MkUxREMzRjUyNjAwRjYwN0E2IC8qIEpTRHluYW1pY0Rvd25j
YXN0LmggKi8sCiAJCQkJQkM2MDkwMUUwRTkxQjhFQzAwMEM2OEI1IC8qIEpTRXZlbnRUYXJnZXRD
dXN0b20uY3BwICovLAogCQkJCTQ2QjYzRjZCMUM2RThDREYwMDJFOTE0QiAvKiBKU0V2ZW50VGFy
Z2V0Q3VzdG9tLmggKi8sCkBAIC0yMjU2OSw4ICsyMjU4Niw2IEBACiAJCUJDQ0U1OEE3MTA2MUU4
MkYwMDhGQjM1QSAvKiBDYWxsYmFjayBPYmplY3RzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlCMTgyNzQ5MjEzNENBNEMxMDBCOThDMkQgLyogQ2FsbGJh
Y2tGdW5jdGlvbi5jcHAgKi8sCi0JCQkJQjFENUVDQjQxMzRCNThEQTAwODdDNzhGIC8qIENhbGxi
YWNrRnVuY3Rpb24uaCAqLywKIAkJCQkxNDQ5RTI4NjEwN0Q0REI0MDBCNTc5M0YgLyogSlNDYWxs
YmFja0RhdGEuY3BwICovLAogCQkJCTE0NDlFMjRBMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxi
YWNrRGF0YS5oICovLAogCQkJCUUxMEI5M0MyMEI3M0MyOTEwMDNFRDg5MCAvKiBKU0N1c3RvbVhQ
YXRoTlNSZXNvbHZlci5jcHAgKi8sCkBAIC0yNTE4NSw3ICsyNTIwMCw2IEBACiAJCQkJOTNGMTk5
NTAwODI0NUU1OTAwMUU5QUJDIC8qIENhY2hlUG9saWN5LmggaW4gSGVhZGVycyAqLywKIAkJCQlF
NDNBRjhFNzFBQzVCN0VDMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0OUFFMkQ5NzEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJQjFENUVDQjUxMzRCNThEQTAwODdDNzhGIC8qIENhbGxiYWNrRnVu
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5NDg0RkMyMTAyQ0YyM0MwMDE4N0REMyAvKiBD
YW52YXNHcmFkaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDY3MUUwNjYxRDY3QTU5NjAwQzZC
NDk3IC8qIENhbnZhc1BhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5NDg0RkM1MTAyQ0YyM0Mw
MDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MzYyLDYgKzI1
Mzc2LDcgQEAKIAkJCQlFMTI1RjgzNjE4MjJGMThBMDBEODRDRDkgLyogQ3J5cHRvS2V5SE1BQy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTFGODBCODgxODMxNzI1MjAwNzg4NUMzIC8qIENyeXB0b0tl
eVBhaXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNjRGQUEzMTgzMTVCRjQwMERCNEU2MSAvKiBD
cnlwdG9LZXlSU0EuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDNDVDOUQ1MUUzRkNCRTQwMEFBQjU1
OCAvKiBKU0RPTUJpbmRpbmdDYWxsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxMjVGODU2MTgy
QzBGODMwMEQ4NENEOSAvKiBDcnlwdG9LZXlTZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMTI1Rjg1QTE4MkMxQUE2MDBEODRDRDkgLyogQ3J5cHRvS2V5U2VyaWFsaXphdGlvblJh
dy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE5NzI3MTYxODIwNTQ5RTAwNTkyRDUxIC8qIENyeXB0
b0tleVR5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjU1ODUsNyArMjU2MDAsNiBAQAogCQkJCUE4
MTg1RjM5MDk3NjU3NjYwMDU4MjZEOSAvKiBEb2N1bWVudFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk3Mzg4OUExMTE2RUE5REMwMEFERjMxMyAvKiBEb2N1bWVudFdyaXRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUE4RjZCQzMwREI1NUNEQzAwMURCNzk0IC8qIERPTUFwcGxpY2F0aW9uQ2Fj
aGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUI1NjU3NkU4MTdEQTk0RTIwMEE1NkJEQyAvKiBET01D
b25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2MEQ2RTkwRDI4
RDgzNDAwQjk5MThGIC8qIERPTUNvcmVFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUZD
OUEwRjc1MTY0MDk0Q0YwMDNENkI4RCAvKiBET01DU1NOYW1lc3BhY2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTlCM0E4ODcyMTQ1NjMyRjkwMDNBRThGNSAvKiBET01ET01TZXR0YWJsZVRva2VuTGlz
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjY5Niw2ICsyNjcxMCw3IEBACiAJCQkJNDQ5NkUzQTAx
Mzk4MTNBNTAwM0VFMzJBIC8qIEpTU1ZHTVBhdGhFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NTQyQTc5NzBBRTVDOTQzMDBERjU4REYgLyogSlNTVkdOdW1iZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyRkEzREIxMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR051bWJlckxpc3QuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTdDNDVDOUQzMUUzRkNCRDcwMEFBQjU1OCAvKiBKU0RPTVdyYXBwZXJD
YWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQjUwQUI3NUE2RjAwMEU1QUM0IC8qIEpT
U1ZHUGF0aEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREI3MEFCNzVBNkYwMDBF
NUFDNCAvKiBKU1NWR1BhdGhTZWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyRkEzREI5MEFCNzVB
NkYwMDBFNUFDNCAvKiBKU1NWR1BhdGhTZWdBcmNBYnMuaCBpbiBIZWFkZXJzICovLApAQCAtMjc3
OTcsNiArMjc4MTIsNyBAQAogCQkJCTk3QkM2QTUyMTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFu
c2FjdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0JDNkE1NzE1MDVGMDgxMDAx
Qjc0QUMgLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTdCQzZBNTgxNTA1RjA4MTAwMUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5o
IGluIEhlYWRlcnMgKi8sCisJCQkJN0M0NUM5RDQxRTNGQ0JERjAwQUFCNTU4IC8qIEpTRE9NQmlu
ZGluZ1NlY3VyaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTM2RkQxODE2Qzc4MjY1MDBGODg3
QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzNkZEMTcx
NkM3ODI2NTAwRjg4N0MxIC8qIFNRTFRyYW5zYWN0aW9uU3RhdGVNYWNoaW5lLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTJFNkU1QTBDQzU1MjEzMDA0QTIwNjIgLyogU1FMVmFsdWUuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjc4NDYsNiArMjc4NjIsNyBAQAogCQkJCTBGRjUwMjcyMTAyQkE5NkEwMDY2
RjM5QSAvKiBTdHlsZU1lZGlhLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzVFQjc0RTBFODFFMDY3
MDBCMjU5NjUgLyogU3R5bGVNdWx0aUNvbERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0REFD
RTZBMUQxMkUxMEIwMDc1OTgwRiAvKiBTdHlsZVBlbmRpbmdSZXNvdXJjZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTdDNDVDOUQ2MUUzRkNCRjgwMEFBQjU1OCAvKiBKU0RPTUV4Y2VwdGlvbkhhbmRs
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkRGQzBBMTk5MDY3MDA3RkI4QzUgLyogU3R5
bGVQcm9wZXJ0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUIyNTEwNzE1MkEwQkIwMDA2OUI3
NzkgLyogU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNDMDVB
NUIxQTY4NjIxMjAwN0U1REVBIC8qIFN0eWxlUHJvcGVydHlTaG9ydGhhbmRGdW5jdGlvbnMuaCBp
biBIZWFkZXJzICovLApAQCAtMjkwODUsNyArMjkxMDIsNiBAQAogCQkJCUJDQjE2QzI3MDk3OUMz
QkQwMDQ2Nzc0MSAvKiBDYWNoZWRYU0xTdHlsZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUU0M0FGOEU2MUFDNUI3RTgwMENBNzE3RSAvKiBDYWNoZVZhbGlkYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDlBRTJEOTYxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQjE4Mjc0OTMxMzRDQTRDMTAwQjk4QzJEIC8qIENhbGxi
YWNrRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk0ODRGQzExMDJDRjIzQzAwMTg3
REQzIC8qIENhbnZhc0dyYWRpZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ2NzFFMDY1MUQ2
N0E1OTYwMEM2QjQ5NyAvKiBDYW52YXNQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5NDg0
RkM0MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMjkyNDYsNiArMjkyNjIsNyBAQAogCQkJCUZCQjBDNUI3MTdCQkQ2MjYwMDNEMzY3NyAvKiBD
U1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNjRCNEQ1MENCNDI5
OEEwMDVGMkI2MiAvKiBDU1NGb250RmFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MDlFQkRC
MjE2QjdFRTc0MDBDQkEzRkMgLyogQ1NTRm9udEZhY2VMb2FkRXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJN0M0NUM5RDExRTNFRkUwNTAwQUFCNTU4IC8qIEpTRE9NQ29uc3RydWN0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTZDRTcwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0ZvbnRG
YWNlUnVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjYwMTdBMzFDNzJEQzk5MDBGNzRBMTYg
LyogQ1NTRm9udEZhY2VTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2NEI0RDcwQ0I0Mjk4
QTAwNUYyQjYyIC8qIENTU0ZvbnRGYWNlU291cmNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk1
NzgsNiArMjk1OTUsNyBAQAogCQkJCUIyQUZGQzdDMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q2Fj
aGVNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREE2MDBEMDA2Q0Q2MDBFRjZGMjYgLyog
Rm9udENhc2NhZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJBRkZDODAwRDAwQTVDMTAwMzAw
NzREIC8qIEZvbnRDYXNjYWRlQ29jb2EubW0gaW4gU291cmNlcyAqLywKKwkJCQk3QzQ1QzlEMDFF
M0VGREZCMDBBQUI1NTggLyogSlNET01XcmFwcGVyQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjJDM0RBNjcwRDAwNkNENjAwRUY2RjI2IC8qIEZvbnRDYXNjYWRlRm9udHMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJN0M0RURENzQxQTdCNjA3ODAwMTk4QzREIC8qIEZvbnRDb2NvYS5tbSBp
biBTb3VyY2VzICovLAogCQkJCUIyQUZGQzdEMEQwMEE1QzEwMDMwMDc0RCAvKiBGb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzE1NDYsNiArMzE1NjQsNyBAQAog
CQkJCUIyMjI3OUE0MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0IwNTBEMDBCRkYxMDA3MUI3
ODIgLyogU1ZHQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUIyMjI3OUE3MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdDdXJzb3JFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTdDNDVDOUQyMUUzRUZFMDgwMEFBQjU1OCAvKiBKU0RPTUV4Y2VwdGlv
bkhhbmRsaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUFEMEQwMEJGMjIwMDcxQjc4
MiAvKiBTVkdEZWZzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlCMDBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHRGVzY0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIy
Mjc5QjMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0RvY3VtZW50LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtMzE1NjAsNiArMzE1NzksNyBAQAogCQkJCUIyMjI3OUNEMEQwMEJGMjIwMDcxQjc4MiAvKiBT
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIy
NzlEMDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE5MjEzMjc0MTFDMEU2QkIwMDQ1NjIzOCAvKiBTVkdGRUNvbnZvbHZlTWF0
cml4RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzQ1QzlDRjFFM0VGREY3MDBBQUI1
NTggLyogSlNET01CaW5kaW5nU2VjdXJpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5
RDMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMjIyNzlENjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUQ5MEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmNw
cAkocmV2aXNpb24gMjExMzkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FsbGJh
Y2tGdW5jdGlvbi5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
Ci0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWxsYmFja0Z1bmN0aW9uLmgiCi0K
LSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0j
aW5jbHVkZSA8cnVudGltZS9DYWxsRGF0YS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJv
b2wgY2hlY2tGdW5jdGlvbk9ubHlDYWxsYmFjayhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgQ2FsbGJhY2tBbGxvd2VkVmFsdWVGbGFncyBhY2NlcHRlZFZhbHVlcykK
LXsKLSAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQoKSAmJiAoYWNjZXB0ZWRWYWx1ZXMgJiBDYWxs
YmFja0FsbG93VW5kZWZpbmVkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHZh
bHVlLmlzTnVsbCgpICYmIChhY2NlcHRlZFZhbHVlcyAmIENhbGxiYWNrQWxsb3dOdWxsKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBp
ZiAoZ2V0Q2FsbERhdGEodmFsdWUsIGNhbGxEYXRhKSA9PSBKU0M6OkNhbGxUeXBlOjpOb25lKSB7
Ci0gICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsK
LSAgICAgICAgdGhyb3dUeXBlTWlzbWF0Y2hFcnJvcigqc3RhdGUsIHNjb3BlKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9DYWxsYmFja0Z1bmN0aW9uLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTEgKzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhbGxiYWNrRnVuY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmgJ
KHJldmlzaW9uIDIxMTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhbGxiYWNr
RnVuY3Rpb24uaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0Lmg+Ci0KLW5hbWVzcGFj
ZSBKU0MgewotY2xhc3MgRXhlY1N0YXRlOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIEpTRE9NR2xvYmFsT2JqZWN0OwotCi1lbnVtIENhbGxiYWNrQWxsb3dlZFZhbHVlRmxhZyB7
Ci0gICAgQ2FsbGJhY2tBbGxvd1VuZGVmaW5lZCA9IDEsCi0gICAgQ2FsbGJhY2tBbGxvd051bGwg
PSAxIDw8IDEKLX07Ci0KLXR5cGVkZWYgdW5zaWduZWQgQ2FsbGJhY2tBbGxvd2VkVmFsdWVGbGFn
czsKLQotYm9vbCBjaGVja0Z1bmN0aW9uT25seUNhbGxiYWNrKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBDYWxsYmFja0FsbG93ZWRWYWx1ZUZsYWdzKTsKLQotLy8gQ3JlYXRlcyBjYWxs
YmFjayBvYmplY3RzIGZvciBjYWxsYmFja3MgbWFya2VkIGFzIEZ1bmN0aW9uT25seSBpbiBXZWJJ
REwuCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSlNDYWxsYmFja1R5cGU+Ci1SZWZQdHI8SlNDYWxsYmFj
a1R5cGU+IGNyZWF0ZUZ1bmN0aW9uT25seUNhbGxiYWNrKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFsdWUsIENhbGxi
YWNrQWxsb3dlZFZhbHVlRmxhZ3MgYWNjZXB0ZWRWYWx1ZXMgPSAwKQotewotICAgIGlmIChjaGVj
a0Z1bmN0aW9uT25seUNhbGxiYWNrKGV4ZWMsIHZhbHVlLCBhY2NlcHRlZFZhbHVlcykpCi0gICAg
ICAgIHJldHVybiBKU0NhbGxiYWNrVHlwZTo6Y3JlYXRlKGFzT2JqZWN0KHZhbHVlKSwgZ2xvYmFs
T2JqZWN0KTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FsbGJh
Y2tGdW5jdGlvbi5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCww
ICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01Db25zdHJ1Y3RvcldpdGhEb2N1
bWVudC5oCShyZXZpc2lvbiAyMTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9E
T01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oCShub25leGlzdGVudCkKQEAgLTEsNDkgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotLy8gQ29uc3RydWN0b3JzIHVzaW5nIHRoaXMgYmFzZSBjbGFzcyBk
ZXBlbmQgb24gYmVpbmcgaW4gYSBEb2N1bWVudCBhbmQKLS8vIGNhbiBuZXZlciBiZSB1c2VkIGZy
b20gYSBXb3JrZXJHbG9iYWxTY29wZS4KLWNsYXNzIERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50
IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVj
dG9yT2JqZWN0IEJhc2U7Ci1wdWJsaWM6Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxEb2N1bWVudD4oc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICBET01Db25zdHJ1Y3RvcldpdGhE
b2N1bWVudChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQotICAgICAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0KQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgewotICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihnbG9iYWxPYmplY3Qudm0oKSk7Ci0gICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3Qu
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5pc0RvY3VtZW50KCkpOwotICAgIH0KLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
QmluZGluZ3NBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAkocmV2aXNpb24gMjExMzkyKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNyArMjYsNiBAQAogLy8gVGhpcyBhbGwtaW4tb25lIGNwcCBmaWxlIGN1dHMgZG93
biBvbiB0ZW1wbGF0ZSBibG9hdCB0byBhbGxvdyB1cyB0byBidWlsZCBvdXIgV2luZG93cyByZWxl
YXNlIGJ1aWxkLgogCiAjaW5jbHVkZSAiQ2FjaGVkTW9kdWxlU2NyaXB0TG9hZGVyLmNwcCIKLSNp
bmNsdWRlICJDYWxsYmFja0Z1bmN0aW9uLmNwcCIKICNpbmNsdWRlICJET01XcmFwcGVyV29ybGQu
Y3BwIgogI2luY2x1ZGUgIkdDQ29udHJvbGxlci5jcHAiCiAjaW5jbHVkZSAiSlNBbmltYXRpb25U
aW1lbGluZUN1c3RvbS5jcHAiCkBAIC00Niw2ICs0NSw5IEBACiAjaW5jbHVkZSAiSlNTUUxTdGF0
ZW1lbnRFcnJvckNhbGxiYWNrQ3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0N1c3RvbVhQYXRoTlNS
ZXNvbHZlci5jcHAiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmNwcCIKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmdTZWN1cml0eS5jcHAiCisjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5jcHAiCisj
aW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAiCiAjaW5jbHVkZSAiSlNET01HbG9i
YWxPYmplY3QuY3BwIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0VGFzay5jcHAiCiAjaW5j
bHVkZSAiSlNET01Qcm9taXNlLmNwcCIKQEAgLTU1LDYgKzU3LDcgQEAKICNpbmNsdWRlICJKU0RP
TVdpbmRvd1Byb3BlcnRpZXMuY3BwIgogI2luY2x1ZGUgIkpTRE9NV2luZG93U2hlbGwuY3BwIgog
I2luY2x1ZGUgIkpTRE9NV3JhcHBlci5jcHAiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUu
Y3BwIgogI2luY2x1ZGUgIkpTRG9jdW1lbnRDdXN0b20uY3BwIgogI2luY2x1ZGUgIkpTRG9jdW1l
bnRGcmFnbWVudEN1c3RvbS5jcHAiCiAjaW5jbHVkZSAiSlNFbGVtZW50Q3VzdG9tLmNwcCIKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHAJKHJl
dmlzaW9uIDIxMTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkpTQ3J5cHRvLmgiCiAKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5k
bGluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvQXJyYXlCdWZmZXJWaWV3Lmg+CiAjaW5jbHVkZSA8
cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaD4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1c3RvbVhQ
YXRoTlNSZXNvbHZlci5jcHAJKHJldmlzaW9uIDIxMTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsOCArMjgsOCBAQAogCiAjaW5jbHVkZSAiQ29tbW9uVk0uaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1
c3RvbS5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cAkocmV2aXNpb24gMjExMzkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNDIgKzI0LDE5IEBACiAKICNpbmNsdWRl
ICJDYWNoZWRTY3JpcHQuaCIKICNpbmNsdWRlICJDb21tb25WTS5oIgotI2luY2x1ZGUgIkRPTUNv
bnN0cnVjdG9yV2l0aERvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkhl
YWRlcnMuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25JbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJh
c2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKLSNpbmNsdWRlICJKU0RP
TVByb21pc2UuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgotI2luY2x1ZGUgIkpT
RXhjZXB0aW9uQmFzZS5oIgotI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSA8
Ynl0ZWNvZGUvQ29kZUJsb2NrLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFj
ay5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg+CiAjaW5j
bHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvckhhbmRsaW5nU2NvcGUuaD4KLSNpbmNsdWRlIDxydW50
aW1lL0Vycm9ySW5zdGFuY2UuaD4KLSNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbi5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNG
dW5jdGlvbi5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVy
TmFtZXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0
b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlf
REVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yT2JqZWN0KTsKLVNUQVRJQ19BU1NFUlRfSVNfVFJJ
VklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCk7Ci0KIHZvaWQg
YWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7CiAg
ICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwpAQCAtMTg0LDE3
MCArMTYxLDYgQEAgZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50b09iamVjdChleGVjKSkt
PmludGVybmFsTnVtYmVyKCk7CiB9CiAKLXZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQp
Ci17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJy
ZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBhdXRvKiBleGNlcHRpb24gPSBqc0R5
bmFtaWNEb3duY2FzdDxKU0M6OkV4Y2VwdGlvbio+KHZtLCBleGNlcHRpb25WYWx1ZSk7Ci0gICAg
aWYgKCFleGNlcHRpb24pIHsKLSAgICAgICAgZXhjZXB0aW9uID0gdm0ubGFzdEV4Y2VwdGlvbigp
OwotICAgICAgICBpZiAoIWV4Y2VwdGlvbikKLSAgICAgICAgICAgIGV4Y2VwdGlvbiA9IEpTQzo6
RXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhjZXB0aW9uVmFsdWUsIEpTQzo6RXhjZXB0
aW9uOjpEb05vdENhcHR1cmVTdGFjayk7Ci0gICAgfQotCi0gICAgcmVwb3J0RXhjZXB0aW9uKGV4
ZWMsIGV4Y2VwdGlvbiwgY2FjaGVkU2NyaXB0KTsKLX0KLQotU3RyaW5nIHJldHJpZXZlRXJyb3JN
ZXNzYWdlKEV4ZWNTdGF0ZSYgc3RhdGUsIFZNJiB2bSwgSlNWYWx1ZSBleGNlcHRpb24sIENhdGNo
U2NvcGUmIGNhdGNoU2NvcGUpCi17Ci0gICAgaWYgKGF1dG8qIGV4Y2VwdGlvbkJhc2UgPSB0b0V4
Y2VwdGlvbkJhc2Uodm0sIGV4Y2VwdGlvbikpCi0gICAgICAgIHJldHVybiBleGNlcHRpb25CYXNl
LT50b1N0cmluZygpOwotCi0gICAgLy8gRklYTUU6IDxodHRwOi8vd2Via2l0Lm9yZy9iLzExNTA4
Nz4gV2ViIEluc3BlY3RvcjogV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uIHNob3VsZCBub3QgZXZh
bHVhdGUgSmF2YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCi0gICAgLy8gSWYgdGhpcyBpcyBh
IGN1c3RvbSBleGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0IHRvIHRyeSBhbmQg
Z2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGNlcHRpb24uCi0gICAg
U3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoYXV0byogZXJyb3IgPSBqc0R5bmFtaWNEb3du
Y2FzdDxFcnJvckluc3RhbmNlKj4odm0sIGV4Y2VwdGlvbikpCi0gICAgICAgIGVycm9yTWVzc2Fn
ZSA9IGVycm9yLT5zYW5pdGl6ZWRUb1N0cmluZygmc3RhdGUpOwotICAgIGVsc2UKLSAgICAgICAg
ZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0KLSAgICAvLyBX
ZSBuZWVkIHRvIGNsZWFyIGFueSBuZXcgZXhjZXB0aW9uIHRoYXQgbWF5IGJlIHRocm93biBpbiB0
aGUgdG9TdHJpbmcoKSBjYWxsIGFib3ZlLgotICAgIC8vIHJlcG9ydEV4Y2VwdGlvbigpIGlzIG5v
dCBzdXBwb3NlZCB0byBiZSBtYWtpbmcgbmV3IGV4Y2VwdGlvbnMuCi0gICAgY2F0Y2hTY29wZS5j
bGVhckV4Y2VwdGlvbigpOwotICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOwotICAgIHJldHVy
biBlcnJvck1lc3NhZ2U7Ci19Ci0KLXZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBjYWNoZWRTY3JpcHQs
IEV4Y2VwdGlvbkRldGFpbHMqIGV4Y2VwdGlvbkRldGFpbHMpCi17Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0KLSAg
ICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAg
ICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLCBleGNlcHRpb24pKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZShleGVjLT52
bSgpKTsKLQotICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3Jp
cHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgU2NyaXB0Q2FsbFN0YWNr
OjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKSk7Ci0gICAgc2NvcGUuY2xlYXJFeGNlcHRpb24o
KTsKLSAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKLQotICAgIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwotICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0ganNEeW5hbWlj
RG93bmNhc3Q8SlNET01XaW5kb3cqPih2bSwgZ2xvYmFsT2JqZWN0KSkgewotICAgICAgICBpZiAo
IXdpbmRvdy0+d3JhcHBlZCgpLmlzQ3VycmVudGx5RGlzcGxheWVkSW5GcmFtZSgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBsaW5lTnVtYmVyID0gMDsKLSAgICBpbnQg
Y29sdW1uTnVtYmVyID0gMDsKLSAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJMOwotICAgIGlm
IChjb25zdCBTY3JpcHRDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxTdGFjay0+Zmlyc3ROb25O
YXRpdmVDYWxsRnJhbWUoKSkgewotICAgICAgICBsaW5lTnVtYmVyID0gY2FsbEZyYW1lLT5saW5l
TnVtYmVyKCk7Ci0gICAgICAgIGNvbHVtbk51bWJlciA9IGNhbGxGcmFtZS0+Y29sdW1uTnVtYmVy
KCk7Ci0gICAgICAgIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGNhbGxGcmFtZS0+c291cmNlVVJMKCk7
Ci0gICAgfQotCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHJldHJpZXZlRXJyb3JNZXNzYWdl
KCpleGVjLCB2bSwgZXhjZXB0aW9uLT52YWx1ZSgpLCBzY29wZSk7Ci0gICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdsb2JhbE9iamVjdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnJlcG9ydEV4
Y2VwdGlvbihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgZXhjZXB0aW9u
U291cmNlVVJMLCBleGNlcHRpb24sIGNhbGxTdGFjay0+c2l6ZSgpID8gY2FsbFN0YWNrIDogbnVs
bHB0ciwgY2FjaGVkU2NyaXB0KTsKLQotICAgIGlmIChleGNlcHRpb25EZXRhaWxzKSB7Ci0gICAg
ICAgIGV4Y2VwdGlvbkRldGFpbHMtPm1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7Ci0gICAgICAgIGV4
Y2VwdGlvbkRldGFpbHMtPmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAgICAgICBleGNlcHRp
b25EZXRhaWxzLT5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7Ci0gICAgICAgIGV4Y2VwdGlv
bkRldGFpbHMtPnNvdXJjZVVSTCA9IGV4Y2VwdGlvblNvdXJjZVVSTDsKLSAgICB9Ci19Ci0KLXZv
aWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
Ci0gICAgYXV0byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7Ci0gICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKLSAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKLX0K
LQotc3RhdGljIEpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhj
ZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nKiBtZXNzYWdlID0gbnVsbHB0cikKLXsKLSAgICBp
ZiAoIWVjIHx8IGVjID09IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotCi0gICAgLy8gRklYTUU6IEhhbmRsZSBvdGhlciBXZWJJREwgZXhjZXB0
aW9uIHR5cGVzLgotICAgIGlmIChlYyA9PSBUeXBlRXJyb3IpIHsKLSAgICAgICAgaWYgKCFtZXNz
YWdlIHx8IG1lc3NhZ2UtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVUeXBl
RXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZXhlYywgKm1lc3Nh
Z2UpOwotICAgIH0KLQotICAgIGlmIChlYyA9PSBSYW5nZUVycm9yKSB7Ci0gICAgICAgIGlmICgh
bWVzc2FnZSB8fCBtZXNzYWdlLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkJhZCB2YWx1ZSIpKTsKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgKm1lc3NhZ2UpOwotICAgIH0KLQotICAgIGlmIChl
YyA9PSBTdGFja092ZXJmbG93RXJyb3IpCi0gICAgICAgIHJldHVybiBjcmVhdGVTdGFja092ZXJm
bG93RXJyb3IoZXhlYyk7Ci0KLSAgICAvLyBGSVhNRTogQWxsIGNhbGxlcnMgdG8gY3JlYXRlRE9N
RXhjZXB0aW9uIG5lZWQgdG8gcGFzcyBpbiB0aGUgY29ycmVjdCBnbG9iYWwgb2JqZWN0LgotICAg
IC8vIEZvciBub3csIHdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGUgbGV4aWNhbEdsb2JhbE9iamVj
dC4gV2hpY2ggaXMgd3JvbmcgaW4gY2FzZXMgbGlrZSB0aGlzOgotICAgIC8vIGZyYW1lc1swXS5k
b2N1bWVudC5jcmVhdGVFbGVtZW50KG51bGwsIG51bGwpOyAvLyB0aHJvd3MgYW4gZXhjZXB0aW9u
IHdoaWNoIHNob3VsZCBoYXZlIHRoZSBzdWJmcmFtZSdzIHByb3RvdHlwZXMuCi0gICAgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90
b3R5cGUoZXhlYyk7Ci0KLSAgICBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVzY3JpcHRpb24o
ZWMpOwotCi0gICAgQ1N0cmluZyBtZXNzYWdlQ1N0cmluZzsKLSAgICBpZiAobWVzc2FnZSkKLSAg
ICAgICAgbWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlLT51dGY4KCk7Ci0gICAgaWYgKG1lc3NhZ2Ug
JiYgIW1lc3NhZ2UtPmlzRW1wdHkoKSkgewotICAgICAgICAvLyBJdCBpcyBzYWZlIHRvIGRvIHRo
aXMgYmVjYXVzZSB0aGUgY2hhciogY29udGVudHMgb2YgdGhlIENTdHJpbmcgYXJlIGNvcGllZCBp
bnRvIGEgbmV3IFdURjo6U3RyaW5nIGJlZm9yZSB0aGUgQ1N0cmluZyBpcyBkZXN0cm95ZWQuCi0g
ICAgICAgIGRlc2NyaXB0aW9uLmRlc2NyaXB0aW9uID0gbWVzc2FnZUNTdHJpbmcuZGF0YSgpOwot
ICAgIH0KLQotICAgIEpTVmFsdWUgZXJyb3JPYmplY3Q7Ci0gICAgc3dpdGNoIChkZXNjcmlwdGlv
bi50eXBlKSB7Ci0gICAgY2FzZSBET01Db3JlRXhjZXB0aW9uVHlwZToKLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLSAgICBjYXNlIElEQkRhdGFiYXNlRXhjZXB0aW9uVHlwZToKLSNlbmRp
ZgotICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBET01Db3Jl
RXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBGaWxlRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgRmlsZUV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgU1FMRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmplY3Qg
PSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1FMRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRp
b24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTVkdFeGNlcHRpb25UeXBlOgotICAgICAg
ICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdFeGNlcHRpb246OmNy
ZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFhQYXRoRXhjZXB0
aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
WFBhdGhFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgCi0gICAgQVNTRVJUKGVycm9yT2JqZWN0KTsKLSAgICBhZGRFcnJvckluZm8oZXhl
YywgYXNPYmplY3QoZXJyb3JPYmplY3QpLCB0cnVlKTsKLSAgICByZXR1cm4gZXJyb3JPYmplY3Q7
Ci19Ci0KLUpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYywgRXhjZXB0
aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIHJldHVybiBjcmVhdGVE
T01FeGNlcHRpb24oZXhlYywgZWMsICZtZXNzYWdlKTsKLX0KLQotSlNWYWx1ZSBjcmVhdGVET01F
eGNlcHRpb24oRXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQotewotICAg
IHJldHVybiBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBleGNlcHRpb24uY29kZSgpLCBleGNl
cHRpb24ucmVsZWFzZU1lc3NhZ2UoKSk7Ci19Ci0KLXZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uU2xv
d1BhdGgoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUs
IEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKLXsKLSAgICBBU1NFUlQoIXRocm93U2NvcGUuZXhjZXB0
aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlRE9N
RXhjZXB0aW9uKHN0YXRlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpKTsKLX0KLQogYm9vbCBoYXNJdGVy
YXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsK
ICAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CkBAIC0zNjUsNDMgKzE3OCw2IEBAIGJvb2wgaGFz
SXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmIHMKICAgICByZXR1cm4gIWFwcGx5TWV0aG9k
LmlzVW5kZWZpbmVkKCk7CiB9CiAKLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0Fj
Y2Vzc1RvRnJhbWUoRXhlY1N0YXRlJiBzdGF0ZSwgRnJhbWUmIGZyYW1lLCBTdHJpbmcmIG1lc3Nh
Z2UpCi17Ci0gICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1l
KCZzdGF0ZSwgJmZyYW1lLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBtZXNzYWdlID0gZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmNy
b3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpKTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0Fj
Y2Vzc1RvRE9NV2luZG93KEV4ZWNTdGF0ZSYgc3RhdGUsIERPTVdpbmRvdyYgZ2xvYmFsT2JqZWN0
LCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxs
b3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIGdsb2JhbE9iamVjdCwgRG9Ob3RSZXBvcnRTZWN1
cml0eUVycm9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgbWVzc2FnZSA9IGdsb2JhbE9i
amVjdC5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRl
KSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJh
bWUoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCFmcmFt
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+
cHJpbnRFcnJvck1lc3NhZ2UobWVzc2FnZSk7Ci19Ci0KLVN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9N
U3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvKQotewotICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xv
YmFsT2JqZWN0LnN0cnVjdHVyZXMoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKLSAgICByZXR1cm4gc3Ry
dWN0dXJlcy5nZXQoY2xhc3NJbmZvKS5nZXQoKTsKLX0KLQotU3RydWN0dXJlKiBjYWNoZURPTVN0
cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCi17Ci0gICAgYXV0byBsb2NrZXIgPSBs
b2NrRHVyaW5nTWFya2luZyhnbG9iYWxPYmplY3Qudm0oKS5oZWFwLCBnbG9iYWxPYmplY3QuZ2NM
b2NrKCkpOwotICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0
LnN0cnVjdHVyZXMobG9ja2VyKTsKLSAgICBBU1NFUlQoIXN0cnVjdHVyZXMuY29udGFpbnMoY2xh
c3NJbmZvKSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4oZ2xvYmFsT2JqZWN0LnZtKCksICZnbG9iYWxPYmplY3QsIHN0cnVjdHVy
ZSkpLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQogc3RhdGljIGNvbnN0IGludDMyX3Qga01h
eEludDMyID0gMHg3ZmZmZmZmZjsKIHN0YXRpYyBjb25zdCBpbnQzMl90IGtNaW5JbnQzMiA9IC1r
TWF4SW50MzIgLSAxOwogc3RhdGljIGNvbnN0IHVpbnQzMl90IGtNYXhVSW50MzIgPSAweGZmZmZm
ZmZmVTsKQEAgLTcxNSwzMjAgKzQ5MSw0IEBAIHVpbnQ2NF90IHRvVUludDY0KEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmEKICAgICByZXR1cm4gbjsKIH0KIAotY2xhc3MgR2V0Q2FsbGVyR2xvYmFsT2Jq
ZWN0RnVuY3RvciB7Ci1wdWJsaWM6Ci0gICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3Rvcigp
ID0gZGVmYXVsdDsKLQotICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tW
aXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX2hhc1NraXBwZWRG
aXJzdEZyYW1lKSB7Ci0gICAgICAgICAgICBtX2hhc1NraXBwZWRGaXJzdEZyYW1lID0gdHJ1ZTsK
LSAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGF1dG8qIGNvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpKQotICAg
ICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh2aXNpdG9yLT5jYWxsZWUoKSk7Ci0gICAg
ICAgICAgICAvLyBGSVhNRTogQ2FsbGVlIGlzIG5vdCBhbiBvYmplY3QgaWYgdGhlIGNhbGxlciBp
cyBXZWIgQXNzZW1ibHkuCi0gICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gaGVy
ZS4gV2UgY2FuIHByb2JhYmx5IGdldCB0aGUgZ2xvYmFsIG9iamVjdAotICAgICAgICAgICAgLy8g
ZnJvbSB0aGUgdG9wLW1vc3QgV2FzbSBJbnN0YW5jZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NTcyMQotICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxlZSgp
LT5pc09iamVjdCgpKQotICAgICAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpT
T2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwotICAgIH0KLQotICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdDsgfQot
Ci1wcml2YXRlOgotICAgIG11dGFibGUgYm9vbCBtX2hhc1NraXBwZWRGaXJzdEZyYW1lIHsgZmFs
c2UgfTsKLSAgICBtdXRhYmxlIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdCB7IG51bGxw
dHIgfTsKLX07Ci0KLURPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yIGl0ZXI7Ci0gICAgZXhlYy0+aXRl
cmF0ZShpdGVyKTsKLSAgICByZXR1cm4gaXRlci5nbG9iYWxPYmplY3QoKSA/IGFzSlNET01XaW5k
b3coaXRlci5nbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKSA6IGZpcnN0RE9NV2luZG93KGV4ZWMp
OwotfQotCi1ET01XaW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+d3Jh
cHBlZCgpOwotfQotCi1ET01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkp
LT53cmFwcGVkKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5BY2Nlc3NEb2N1bWVudChK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERvY3VtZW50KiB0YXJnZXREb2N1bWVudCwgU2VjdXJpdHlS
ZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLT52
bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlm
ICghdGFyZ2V0RG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIERPTVdpbmRv
dyYgYWN0aXZlID0gYWN0aXZlRE9NV2luZG93KHN0YXRlKTsKLQotICAgIGlmIChhY3RpdmUuZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5jYW5BY2Nlc3ModGFyZ2V0RG9jdW1lbnQtPnNlY3Vy
aXR5T3JpZ2luKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHN3aXRjaCAocmVwb3J0
aW5nT3B0aW9uKSB7Ci0gICAgY2FzZSBUaHJvd1NlY3VyaXR5RXJyb3I6Ci0gICAgICAgIHRocm93
U2VjdXJpdHlFcnJvcigqc3RhdGUsIHNjb3BlLCB0YXJnZXREb2N1bWVudC0+ZG9tV2luZG93KCkt
PmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZSkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIExvZ1NlY3VyaXR5RXJyb3I6Ci0gICAgICAgIHByaW50RXJyb3JNZXNzYWdlRm9y
RnJhbWUodGFyZ2V0RG9jdW1lbnQtPmZyYW1lKCksIHRhcmdldERvY3VtZW50LT5kb21XaW5kb3co
KS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yOgotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRE9NV2luZG93
JiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKLXsKLSAg
ICByZXR1cm4gY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC5kb2N1bWVudCgpLCByZXBv
cnRpbmdPcHRpb24pOwotfQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nl
c3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRnJhbWUqIHRhcmdldCwgU2VjdXJpdHlS
ZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQotewotICAgIHJldHVybiB0YXJnZXQgJiYg
Y2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC0+ZG9jdW1lbnQoKSwgcmVwb3J0aW5nT3B0
aW9uKTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9Ob2Rl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgTm9kZSogdGFyZ2V0KQotewotICAgIHJldHVybiAhdGFy
Z2V0IHx8IGNhbkFjY2Vzc0RvY3VtZW50KCZzdGF0ZSwgJnRhcmdldC0+ZG9jdW1lbnQoKSwgTG9n
U2VjdXJpdHlFcnJvcik7Ci19Ci0gICAgCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgdGhyb3dUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigm
c3RhdGUsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwotfQotCi1zdGF0aWMgdm9pZCBhcHBlbmRBcmd1
bWVudE11c3RCZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4
LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIkFy
Z3VtZW50ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGFyZ3VtZW50SW5kZXggKyAxKTsK
LSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAoJyIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGFy
Z3VtZW50TmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCInKSB0byAiKTsKLSAgICBp
ZiAoIWZ1bmN0aW9uTmFtZSkgewotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoInRoZSAi
KTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiIGNvbnN0cnVjdG9yIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
YnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcu
Jyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZ1bmN0aW9uTmFtZSk7Ci0gICAgfQotICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG11c3QgYmUgIik7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFs
dWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAg
ICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGlj
YWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBjb250ZXh0
LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9y
LCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICciLCBh
dHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VOYW1lLCAiIG9iamVjdC4iKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLX0KLSAgICAKLXZv
aWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAg
ICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGlj
YWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBjb250ZXh0
LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9y
LCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gc2V0IHByb3BlcnR5ICciLCBhdHRy
aWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VOYW1lLCAiIG9iamVjdC4iKSk7Ci19
Ci0KLXZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7
Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZz
dGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpKTsKLX0KLQotdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVy
cm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3Qg
Y2hhciogbWVzc2FnZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICBT
dHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUs
IHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUiwgJm1l
c3NhZ2VTdHJpbmcpKTsKLX0KLQotdm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVzc2Fn
ZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICBTdHJpbmcgbWVzc2Fn
ZVN0cmluZyhtZXNzYWdlKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVh
dGVET01FeGNlcHRpb24oJnN0YXRlLCBJTlZBTElEX1NUQVRFX0VSUiwgJm1lc3NhZ2VTdHJpbmcp
KTsKLX0KLQotdm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU0VDVVJJVFlfRVJSLCBtZXNzYWdlKSk7Ci19
Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3Vt
ZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25J
bnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVj
dGVkVmFsdWVzKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBhcHBlbmRBcmd1
bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9u
SW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
Im9uZSBvZjogIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRWYWx1ZXMpOwotICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7
Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25l
ZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7Ci0gICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJ
bmRleCwgYXJndW1lbnROYW1lLCBpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOwotICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYSBmdW5jdGlvbiIpOwotICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5j
b2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNo
YXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKLXsKLSAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwg
YXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0
aW9uTmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJhbiBpbnN0YW5jZSBvZiAiKTsK
LSAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFR5cGUpOwotICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgdGhy
b3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKQotewotICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlM
aXRlcmFsKCJJbnZhbGlkIEFycmF5IGVsZW1lbnQgdHlwZSIpKTsKLX0KLQotdm9pZCB0aHJvd0F0
dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKLXsKLSAgICB0aHJvd1R5cGVFcnJvcihzdGF0
ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0
ZU5hbWUsICIgYXR0cmlidXRlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIiwgZXhwZWN0ZWRUeXBl
KSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNo
YXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25zdCBjaGFyKiBl
eHBlY3RlZFR5cGUpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiTWVtYmVyICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGRpY3Rpb25hcnlO
YW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnLicpOwotICAgIGJ1aWxkZXIuYXBwZW5kKG1lbWJl
ck5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGlzIHJlcXVpcmVkIGFuZCBtdXN0
IGJlIGFuIGluc3RhbmNlIG9mICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVHlwZSk7
Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0
cmluZygpKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9yU2NyaXB0
RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKQotewotICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoJnN0YXRlLCBzY29wZSwgY3JlYXRlUmVmZXJlbmNlRXJyb3Io
JnN0YXRlLCBtYWtlU3RyaW5nKGludGVyZmFjZU5hbWUsICIgY29uc3RydWN0b3IgYXNzb2NpYXRl
ZCBleGVjdXRpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpKSk7Ci19Ci0KLXZvaWQgdGhyb3dT
ZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpCi17Ci0gICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwo
IlZhbHVlIGlzIG5vdCBhIHNlcXVlbmNlIikpOwotfQotCi12b2lkIHRocm93Tm9uRmluaXRlVHlw
ZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJUaGUgcHJvdmlkZWQg
dmFsdWUgaXMgbm9uLWZpbml0ZSIpKTsKLX0KLQotU3RyaW5nIG1ha2VHZXR0ZXJUeXBlRXJyb3JN
ZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLics
IGF0dHJpYnV0ZU5hbWUsICIgZ2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9m
ICIsIGludGVyZmFjZU5hbWUpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93R2V0dGVy
VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsK
LSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBtYWtlR2V0dGVyVHlw
ZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7Ci19Ci0KLUpTQzo6
RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRy
aWJ1dGVOYW1lKQotewotICAgIHJldHVybiBjcmVhdGVSZWplY3RlZFByb21pc2VXaXRoVHlwZUVy
cm9yKHN0YXRlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRy
aWJ1dGVOYW1lKSk7Ci19Ci0KLWJvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewotICAgIHRocm93VHlwZUVycm9yKHN0
YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcuJywgYXR0cmli
dXRlTmFtZSwgIiBzZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBpbnN0YW5jZXMgb2YgIiwgaW50
ZXJmYWNlTmFtZSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIG1ha2VUaGlzVHlw
ZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNhbiBvbmx5IGNhbGwgIiwgaW50
ZXJmYWNlTmFtZSwgJy4nLCBmdW5jdGlvbk5hbWUsICIgb24gaW5zdGFuY2VzIG9mICIsIGludGVy
ZmFjZU5hbWUpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFj
ZU5hbWUsIGZ1bmN0aW9uTmFtZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFBy
b21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmIHByb21pc2UsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCi17Ci0gICAgcHJvbWlz
ZS5yZWplY3QoVHlwZUVycm9yLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFt
ZSwgbWV0aG9kTmFtZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29u
c3QgY2hhciogbWV0aG9kTmFtZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlUmVqZWN0ZWRQcm9taXNl
V2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5h
bWUsIG1ldGhvZE5hbWUpKTsKLX0KLQotdm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3Vt
ZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEpT
Qzo6SlNGdW5jdGlvbiYgZnVuY3Rpb24pCi17Ci0gICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsK
LSAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YSgmZnVuY3Rpb24s
IGNhbGxEYXRhKTsKLSAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotCi0g
ICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKLSAgICBKU0M6OmNhbGwoJnN0
YXRlLCAmZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJnRoaXNPYmplY3QsIGFyZ3VtZW50
cyk7Ci19Ci0KLXZvaWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4oSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAg
YXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCo+
KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZp
c2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsKLX0KLQotc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFRocm93VHlwZUVycm9yKEV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyBvcGVyYXRvciIpKTsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKLX0KLQotQ2FsbFR5cGUgRE9N
Q29uc3RydWN0b3JPYmplY3Q6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0
YSkKLXsKLSAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsVGhyb3dUeXBlRXJyb3I7
Ci0gICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0OwotfQotCi12b2lkIHRocm93RE9NU3ludGF4RXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNZTlRBWF9FUlIpKTsKLX0KLQotdm9p
ZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBEQVRB
X0NMT05FX0VSUikpOwotfQotCi12b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VSVCghc2NvcGUu
ZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURP
TUV4Y2VwdGlvbigmc3RhdGUsIElOREVYX1NJWkVfRVJSKSk7Ci19Ci0KLXZvaWQgdGhyb3dUeXBl
TWlzbWF0Y2hFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRp
b24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgVFlQRV9NSVNNQVRD
SF9FUlIpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDIxMTM5MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MywyNSArMjMsMTQgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJET01XcmFwcGVyV29y
bGQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3Iu
aCIKLSNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTRE9NV3JhcHBl
ci5oIgotI2luY2x1ZGUgIkpTRHluYW1pY0Rvd25jYXN0LmgiCi0jaW5jbHVkZSAiU2NyaXB0V3Jh
cHBhYmxlLmgiCi0jaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oIgotI2luY2x1ZGUg
IldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNh
Y2hlLmgiCiAjaW5jbHVkZSA8Y3N0ZGRlZj4KICNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1dl
YWsuaD4KLSNpbmNsdWRlIDxoZWFwL1dlYWtJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9B
dXhpbGlhcnlCYXJyaWVySW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNp
bmNsdWRlIDxydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
SlNBcnJheS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTQ2VsbElu
bGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oPgpAQCAtNDksOCAr
MzgsNiBAQAogI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CiAjaW5jbHVkZSA8cnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50
aW1lL1R5cGVkQXJyYXlzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9Xcml0ZUJhcnJpZXIuaD4KICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KQEAgLTY2LDE0
MCArNTMsMTAgQEAgY2xhc3MgSlNGdW5jdGlvbjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBDYWNoZWRTY3JpcHQ7Ci1jbGFzcyBEZWZlcnJlZFByb21pc2U7Ci1jbGFzcyBET01XaW5k
b3c7Ci1jbGFzcyBGcmFtZTsKIGNsYXNzIFVSTDsKLWNsYXNzIE5vZGU7Ci0KLXN0cnVjdCBFeGNl
cHRpb25EZXRhaWxzIHsKLSAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICBpbnQgbGluZU51bWJlciB7
IDAgfTsKLSAgICBpbnQgY29sdW1uTnVtYmVyIHsgMCB9OwotICAgIFN0cmluZyBzb3VyY2VVUkw7
Ci19OwotCi0vLyBCYXNlIGNsYXNzIGZvciBhbGwgY29uc3RydWN0b3Igb2JqZWN0cyBpbiB0aGUg
SlNDIGJpbmRpbmdzLgotY2xhc3MgRE9NQ29uc3RydWN0b3JPYmplY3QgOiBwdWJsaWMgSlNET01P
YmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgSlNET01PYmplY3QgQmFzZTsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpJbXBsZW1lbnRzRGVmYXVsdEhhc0lu
c3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGE7Ci0gICAgc3RhdGljIEpT
Qzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqLCBKU0M6OkpTVmFsdWUpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgRE9NQ29uc3RydWN0b3JPYmpl
Y3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotCi0gICAgc3RhdGljIFN0
cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKLSAgICBzdGF0aWMgSlNDOjpDYWxsVHlw
ZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBKU0M6OkNhbGxEYXRhJik7Ci19OwotCi1jbGFzcyBET01D
b25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7
Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOwotCi1wcm90
ZWN0ZWQ6Ci0gICAgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7Ci0KLSAgICBKU0M6OkpTRnVuY3Rpb24qIGlu
aXRpYWxpemVGdW5jdGlvbigpOwotICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6
Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKLQotcHJpdmF0ZToKLSAgICBKU0M6OldyaXRlQmFycmll
cjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6ZUZ1bmN0aW9uOwotfTsKLQotRE9NV2luZG93
JiBjYWxsZXJET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKLURPTVdpbmRvdyYgYWN0aXZlRE9N
V2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci1ET01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEpTQzo6
RXhlY1N0YXRlKik7Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVwb3J0
RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lk
IHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIq
IGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotCi12b2lkIHRocm93
QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSwgY29uc3Qg
Y2hhciogZXhwZWN0ZWRUeXBlKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgdGhyb3dTZXR0ZXJUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLQotdm9pZCB0aHJvd0FycmF5
RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9p
ZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7
Ci12b2lkIHRocm93RE9NU3ludGF4RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmKTsgLy8gTm90IHRoZSBzYW1lIGFzIGEgSmF2YVNjcmlwdCBzeW50YXggZXJyb3IuCi12b2lk
IHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsK
LXZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCB0aHJvd05v
bkZpbml0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9p
ZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
Jik7Ci12b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKLXZvaWQgdGhyb3dTZWN1cml0eUVycm9y
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6
RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIq
IGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVzKTsKLUpTQzo6RW5j
b2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFy
KiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUg
dGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYs
IHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3Qg
Y2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNv
bnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1Zh
bHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5
TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhy
b3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSk7
Ci0KLVN0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZh
Y2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLVN0cmluZyBtYWtlVGhpc1R5cGVF
cnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmli
dXRlTmFtZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFy
KiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLVdFQkNPUkVfRVhQ
T1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lKTsKLQotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSBy
ZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9F
WFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3Io
RGVmZXJyZWRQcm9taXNlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
b3BlcmF0aW9uTmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVj
dFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpOwotCi1XRUJDT1JFX0VYUE9S
VCBKU0M6OlN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0
JiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJl
KiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6U3RydWN0dXJlKiwg
Y29uc3QgSlNDOjpDbGFzc0luZm8qKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNz
PiBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3RydWN0dXJlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9i
amVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSog
ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSopOwotdGVtcGxhdGU8dHlw
ZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTT2JqZWN0KiBnZXRET01Qcm90b3R5cGUoSlNDOjpW
TSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLQotdm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVu
dEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEpT
Qzo6SlNGdW5jdGlvbiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNGdW5jdGlv
biYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotCi1KU0M6OldlYWtI
YW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZm
ZXIqKTsKLXZvaWQqIHdyYXBwZXJLZXkoSlNDOjpBcnJheUJ1ZmZlciopOwotCi1KU0RPTU9iamVj
dCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKik7Ci1KU0RP
TU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBTY3JpcHRX
cmFwcGFibGUqKTsKLUpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKik7Ci0KLWJvb2wgc2V0SW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqLCBKU0M6Oldl
YWtIYW5kbGVPd25lciopOwotYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJX
b3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9NT2JqZWN0KiB3cmFwcGVyLCBKU0M6OldlYWtI
YW5kbGVPd25lciogd3JhcHBlck93bmVyKTsKLWJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3
cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKTsKLQotYm9vbCBjbGVh
cklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0
Kik7Ci1ib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBTY3Jp
cHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3JhcHBlcik7Ci1ib29sIGNsZWFySW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKiwgSlNDOjpKU0Fy
cmF5QnVmZmVyKiB3cmFwcGVyKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6
SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MmKTsK
LXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0Q2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBSZWY8RE9NQ2xhc3M+JiBvYmplY3Qp
IHsgcmV0dXJuIGdldENhY2hlZFdyYXBwZXIod29ybGQsIG9iamVjdC5nZXQoKSk7IH0KLXRlbXBs
YXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IHZvaWQgY2FjaGVX
cmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNzKiwgV3JhcHBlckNsYXNzKik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiB2b2lkIHVuY2Fj
aGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNzKiwgV3JhcHBlckNsYXNzKik7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gYXV0byBjcmVhdGVXcmFwcGVy
KEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm
PHN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZTsKLXRlbXBsYXRl
PHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01H
bG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6
aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0
ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlw
ZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNWYWx1ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBET01DbGFzcyYpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBK
U0NsYXNzJiBjYXN0VGhpc1ZhbHVlKEpTQzo6RXhlY1N0YXRlJik7CiAKIHZvaWQgYWRkSW1wdXJl
UHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLWNvbnN0IEpTQzo6SGFzaFRhYmxlJiBn
ZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKEpTQzo6Vk0mLCBjb25zdCBKU0M6Okhhc2hUYWJsZSYg
c3RhdGljVGFibGUpOwotCi1TdHJpbmcgcmV0cmlldmVFcnJvck1lc3NhZ2UoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiwgSlNDOjpDYXRjaFNjb3BlJik7
Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogPSBudWxscHRyKTsKLVdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRp
b24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0ciwgRXhjZXB0aW9uRGV0YWlscyogPSBudWxscHRy
KTsKLXZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwotCi1KU0M6
OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uJiYp
OwotSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEV4Y2Vw
dGlvbkNvZGUsIGNvbnN0IFN0cmluZyYpOwotCi0vLyBDb252ZXJ0IGEgRE9NIGltcGxlbWVudGF0
aW9uIGV4Y2VwdGlvbiBpbnRvIGEgSmF2YVNjcmlwdCBleGNlcHRpb24gaW4gdGhlIGV4ZWN1dGlv
biBzdGF0ZS4KLXZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9wYWdhdGVF
eGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2Vw
dGlvbiYmKTsKLQogSlNDOjpKU1ZhbHVlIGpzU3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgY29uc3Qg
VVJMJik7IC8vIGVtcHR5IGlmIHRoZSBVUkwgaXMgbnVsbAogCiBKU0M6OkpTVmFsdWUganNTdHJp
bmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyB1bmRlZmlu
ZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCkBAIC0yMTAsNyArNjcsNiBAQCBKU0M6OkpTVmFsdWUg
anNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4CiBKU0M6OkpTVmFsdWUganNPd25lZFN0cmluZ09y
TnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwogCiBTdHJpbmcgcHJvcGVydHlO
YW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwotCiBBdG9taWNTdHJpbmcgcHJvcGVydHlO
YW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwogCiBXRUJDT1JFX0VYUE9SVCBT
dHJpbmcgaWRlbnRpZmllclRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYpOwpAQCAtMjU0LDkgKzExMCw2IEBAIEpTQzo6SlNWYWx1ZSBqc0RhdGUoSlND
OjpFeGVjU3RhdGUqLCBkb3UKIC8vIE5hTiBpZiB0aGUgdmFsdWUgY2FuJ3QgYmUgY29udmVydGVk
IHRvIGEgZGF0ZS4KIGRvdWJsZSB2YWx1ZVRvRGF0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSk7CiAKLS8vIFZhbGlkYXRlcyB0aGF0IHRoZSBwYXNzZWQgb2JqZWN0IGlzIGEgc2VxdWVu
Y2UgdHlwZSBwZXIgc2VjdGlvbiA0LjEuMTMgb2YgdGhlIFdlYklETCBzcGVjLgotSlNDOjpKU09i
amVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCB1bnNpZ25l
ZCYgbGVuZ3RoKTsKLQogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXImKTsKIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Jik7
CiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
SlNDOjpBcnJheUJ1ZmZlciopOwpAQCAtMjY3LDEwICsxMjAsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgVmVjdG9y
PFJlZlB0cjxUPj4mKTsKIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJik7CiAKLUpTQzo6SlNWYWx1ZSB0
b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNW
YWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUJik7Ci1KU0M6OkpTVmFs
dWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJik7Ci0KIFJlZlB0cjxKU0M6OkFycmF5
QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlND
OjpKU1ZhbHVlKTsKIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDhB
cnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRv
UG9zc2libHlTaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwpAQCAtMjkz
LDI4NSArMTQyLDE2IEBAIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hhcmVkVWludDMK
IFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZs
b2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKIAotdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgSlNUeXBlPiBWZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSXRlcmF0
b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi1lbnVtIFNlY3VyaXR5
UmVwb3J0aW5nT3B0aW9uIHsgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yLCBMb2dTZWN1cml0eUVy
cm9yLCBUaHJvd1NlY3VyaXR5RXJyb3IgfTsKLW5hbWVzcGFjZSBCaW5kaW5nU2VjdXJpdHkgewot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhl
Y1N0YXRlJiwgVCYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlG
b3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgVCopOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEV4
Y2VwdGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2Vw
dGlvbk9yPFQqPiYmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNlcHRpb25PcjxUKj4g
Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb25PcjxUJj4mJik7
Ci0gICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKiwg
RE9NV2luZG93JiwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1cml0eUVycm9yKTsK
LSAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUmLCBE
T01XaW5kb3cmLCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NU
b0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiwgRnJhbWUqLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9
IExvZ1NlY3VyaXR5RXJyb3IpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpT
Qzo6RXhlY1N0YXRlJiwgRnJhbWUmLCBTdHJpbmcmIG1lc3NhZ2UpOwotICAgIGJvb2wgc2hvdWxk
QWxsb3dBY2Nlc3NUb05vZGUoSlNDOjpFeGVjU3RhdGUmLCBOb2RlKik7Ci19OwotCi12b2lkIHBy
aW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwot
CiBTdHJpbmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwogQXRvbWlj
U3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKIAot
dGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNW
YWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSk7Ci0KLQotZW51bSBjbGFzcyBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvciB7IFRocm93LCBSZXR1cm5FYXJseSwgUmVqZWN0UHJvbWlzZSwg
QXNzZXJ0IH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+Ci1zdHJ1Y3QgQmluZGluZ0Nh
bGxlciB7Ci0gICAgdXNpbmcgQXR0cmlidXRlU2V0dGVyRnVuY3Rpb24gPSBib29sKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDbGFzcyYsIEpTQzo6SlNWYWx1ZSwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAg
dXNpbmcgQXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gPSBKU0M6OkpTVmFsdWUoSlNDOjpFeGVjU3Rh
dGUmLCBKU0NsYXNzJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAgdXNpbmcgT3BlcmF0aW9uQ2Fs
bGVyRnVuY3Rpb24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDbGFz
cyosIEpTQzo6VGhyb3dTY29wZSYpOwotICAgIHVzaW5nIFByb21pc2VPcGVyYXRpb25DYWxsZXJG
dW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwg
UmVmPERlZmVycmVkUHJvbWlzZT4mJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0KLSAgICBzdGF0aWMg
SlNDbGFzcyogY2FzdEZvckF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6RW5jb2RlZEpT
VmFsdWUpOwotICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yT3BlcmF0aW9uKEpTQzo6RXhlY1N0
YXRlJik7Ci0KLSAgICB0ZW1wbGF0ZTxQcm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gb3Bl
cmF0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlPgotICAgIHN0YXRpYyBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGNhbGxQcm9taXNlT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBjYXN0Rm9yT3BlcmF0aW9uKCpzdGF0ZSk7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdyAh
PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0ICYmIFVOTElLRUxZKCF0aGlzT2JqZWN0
KSkKLSAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IocHJv
bWlzZS5nZXQoKSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOwot
ICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygpKTsKLSAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJl
bmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNPYmplY3QuCi0gICAgICAgIHJldHVybiBvcGVyYXRpb25D
YWxsZXIoc3RhdGUsIHRoaXNPYmplY3QsIFdURk1vdmUocHJvbWlzZSksIHRocm93U2NvcGUpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNh
bGxlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJy
b3JCZWhhdmlvcjo6VGhyb3c+Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbE9w
ZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUp
Ci0gICAgewotICAgICAgICBBU1NFUlQoc3RhdGUpOwotICAgICAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAgICAgYXV0byogdGhpc09i
amVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsKLSAgICAgICAgaWYgKHNob3VsZFRocm93
ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5MSUtFTFkoIXRoaXNPYmpl
Y3QpKSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVo
YXZpb3I6OlRocm93KQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3Io
KnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9u
TmFtZSk7Ci0gICAgICAgICAgICAvLyBGb3IgY3VzdG9tIHByb21pc2UtcmV0dXJuaW5nIG9wZXJh
dGlvbnMKLSAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3Io
KnN0YXRlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9uTmFtZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QpOwotICAgICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIEpTQ2xhc3M6OmluZm8oKSk7Ci0gICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgdG8gdXNl
IHJlZmVyZW5jZXMgZm9yIHN0YXRlIGFuZCB0aGlzT2JqZWN0LgotICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uQ2FsbGVyKHN0YXRlLCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZTxBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiBzZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93Pgot
ICAgIHN0YXRpYyBib29sIHNldEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0
ZSk7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUt
PnZtKCkpOwotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3Rh
dGUsIHRoaXNWYWx1ZSk7Ci0gICAgICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCi0gICAg
ICAgICAgICByZXR1cm4gKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpU
aHJvdykgPyB0aHJvd1NldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6
OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKSA6IGZhbHNlOwotICAgICAgICByZXR1
cm4gc2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIEpTQzo6SlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSksIHRocm93U2NvcGUpOwotICAgIH0KK1dFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSXRl
cmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwogCi0gICAgdGVtcGxh
dGU8QXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
ciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KLSAgICBzdGF0
aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBhdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBK
U0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7Ci0gICAgICAgIGlmIChV
TkxJS0VMWSghdGhpc09iamVjdCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5j
bGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOwotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlKQotICAgICAgICAgICAgICAg
IHJldHVybiByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6
OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBK
U0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzVW5kZWZpbmVkKCkpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVj
dCwgdGhyb3dTY29wZSkpOwotICAgIH0KLX07Cit0ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9u
LCBpbnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlv
bkdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKIAotLy8gRXhjZXB0aW9uT3IgaGFuZGxpbmcuCi12b2lkIHByb3BhZ2F0ZUV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPHZvaWQ+
JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+
JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQo
SlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4
Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpOwogCiAvLyBJbmxpbmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0
ZSBkZWZpbml0aW9ucy4KIAotaW5saW5lIEpTQzo6U3RydWN0dXJlKiBET01Db25zdHJ1Y3Rvck9i
amVjdDo6Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi17Ci0gICAgcmV0dXJuIEpTQzo6
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJ
bmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotfQotCi1pbmxp
bmUgRE9NQ29uc3RydWN0b3JPYmplY3Q6OkRPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgOiBK
U0RPTU9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0KLQotaW5saW5lIFN0cmlu
ZyBET01Db25zdHJ1Y3Rvck9iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KikKLXsKLSAg
ICByZXR1cm4gQVNDSUlMaXRlcmFsKCJGdW5jdGlvbiIpOwotfQotCi1pbmxpbmUgRE9NQ29uc3Ry
dWN0b3JKU0J1aWx0aW5PYmplY3Q6OkRPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0g
ICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0K
LQotaW5saW5lIEpTQzo6SlNGdW5jdGlvbiogRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6
OmluaXRpYWxpemVGdW5jdGlvbigpCi17Ci0gICAgcmV0dXJuIG1faW5pdGlhbGl6ZUZ1bmN0aW9u
LmdldCgpOwotfQotCi1pbmxpbmUgdm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6
c2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mIHZtLCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0
aW9uKQotewotICAgIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLnNldCh2bSwgdGhpcywgJmZ1bmN0aW9u
KTsKLX0KLQotaW5saW5lIEpTRE9NR2xvYmFsT2JqZWN0KiBkZXByZWNhdGVkR2xvYmFsT2JqZWN0
Rm9yUHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIEZJWE1FOiBDYWxs
ZXJzIHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzaW5nIHRoZSBnbG9iYWwgb2JqZWN0Ci0g
ICAgLy8gZnJvbSB3aGljaCB0aGUgb2JqZWN0IGlzIGJlaW5nIGNyZWF0ZWQsIGluc3RlYWQgb2Yg
YXNzdW1pbmcgdGhlIGxleGljYWwgb25lLgotICAgIC8vIGUuZy4gc3ViZnJhbWUuZG9jdW1lbnQu
Ym9keSBzaG91bGQgdXNlIHRoZSBzdWJmcmFtZSdzIGdsb2JhbCBvYmplY3QsIG5vdCB0aGUgbGV4
aWNhbCBvbmUuCi0gICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBl
ckNsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVjdHVyZShKU0M6OlZNJiB2
bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBpZiAoSlNDOjpTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGdldENhY2hlZERPTVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIFdy
YXBwZXJDbGFzczo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAgICByZXR1
cm4gY2FjaGVET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVN0
cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVQcm90b3R5cGUo
dm0sICZnbG9iYWxPYmplY3QpKSwgV3JhcHBlckNsYXNzOjppbmZvKCkpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRl
ZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAvLyBGSVhNRTog
VGhpcyBmdW5jdGlvbiBpcyB3cm9uZy4gSXQgdXNlcyB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdCBm
b3IgY3JlYXRpbmcgdGhlIHByb3RvdHlwZSBzdHJ1Y3R1cmUuCi0gICAgcmV0dXJuIGdldERPTVN0
cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMtPnZtKCksICpkZXByZWNhdGVkR2xvYmFsT2JqZWN0
Rm9yUHJvdG90eXBlKGV4ZWMpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNz
PiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTQzo6anNDYXN0
PEpTQzo6SlNPYmplY3QqPihhc09iamVjdChnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPih2
bSwgKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSktPnN0b3Jl
ZFByb3RvdHlwZSgpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBK
U0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQotewotICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQ2xhc3M6OmNy
ZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNDbGFzcz4oZ2xvYmFsT2JqZWN0LnZtKCksIGdsb2JhbE9i
amVjdCksICZnbG9iYWxPYmplY3QpOwotICAgIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1l
bnRzKHN0YXRlLCAqb2JqZWN0LCBpbml0aWFsaXplRnVuY3Rpb24pOwotICAgIHJldHVybiBKU0M6
OkpTVmFsdWU6OmVuY29kZShvYmplY3QpOwotfQotCi1pbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3du
ZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVy
KikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
Kj4od29ybGQudm0oKS5tX3R5cGVkQXJyYXlDb250cm9sbGVyLmdldCgpKS0+d3JhcHBlck93bmVy
KCk7Ci19Ci0KLWlubGluZSB2b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9i
amVjdCkKLXsKLSAgICByZXR1cm4gZG9tT2JqZWN0OwotfQotCi1pbmxpbmUgSlNET01PYmplY3Qq
IGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCopIHsgcmV0dXJu
IG51bGxwdHI7IH0KLWlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0KiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqKSB7IHJl
dHVybiBmYWxzZTsgfQotaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdy
YXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCopIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLWlu
bGluZSBKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQm
IHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCkKLXsKLSAgICBpZiAoIXdvcmxkLmlz
Tm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBkb21PYmplY3Qt
PndyYXBwZXIoKTsKLX0KLQotaW5saW5lIEpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBidWZm
ZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICByZXR1cm4gYnVmZmVyLT5tX3dyYXBwZXIuZ2V0KCk7Ci19Ci0KLWlubGluZSBib29s
IHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3Jh
cHBhYmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVP
d25lciogd3JhcHBlck93bmVyKQotewotICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGRvbU9iamVjdC0+c2V0V3JhcHBlcih3cmFwcGVyLCB3cmFw
cGVyT3duZXIsICZ3b3JsZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIHNl
dElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1
ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hh
bmRsZU93bmVyKiB3cmFwcGVyT3duZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0LT5tX3dyYXBwZXIgPSBKU0M6Oldl
YWs8SlNDOjpKU0FycmF5QnVmZmVyPih3cmFwcGVyLCB3cmFwcGVyT3duZXIsICZ3b3JsZCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNE
T01PYmplY3QqIHdyYXBwZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0LT5jbGVhcldyYXBwZXIod3JhcHBlcik7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpT
Qzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlcikKLXsKLSAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB3ZWFrQ2xlYXIoZG9tT2JqZWN0LT5tX3dyYXBw
ZXIsIHdyYXBwZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBE
T01DbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKLXsKLSAgICBpZiAoYXV0byogd3Jh
cHBlciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsICZkb21PYmplY3QpKQotICAgICAg
ICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gd29ybGQubV93cmFwcGVycy5nZXQod3JhcHBl
cktleSgmZG9tT2JqZWN0KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBl
bmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29y
bGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCi17
Ci0gICAgSlNDOjpXZWFrSGFuZGxlT3duZXIqIG93bmVyID0gd3JhcHBlck93bmVyKHdvcmxkLCBk
b21PYmplY3QpOwotICAgIGlmIChzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmpl
Y3QsIHdyYXBwZXIsIG93bmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdlYWtBZGQod29ybGQu
bV93cmFwcGVycywgd3JhcHBlcktleShkb21PYmplY3QpLCBKU0M6OldlYWs8SlNDOjpKU09iamVj
dD4od3JhcHBlciwgb3duZXIsICZ3b3JsZCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01D
bGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCB1bmNhY2hlV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3Mq
IHdyYXBwZXIpCi17Ci0gICAgaWYgKGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9t
T2JqZWN0LCB3cmFwcGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdlYWtSZW1vdmUod29ybGQu
bV93cmFwcGVycywgd3JhcHBlcktleShkb21PYmplY3QpLCB3cmFwcGVyKTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBw
ZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAt
PiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1
ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBl
ckNsYXNzKj46OnR5cGUKLXsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSB0eXBlbmFtZSBKU0RP
TVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICBB
U1NFUlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3Qp
KTsKLSAgICBhdXRvKiBkb21PYmplY3RQdHIgPSBkb21PYmplY3QucHRyKCk7Ci0gICAgYXV0byog
d3JhcHBlciA9IFdyYXBwZXJDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xh
c3M+KGdsb2JhbE9iamVjdC0+dm0oKSwgKmdsb2JhbE9iamVjdCksIGdsb2JhbE9iamVjdCwgV1RG
TW92ZShkb21PYmplY3QpKTsKLSAgICBjYWNoZVdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgp
LCBkb21PYmplY3RQdHIsIHdyYXBwZXIpOwotICAgIHJldHVybiB3cmFwcGVyOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gaW5saW5lIGF1dG8gY3JlYXRlV3Jh
cHBlcihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VD4mJiBkb21PYmplY3Qp
IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2
YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3Jh
cHBlckNsYXNzKj46OnR5cGUKLXsKLSAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxET01DbGFzcz4o
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8RE9NQ2xhc3M+KFdURk1vdmUoZG9t
T2JqZWN0KSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6
SlNWYWx1ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKLXsKLSAgICBpZiAoYXV0byogd3JhcHBl
ciA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKQot
ICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCBSZWY8RE9NQ2xhc3M+KGRvbU9iamVjdCkpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUpCi17Ci0gICAgYXV0byB0aGlzVmFsdWUgPSBzdGF0ZS50aGlzVmFsdWUo
KTsKLSAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0NsYXNzKj4oc3Rh
dGUudm0oKSwgdGhpc1ZhbHVlKTsKLSAgICBBU1NFUlQoY2FzdGVkVGhpcyk7Ci0gICAgcmV0dXJu
ICpjYXN0ZWRUaGlzOwotfQotCiBpbmxpbmUgaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rYXkpCiB7CiAgICAg
ZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwpAQCAtNTc5LDMyICsxNTksNiBA
QCBpbmxpbmUgaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWCiAgICAgcmV0dXJuIEpT
Qzo6dG9JbnQzMihudW1iZXIpOwogfQogCi0vLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9i
amVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwg
c3BlYy4KLWlubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUm
IGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQmIGxlbmd0aCkKLXsKLSAgICBKU0M6
OlZNJiB2bSA9IGV4ZWMudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsK
LSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMs
IHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgSlNDOjpKU1Zh
bHVlIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoJmV4ZWMsIGV4ZWMucHJvcGVydHlOYW1lcygp
Lmxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0KLSAg
ICBpZiAobGVuZ3RoVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICB0aHJvd1Nl
cXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQotCi0gICAgbGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9VSW50MzIoJmV4ZWMpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotCi0gICAgcmV0dXJuIG9iamVjdDsK
LX0KLQogaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlciYgYnVmZmVyKQog
ewogICAgIGlmIChhdXRvIHJlc3VsdCA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53
b3JsZCgpLCBidWZmZXIpKQpAQCAtNjc2LDIxICsyMzAsNiBAQCBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqCiAgICAgcmV0dXJuIEpTQzo6U3ltYm9sOjpjcmVhdGUoZXhl
Yy0+dm0oKSwgcHJpdmF0ZU5hbWUudWlkKCkpOwogfQogCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVj
dCgmc3RhdGUsIHZhbHVlLCBmYWxzZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwgdG9KUygmc3RhdGUsICZnbG9iYWxP
YmplY3QsIHZhbHVlKSwgZmFsc2UpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVy
YXRvckVuZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUl0ZXJh
dG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwgSlNDOjpqc1VuZGVmaW5lZCgpLCB0cnVlKTsKLX0KLQog
aW5saW5lIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5
QnVmZmVyVmlldyhKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8q
IHdyYXBwZXIgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0M6OkpTQXJyYXlCdWZmZXJWaWV3Kj4odm0s
IHZhbHVlKTsKQEAgLTcyNywzMCArMjY2LDYgQEAgaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFy
cmF5PiB0b1Vuc2hhcgogaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJl
ZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0sIHZh
bHVlKTsgfQogaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZsb2F0
NjRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRv
VW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVlKTsg
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1Q+IGlubGluZSBWZWN0b3I8UmVm
PFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotewotICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkp
IHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAg
ICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIFZlY3RvcjxSZWY8VD4+IHJlc3VsdDsKLSAgICBm
b3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmIChqc1ZhbHVl
LmluaGVyaXRzKHZtLCBKU1Q6OmluZm8oKSkpIHsKLSAgICAgICAgICAgIGF1dG8qIG9iamVjdCA9
IEpTVDo6dG9XcmFwcGVkKHZtLCBqc1ZhbHVlKTsKLSAgICAgICAgICAgIEFTU0VSVChvYmplY3Qp
OwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqb2JqZWN0KTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcigqc3RhdGUsIHNjb3BlKTsKLSAg
ICB9KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBpbmxpbmUgU3RyaW5nIHByb3BlcnR5TmFt
ZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBBU1NFUlQo
IXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKTsKQEAgLTc2Nyw1OSArMjgyLDQgQEAgdGVtcGxhdGU8
SlNDOjpOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdAogICAgIHJldHVybiBKU0M6OkpTVmFsdWU6
OmVuY29kZShKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCksIGxlbmd0aCwgcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSwgbmF0aXZl
RnVuY3Rpb24pKTsKIH0KIAotQUxXQVlTX0lOTElORSB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0
aW9uJiYgZXhjZXB0aW9uKQotewotICAgIGlmICh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKQotICAg
ICAgICByZXR1cm47Ci0gICAgcHJvcGFnYXRlRXhjZXB0aW9uU2xvd1BhdGgoc3RhdGUsIHRocm93
U2NvcGUsIFdURk1vdmUoZXhjZXB0aW9uKSk7Ci19Ci0KLWlubGluZSB2b2lkIHByb3BhZ2F0ZUV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSwgRXhjZXB0aW9uT3I8dm9pZD4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUu
aGFzRXhjZXB0aW9uKCkpKQotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93
U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwg
RXhjZXB0aW9uT3I8VD4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhj
ZXB0aW9uKCkpKSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29w
ZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0
dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9u
T3I8VD4mJiB2YWx1ZSkKLXsKLSAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkp
KSB7Ci0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUu
cmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRvSlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNl
UmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBCaW5k
aW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
VCYgbm9kZSkKLXsKLSAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsICZu
b2RlKSA/ICZub2RlIDogbnVsbHB0cjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBUKiBub2RlKQotewotICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShz
dGF0ZSwgbm9kZSkgPyBub2RlIDogbnVsbHB0cjsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIEV4Y2VwdGlvbk9yPFQqPiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JO
b2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uT3I8VCo+JiYgdmFsdWUpCi17Ci0g
ICAgaWYgKHZhbHVlLmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gdmFsdWUucmVsZWFz
ZUV4Y2VwdGlvbigpOwotICAgIHJldHVybiBjaGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgdmFs
dWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb25PcjxUJj4mJiB2YWx1ZSkKLXsKLSAgICBp
ZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5yZWxlYXNlRXhj
ZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGNoZWNrU2VjdXJpdHlGb3JOb2RlKHN0YXRlLCB2YWx1ZS5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ0NhbGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ0NhbGxlci5oCShy
ZXZpc2lvbiAyMTEzNTMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5oOjIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Z0NhbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODI1IEBACisvKgorICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLTIwMDYsIDIwMDgtMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcg
PHNhbUB3ZWJraXQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgRXJpY3Nzb24gQUIuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIE1pY2hhZWwgUHJ1ZXR0
IDxtaWNoYWVsQDY4ay5vcmc+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgorI2luY2x1ZGUgIkV4Y2Vw
dGlvbkNvZGUuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgorI2luY2x1ZGUgIkpTRE9NR2xv
YmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNEeW5h
bWljRG93bmNhc3QuaCIKKyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKKyNpbmNsdWRlICJT
Y3JpcHRXcmFwcGFibGVJbmxpbmVzLmgiCisjaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyLmgiCisjaW5jbHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVz
Lmg+CisjaW5jbHVkZSA8aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFw
L1dlYWsuaD4KKyNpbmNsdWRlIDxoZWFwL1dlYWtJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9BdXhpbGlhcnlCYXJyaWVySW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvSlNBcnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ2Vs
bElubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+
CisjaW5jbHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvU3RydWN0dXJlSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGlu
ZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9Xcml0ZUJhcnJpZXIuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0
Zi9HZXRQdHIuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKKy8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgZmlsZSBhIGxvdCBlYXNp
ZXIgdG8gcmVhZCBieSBwdXR0aW5nIGFsbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXQgdGhlIHRv
cCwKKy8vIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucyBiZWxvdywgZXZlbiBmb3IgdGVtcGxhdGUg
YW5kIGlubGluZSBmdW5jdGlvbnMuCisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgSlNGdW5jdGlv
bjsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRTY3JpcHQ7CitjbGFz
cyBEZWZlcnJlZFByb21pc2U7CitjbGFzcyBET01XaW5kb3c7CitjbGFzcyBGcmFtZTsKK2NsYXNz
IFVSTDsKK2NsYXNzIE5vZGU7CisKK3N0cnVjdCBFeGNlcHRpb25EZXRhaWxzIHsKKyAgICBTdHJp
bmcgbWVzc2FnZTsKKyAgICBpbnQgbGluZU51bWJlciB7IDAgfTsKKyAgICBpbnQgY29sdW1uTnVt
YmVyIHsgMCB9OworICAgIFN0cmluZyBzb3VyY2VVUkw7Cit9OworCisvLyBCYXNlIGNsYXNzIGZv
ciBhbGwgY29uc3RydWN0b3Igb2JqZWN0cyBpbiB0aGUgSlNDIGJpbmRpbmdzLgorY2xhc3MgRE9N
Q29uc3RydWN0b3JPYmplY3QgOiBwdWJsaWMgSlNET01PYmplY3QgeworcHVibGljOgorICAgIHR5
cGVkZWYgSlNET01PYmplY3QgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3Rh
bmNlIHwgSlNDOjpJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91
bGRDYWxsR2V0Q2FsbERhdGE7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworCitw
cm90ZWN0ZWQ6CisgICAgRE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYpOworCisgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNP
YmplY3QqKTsKKyAgICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBK
U0M6OkNhbGxEYXRhJik7Cit9OworCitjbGFzcyBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVj
dCA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBE
T01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgRE9NQ29uc3RydWN0
b3JKU0J1aWx0aW5PYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwor
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNp
dG9yJik7CisKKyAgICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOworICAg
IHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsK
KworcHJpdmF0ZToKKyAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1faW5p
dGlhbGl6ZUZ1bmN0aW9uOworfTsKKworRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coSlNDOjpF
eGVjU3RhdGUqKTsKK0RPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7
CitET01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CisKK1dFQkNPUkVf
RVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0
cmlidXRlTmFtZSk7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIGF0dHJpYnV0ZU5hbWUpOworCit2b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogYXR0cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK1dF
QkNPUkVfRVhQT1JUIGJvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBh
dHRyaWJ1dGVOYW1lKTsKKwordm9pZCB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93RE9NU3ludGF4RXJy
b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsgLy8gTm90IHRoZSBzYW1lIGFz
IGEgSmF2YVNjcmlwdCBzeW50YXggZXJyb3IuCit2b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dJbnZhbGlkU3RhdGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpOworV0VCQ09SRV9FWFBPUlQgdm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9y
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93Tm90U3VwcG9y
dGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBt
ZXNzYWdlKTsKK3ZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQg
dGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYp
Owordm9pZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJik7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1
bWVudE11c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVu
c2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hh
ciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0
IGNoYXIqIGV4cGVjdGVkVmFsdWVzKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVu
dE11c3RCZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1
bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNo
YXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKK1dF
QkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgs
IGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7
CitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJU
eXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBt
ZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0
ZWRUeXBlKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSk7CisKK1N0cmluZyBtYWtlR2V0dGVyVHlw
ZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRy
aWJ1dGVOYW1lKTsKK1N0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CisKK1dFQkNPUkVfRVhQ
T1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBhdHRyaWJ1dGVOYW1lKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUg
dGhyb3dUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKKworV0VC
Q09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5
cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1
ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7CitXRUJDT1JF
X0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IG9wZXJhdGlvbk5hbWUpOworCitXRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogZ2V0Q2Fj
aGVkRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpDbGFzc0luZm8q
KTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RP
TUdsb2JhbE9iamVjdCYsIEpTQzo6U3RydWN0dXJlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZ2V0RE9N
U3RydWN0dXJlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5h
bWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVy
ZShKU0M6OkV4ZWNTdGF0ZSopOwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6
OkpTT2JqZWN0KiBnZXRET01Qcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
KTsKKwordm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRp
bihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBK
U0RPTUdsb2JhbE9iamVjdCYpOworCitKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVy
KERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKK3ZvaWQqIHdyYXBwZXJLZXko
SlNDOjpBcnJheUJ1ZmZlciopOworCitKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQmLCB2b2lkKik7CitKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVk
V3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqKTsKK0pTQzo6SlNBcnJh
eUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFy
cmF5QnVmZmVyKik7CisKK2Jvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29y
bGQmLCB2b2lkKiwgSlNET01PYmplY3QqLCBKU0M6OldlYWtIYW5kbGVPd25lciopOworYm9vbCBz
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSos
IEpTRE9NT2JqZWN0KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVy
KTsKK2Jvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFy
cmF5QnVmZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVP
d25lciogd3JhcHBlck93bmVyKTsKKworYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9N
V3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0Kik7Citib29sIGNsZWFySW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVj
dCogd3JhcHBlcik7Citib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29y
bGQmLCBKU0M6OkFycmF5QnVmZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNs
YXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29y
bGQmIHdvcmxkLCBSZWY8RE9NQ2xhc3M+JiBvYmplY3QpIHsgcmV0dXJuIGdldENhY2hlZFdyYXBw
ZXIod29ybGQsIG9iamVjdC5nZXQoKSk7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0
eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IHZvaWQgY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYs
IERPTUNsYXNzKiwgV3JhcHBlckNsYXNzKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywg
dHlwZW5hbWUgV3JhcHBlckNsYXNzPiB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYsIERPTUNsYXNzKiwgV3JhcHBlckNsYXNzKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFz
cywgdHlwZW5hbWUgVD4gYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVm
PFQ+JiYpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxET01DbGFzcywg
VD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+
OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBl
bmFtZSBUPiBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJikg
LT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZh
bHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFw
cGVyQ2xhc3MqPjo6dHlwZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNW
YWx1ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBET01DbGFzcyYp
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0NsYXNzJiBjYXN0VGhpc1ZhbHVlKEpT
Qzo6RXhlY1N0YXRlJik7CisKK3ZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3Ry
aW5nJik7CisKK2NvbnN0IEpTQzo6SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRh
KEpTQzo6Vk0mLCBjb25zdCBKU0M6Okhhc2hUYWJsZSYgc3RhdGljVGFibGUpOworCitTdHJpbmcg
cmV0cmlldmVFcnJvck1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlZNJiwgSlNDOjpKU1Zh
bHVlIGV4Y2VwdGlvbiwgSlNDOjpDYXRjaFNjb3BlJik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJl
cG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENh
Y2hlZFNjcmlwdCogPSBudWxscHRyKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0
aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVs
bHB0ciwgRXhjZXB0aW9uRGV0YWlscyogPSBudWxscHRyKTsKK3ZvaWQgcmVwb3J0Q3VycmVudEV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOworCitKU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0
aW9uKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uJiYpOworSlNDOjpKU1ZhbHVlIGNyZWF0ZURP
TUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUsIGNvbnN0IFN0cmluZyYp
OworCisvLyBDb252ZXJ0IGEgRE9NIGltcGxlbWVudGF0aW9uIGV4Y2VwdGlvbiBpbnRvIGEgSmF2
YVNjcmlwdCBleGNlcHRpb24gaW4gdGhlIGV4ZWN1dGlvbiBzdGF0ZS4KK3ZvaWQgcHJvcGFnYXRl
RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYp
OworV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKKworSlNDOjpKU1ZhbHVl
IGpzU3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgVVJMJik7IC8vIGVtcHR5IGlmIHRoZSBV
UkwgaXMgbnVsbAorCitKU0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxs
CitKU0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IFVSTCYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIFVSTCBpcyBudWxsCisKKy8vIFNlZSBKYXZhU2Ny
aXB0Q29yZSBmb3IgZXhwbGFuYXRpb246IFNob3VsZCBiZSB1c2VkIGZvciBhbnkgc3RyaW5nIHRo
YXQgaXMgYWxyZWFkeSBvd25lZCBieSBhbm90aGVyCisvLyBvYmplY3QsIHRvIGxldCB0aGUgZW5n
aW5lIGtub3cgdGhhdCBjb2xsZWN0aW5nIHRoZSBKU1N0cmluZyB3cmFwcGVyIGlzIHVubGlrZWx5
IHRvIHNhdmUgbWVtb3J5LgorSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKKworU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5n
KEpTQzo6UHJvcGVydHlOYW1lKTsKKworQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWlj
U3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKKworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkZW50
aWZpZXJUb0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
KTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvVVNW
U3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CitXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7CisKK2ludDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUsIEpTQzo6RXhl
Y1N0YXRlKiwgYm9vbCYgb2theSk7CisKKy8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbnZl
cnQgdmFsdWVzIHRvIGludGVnZXJzIGFzIHBlciB0aGUgV2ViSURMIHNwZWNpZmljYXRpb24uCisv
LyBUaGUgY29udmVyc2lvbiBmYWlscyBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0
byBhIG51bWJlciBvciwgaWYgRW5mb3JjZVJhbmdlIGlzIHNwZWNpZmllZCwKKy8vIHRoZSB2YWx1
ZSBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlciB0eXBlLgor
CitXRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OEVuZm9yY2VS
YW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQx
Nl90IHRvSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
V0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyRW5mb3Jj
ZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVp
bnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKK1dFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NEVu
Zm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK1dFQkNPUkVfRVhQ
T1JUIGludDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitX
RUJDT1JFX0VYUE9SVCB1aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZDbGFtcChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkNs
YW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDMy
X3QgdG9JbnQzMkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVf
RVhQT1JUIHVpbnQzMl90IHRvVUludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOworV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRDbGFtcChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK1dFQkNPUkVfRVhQT1JUIGludDhfdCB0
b0ludDgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWlu
dDhfdCB0b1VJbnQ4KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQ
T1JUIGludDE2X3QgdG9JbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJD
T1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOworCitKU0M6OkpTVmFsdWUganNEYXRlKEpTQzo6RXhlY1N0YXRl
KiwgZG91YmxlIHZhbHVlKTsKKworLy8gTmFOIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0
ZWQgdG8gYSBkYXRlLgorZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlKTsKKworLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1
ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCitKU0M6OkpT
T2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIHVuc2ln
bmVkJiBsZW5ndGgpOworCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciYpOworSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcm
KTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBKU0M6OkFycmF5QnVmZmVyKik7CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyopOwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIFJlZjxUPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWZQdHI8VD4mJik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgVmVjdG9yPFQ+Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mKTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJik7CisKK0pT
Qzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVj
dCYsIEpTQzo6SlNWYWx1ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9K
U0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUJik7
CitKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJik7CisKK1JlZlB0
cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhK
U0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJs
eVNoYXJlZEludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6Oklu
dDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOworUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXko
SlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3Np
Ymx5U2hhcmVkVWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6
OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJs
eVNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6
VWludDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0
MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkZsb2F0NjRBcnJh
eT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsK
KworUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3
KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hh
cmVkSW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50MTZB
cnJheT4gdG9VbnNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQ
dHI8SlNDOjpJbnQzMkFycmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRv
VW5zaGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0
cjxKU0M6OlVpbnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5
KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vu
c2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6
RmxvYXQ2NEFycmF5PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1R5cGU+IFZlY3RvcjxSZWY8
VD4+IHRvUmVmTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VC
Q09SRV9FWFBPUlQgYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7CisKK2VudW0gU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9ydFNl
Y3VyaXR5RXJyb3IsIExvZ1NlY3VyaXR5RXJyb3IsIFRocm93U2VjdXJpdHlFcnJvciB9OworbmFt
ZXNwYWNlIEJpbmRpbmdTZWN1cml0eSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hl
Y2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gVCogY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUKik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JO
b2RlKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uT3I8VCo+JiYpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IEV4Y2VwdGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNT
dGF0ZSYsIEV4Y2VwdGlvbk9yPFQmPiYmKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9E
T01XaW5kb3coSlNDOjpFeGVjU3RhdGUqLCBET01XaW5kb3cmLCBTZWN1cml0eVJlcG9ydGluZ09w
dGlvbiA9IExvZ1NlY3VyaXR5RXJyb3IpOworICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RP
TVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSYsIERPTVdpbmRvdyYsIFN0cmluZyYgbWVzc2FnZSk7Cisg
ICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSos
IFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7CisgICAgYm9vbCBz
aG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUmLCBGcmFtZSYsIFN0cmluZyYg
bWVzc2FnZSk7CisgICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0
ZSYsIE5vZGUqKTsKK307CisKK3ZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSos
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisKK1N0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhK
U0M6OlByb3BlcnR5TmFtZSk7CitBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJp
bmcoSlNDOjpQcm9wZXJ0eU5hbWUpOworCit0ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uLCBp
bnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdl
dHRlcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lKTsKKworCitlbnVtIGNsYXNzIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHsgVGhyb3csIFJl
dHVybkVhcmx5LCBSZWplY3RQcm9taXNlLCBBc3NlcnQgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
SlNDbGFzcz4KK3N0cnVjdCBCaW5kaW5nQ2FsbGVyIHsKKyAgICB1c2luZyBBdHRyaWJ1dGVTZXR0
ZXJGdW5jdGlvbiA9IGJvb2woSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpKU1ZhbHVl
LCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICB1c2luZyBBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiA9
IEpTQzo6SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OlRocm93U2NvcGUm
KTsKKyAgICB1c2luZyBPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFs
dWUoSlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNp
bmcgUHJvbWlzZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRo
cm93U2NvcGUmKTsKKworICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yQXR0cmlidXRlKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7CisgICAgc3RhdGljIEpTQ2xhc3MqIGNh
c3RGb3JPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUmKTsKKworICAgIHRlbXBsYXRlPFByb21pc2VP
cGVyYXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21p
c2U+CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbFByb21pc2VPcGVyYXRpb24o
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNv
bnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhdGUpOwor
ICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgp
KTsKKyAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsK
KyAgICAgICAgaWYgKHNob3VsZFRocm93ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3Nl
cnQgJiYgVU5MSUtFTFkoIXRoaXNPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdFBy
b21pc2VXaXRoVGhpc1R5cGVFcnJvcihwcm9taXNlLmdldCgpLCBKU0NsYXNzOjppbmZvKCktPmNs
YXNzTmFtZSwgb3BlcmF0aW9uTmFtZSk7CisgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKKyAg
ICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZv
KCkpOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdl
bmVyYXRlZCBjb2RlIHRvIHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4K
KyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhpc09iamVjdCwgV1RGTW92
ZShwcm9taXNlKSwgdGhyb3dTY29wZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8T3BlcmF0aW9u
Q2FsbGVyRnVuY3Rpb24gb3BlcmF0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBz
aG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0aWMg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxsT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
Y29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7
CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZt
KCkpOworICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3RhdGUp
OworICAgICAgICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFz
c2VydCAmJiBVTkxJS0VMWSghdGhpc09iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRU
aHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6Omlu
Zm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25OYW1lKTsKKyAgICAgICAgICAgIC8vIEZvciBjdXN0
b20gcHJvbWlzZS1yZXR1cm5pbmcgb3BlcmF0aW9ucworICAgICAgICAgICAgcmV0dXJuIHJlamVj
dFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NO
YW1lLCBvcGVyYXRpb25OYW1lKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQodGhpc09iamVj
dCk7CisgICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFz
czo6aW5mbygpKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmlu
ZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNP
YmplY3QuCisgICAgICAgIHJldHVybiBvcGVyYXRpb25DYWxsZXIoc3RhdGUsIHRoaXNPYmplY3Qs
IHRocm93U2NvcGUpOworICAgIH0KKworICAgIHRlbXBsYXRlPEF0dHJpYnV0ZVNldHRlckZ1bmN0
aW9uIHNldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+CisgICAgc3RhdGljIGJvb2wgc2V0QXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8qIHRoaXNPYmpl
Y3QgPSBjYXN0Rm9yQXR0cmlidXRlKCpzdGF0ZSwgdGhpc1ZhbHVlKTsKKyAgICAgICAgaWYgKFVO
TElLRUxZKCF0aGlzT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiAoc2hvdWxkVGhyb3cgPT0g
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93KSA/IHRocm93U2V0dGVyVHlwZUVycm9yKCpz
dGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5h
bWUpIDogZmFsc2U7CisgICAgICAgIHJldHVybiBzZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwg
SlNDOjpKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdGhyb3dTY29wZSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8QXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJv
dz4KKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBhdHRyaWJ1dGUoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgY2hhciogYXR0
cmlidXRlTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91
bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFz
czo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOworICAgICAgICAgICAgaWYgKHNo
b3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlKQorICAg
ICAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcigqc3Rh
dGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAg
ICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzVW5kZWZpbmVkKCkpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIoKnN0YXRl
LCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSkpOworICAgIH0KK307CisKKy8vIEV4Y2VwdGlvbk9y
IGhhbmRsaW5nLgordm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBFeGNlcHRpb25Pcjx2b2lkPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBK
U0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9i
YWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKTsKKwor
Ly8gSW5saW5lIGZ1bmN0aW9ucyBhbmQgdGVtcGxhdGUgZGVmaW5pdGlvbnMuCisKK2lubGluZSBK
U0M6OlN0cnVjdHVyZSogRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShKU0M6
OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUg
cHJvdG90eXBlKQoreworICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKworaW5saW5lIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpE
T01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIDogSlNET01PYmplY3Qoc3RydWN0dXJlLCBnbG9i
YWxPYmplY3QpCit7Cit9CisKK2lubGluZSBTdHJpbmcgRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNs
YXNzTmFtZShjb25zdCBKU09iamVjdCopCit7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRnVu
Y3Rpb24iKTsKK30KKworaW5saW5lIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0OjpET01D
b25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3Qo
c3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9CisKK2lubGluZSBKU0M6OkpTRnVuY3Rpb24q
IERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojppbml0aWFsaXplRnVuY3Rpb24oKQorewor
ICAgIHJldHVybiBtX2luaXRpYWxpemVGdW5jdGlvbi5nZXQoKTsKK30KKworaW5saW5lIHZvaWQg
RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6
OlZNJiB2bSwgSlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBtX2luaXRpYWxpemVG
dW5jdGlvbi5zZXQodm0sIHRoaXMsICZmdW5jdGlvbik7Cit9CisKK2lubGluZSBKU0RPTUdsb2Jh
bE9iamVjdCogZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICAvLyBGSVhNRTogQ2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIHNob3Vs
ZCBiZSB1c2luZyB0aGUgZ2xvYmFsIG9iamVjdAorICAgIC8vIGZyb20gd2hpY2ggdGhlIG9iamVj
dCBpcyBiZWluZyBjcmVhdGVkLCBpbnN0ZWFkIG9mIGFzc3VtaW5nIHRoZSBsZXhpY2FsIG9uZS4K
KyAgICAvLyBlLmcuIHN1YmZyYW1lLmRvY3VtZW50LmJvZHkgc2hvdWxkIHVzZSB0aGUgc3ViZnJh
bWUncyBnbG9iYWwgb2JqZWN0LCBub3QgdGhlIGxleGljYWwgb25lLgorICAgIHJldHVybiBKU0M6
OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3RydWN0
dXJlKiBnZXRET01TdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCit7CisgICAgaWYgKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYWNo
ZWRET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmluZm8oKSkpCisgICAg
ICAgIHJldHVybiBzdHJ1Y3R1cmU7CisgICAgcmV0dXJuIGNhY2hlRE9NU3RydWN0dXJlKGdsb2Jh
bE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3Qs
IFdyYXBwZXJDbGFzczo6Y3JlYXRlUHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSksIFdyYXBw
ZXJDbGFzczo6aW5mbygpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBp
bmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgd3JvbmcuIEl0
IHVzZXMgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QgZm9yIGNyZWF0aW5nIHRoZSBwcm90b3R5cGUg
c3RydWN0dXJlLgorICAgIHJldHVybiBnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihleGVj
LT52bSgpLCAqZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdl
dERPTVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQoreworICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oYXNPYmplY3Qo
Z2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFzcz4odm0sICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KGdsb2JhbE9iamVjdCkpLT5zdG9yZWRQcm90b3R5cGUoKSkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVK
U0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxp
emVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBKU0M6
OkpTT2JqZWN0KiBvYmplY3QgPSBKU0NsYXNzOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpTQ2xh
c3M+KGdsb2JhbE9iamVjdC52bSgpLCBnbG9iYWxPYmplY3QpLCAmZ2xvYmFsT2JqZWN0KTsKKyAg
ICBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhzdGF0ZSwgKm9iamVjdCwgaW5pdGlh
bGl6ZUZ1bmN0aW9uKTsKKyAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsK
K30KKworaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBl
cldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciopCit7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcio+KHdvcmxkLnZtKCkubV90eXBlZEFycmF5
Q29udHJvbGxlci5nZXQoKSktPndyYXBwZXJPd25lcigpOworfQorCitpbmxpbmUgdm9pZCogd3Jh
cHBlcktleShKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QpCit7CisgICAgcmV0dXJuIGRvbU9i
amVjdDsKK30KKworaW5saW5lIEpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYsIHZvaWQqKSB7IHJldHVybiBudWxscHRyOyB9CitpbmxpbmUgYm9vbCBz
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVj
dCosIEpTQzo6V2Vha0hhbmRsZU93bmVyKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29s
IGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01P
YmplY3QqKSB7IHJldHVybiBmYWxzZTsgfQorCitpbmxpbmUgSlNET01PYmplY3QqIGdldElubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBk
b21PYmplY3QpCit7CisgICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICByZXR1cm4gZG9tT2JqZWN0LT53cmFwcGVyKCk7Cit9CisKK2lubGluZSBK
U0M6OkpTQXJyYXlCdWZmZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghd29ybGQuaXNO
b3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGJ1ZmZlci0+bV93
cmFwcGVyLmdldCgpOworfQorCitpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTU9i
amVjdCogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcikKK3sKKyAg
ICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb21P
YmplY3QtPnNldFdyYXBwZXIod3JhcHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQpOworICAgIHJl
dHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdy
YXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpKU0Fy
cmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKQor
eworICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGRvbU9iamVjdC0+bV93cmFwcGVyID0gSlNDOjpXZWFrPEpTQzo6SlNBcnJheUJ1ZmZlcj4od3Jh
cHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxp
bmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwg
U2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyKQoreworICAg
IGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvbU9i
amVjdC0+Y2xlYXJXcmFwcGVyKHdyYXBwZXIpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxp
bmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwg
SlNDOjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIp
Cit7CisgICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgd2Vha0NsZWFyKGRvbU9iamVjdC0+bV93cmFwcGVyLCB3cmFwcGVyKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2Jq
ZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzJiBk
b21PYmplY3QpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNoZWRXcmFw
cGVyKHdvcmxkLCAmZG9tT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0
dXJuIHdvcmxkLm1fd3JhcHBlcnMuZ2V0KHdyYXBwZXJLZXkoJmRvbU9iamVjdCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUg
dm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9i
amVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQoreworICAgIEpTQzo6V2Vha0hhbmRsZU93bmVy
KiBvd25lciA9IHdyYXBwZXJPd25lcih3b3JsZCwgZG9tT2JqZWN0KTsKKyAgICBpZiAoc2V0SW5s
aW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyLCBvd25lcikpCisgICAg
ICAgIHJldHVybjsKKyAgICB3ZWFrQWRkKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9t
T2JqZWN0KSwgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+KHdyYXBwZXIsIG93bmVyLCAmd29ybGQp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFz
cz4gaW5saW5lIHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9N
Q2xhc3MqIGRvbU9iamVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQoreworICAgIGlmIChjbGVh
cklubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCisgICAgICAg
IHJldHVybjsKKyAgICB3ZWFrUmVtb3ZlKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9t
T2JqZWN0KSwgd3JhcHBlcik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBl
bmFtZSBUPiBpbmxpbmUgYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIFJlZjxUPiYmIGRvbU9iamVjdCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNv
bnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCit7CisgICAgdXNp
bmcgV3JhcHBlckNsYXNzID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERP
TUNsYXNzPjo6V3JhcHBlckNsYXNzOworCisgICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVyKGds
b2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0KSk7CisgICAgYXV0byogZG9tT2JqZWN0UHRy
ID0gZG9tT2JqZWN0LnB0cigpOworICAgIGF1dG8qIHdyYXBwZXIgPSBXcmFwcGVyQ2xhc3M6OmNy
ZWF0ZShnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihnbG9iYWxPYmplY3QtPnZtKCksICpn
bG9iYWxPYmplY3QpLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoZG9tT2JqZWN0KSk7CisgICAgY2Fj
aGVXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0UHRyLCB3cmFwcGVyKTsK
KyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5
cGVuYW1lIFQ+IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
Zjwhc3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBl
ckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCit7CisgICAg
cmV0dXJuIGNyZWF0ZVdyYXBwZXI8RE9NQ2xhc3M+KGdsb2JhbE9iamVjdCwgc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PERPTUNsYXNzPihXVEZNb3ZlKGRvbU9iamVjdCkpKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERPTUNsYXNzJiBkb21P
YmplY3QpCit7CisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2Jh
bE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7Cisg
ICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgUmVmPERPTUNs
YXNzPihkb21PYmplY3QpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5l
IEpTQ2xhc3MmIGNhc3RUaGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQoreworICAgIGF1
dG8gdGhpc1ZhbHVlID0gc3RhdGUudGhpc1ZhbHVlKCk7CisgICAgYXV0byBjYXN0ZWRUaGlzID0g
anNEeW5hbWljRG93bmNhc3Q8SlNDbGFzcyo+KHN0YXRlLnZtKCksIHRoaXNWYWx1ZSk7CisgICAg
QVNTRVJUKGNhc3RlZFRoaXMpOworICAgIHJldHVybiAqY2FzdGVkVGhpczsKK30KKworaW5saW5l
IGludDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBib29sJiBva2F5KQoreworICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051
bWJlcihleGVjKTsKKyAgICBva2F5ID0gc3RkOjppc2Zpbml0ZShudW1iZXIpOworICAgIHJldHVy
biBKU0M6OnRvSW50MzIobnVtYmVyKTsKK30KKworLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3Nl
ZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2Vi
SURMIHNwZWMuCitpbmxpbmUgSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0
YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpCit7CisgICAg
SlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0
KCk7CisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihl
eGVjLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEpTQzo6
SlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwor
CisgICAgaWYgKGxlbmd0aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgdGhy
b3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIGxlbmd0aCA9IGxlbmd0aFZhbHVlLnRvVUludDMyKCZleGVjKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKworICAgIHJldHVybiBvYmpl
Y3Q7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXImIGJ1ZmZl
cikKK3sKKyAgICBpZiAoYXV0byByZXN1bHQgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVj
dC0+d29ybGQoKSwgYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIC8vIFRo
ZSBKU0FycmF5QnVmZmVyOjpjcmVhdGUgZnVuY3Rpb24gd2lsbCByZWdpc3RlciB0aGUgd3JhcHBl
ciBpbiBmaW5pc2hDcmVhdGlvbi4KKyAgICByZXR1cm4gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVh
dGUoc3RhdGUtPnZtKCksIGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYnVmZmVy
LnNoYXJpbmdNb2RlKCkpLCAmYnVmZmVyKTsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkFycmF5QnVmZmVyVmlldyYgdmlldykKK3sKKyAgICByZXR1cm4gdmlldy53cmFwKHN0
YXRlLCBnbG9iYWxPYmplY3QpOworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFy
cmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVsbCgpOworICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICpidWZm
ZXIpOworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3
KiB2aWV3KQoreworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7
CisgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKnZpZXcpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIHB0cikKK3sK
KyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+JiYgcHRy
KQoreworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0
b3I8VD4mIHZlY3RvcikKK3sKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkpT
QXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iu
c2l6ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCB2ZWN0b3JbaV0pKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpK
U1ZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mIHZl
Y3RvcikKK3sKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkpTQXJyYXkqIGFy
cmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXJyYXkt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3Jb
aV0uZ2V0KCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1Zh
bHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBK
U0M6OlByaXZhdGVOYW1lJiBwcml2YXRlTmFtZSkKK3sKKyAgICByZXR1cm4gSlNDOjpTeW1ib2w6
OmNyZWF0ZShleGVjLT52bSgpLCBwcml2YXRlTmFtZS51aWQoKSk7Cit9CisKK2lubGluZSBKU0M6
OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9y
UmVzdWx0T2JqZWN0KCZzdGF0ZSwgdmFsdWUsIGZhbHNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB0b0pTKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUpLCBmYWxzZSk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFs
dWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKK3sKKyAgICByZXR1cm4g
Y3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCBKU0M6OmpzVW5kZWZpbmVkKCksIHRy
dWUpOworfQorCitpbmxpbmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5
U2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7
CisgICAgYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0PEpTQzo6SlNBcnJheUJ1ZmZl
clZpZXcqPih2bSwgdmFsdWUpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgcmV0dXJuIHdyYXBwZXItPnBvc3NpYmx5U2hhcmVkSW1wbCgpOworfQorCitp
bmxpbmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJW
aWV3KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byByZXN1bHQg
PSB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KHZtLCB2YWx1ZSk7CisgICAgaWYgKCFy
ZXN1bHQgfHwgcmVzdWx0LT5pc1NoYXJlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bv
c3NpYmx5U2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsg
cmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDhBZGFw
dG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3Nz
aWJseVNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFw
dG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3Nz
aWJseVNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFw
dG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3Nz
aWJseVNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFw
dG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+
IHRvUG9zc2libHlTaGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpVaW50OENsYW1wZWRBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpT
Qzo6VWludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiB2bSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVU
eXBlZFZpZXc8SlNDOjpVaW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRy
PEpTQzo6VWludDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRp
dmVUeXBlZFZpZXc8SlNDOjpVaW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVm
UHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJl
ZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Citpbmxp
bmUgUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJs
eVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9
CisKK2lubGluZSBSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlND
OjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0
aXZlVHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQ
dHI8SlNDOjpJbnQxNkFycmF5PiB0b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQz
MkFycmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFk
YXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Vu
c2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNoYXJl
ZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0
b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNo
YXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJu
IEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQz
MkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9V
bnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0K
K2lubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXko
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVk
TmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGlu
ZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpW
TSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZl
VHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgSlNUPiBpbmxpbmUgVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRp
dmVBcnJheShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIHRo
cm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICBWZWN0b3I8UmVmPFQ+PiByZXN1bHQ7CisgICAgZm9yRWFjaEluSXRlcmFi
bGUoJnN0YXRlLCB2YWx1ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgICAgICBpZiAoanNWYWx1ZS5pbmhlcml0cyh2bSwg
SlNUOjppbmZvKCkpKSB7CisgICAgICAgICAgICBhdXRvKiBvYmplY3QgPSBKU1Q6OnRvV3JhcHBl
ZCh2bSwganNWYWx1ZSk7CisgICAgICAgICAgICBBU1NFUlQob2JqZWN0KTsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoKm9iamVjdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhy
b3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoKnN0YXRlLCBzY29wZSk7CisgICAgfSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworaW5saW5lIFN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6
OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUu
aXNTeW1ib2woKSk7CisgICAgcmV0dXJuIHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFt
ZS51aWQoKSA6IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7Cit9CisKK2lubGluZSBBdG9taWNT
dHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQoreworICAgIHJldHVybiBBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lLnVpZCgpID8g
cHJvcGVydHlOYW1lLnVpZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Cit9CisKK3Rl
bXBsYXRlPEpTQzo6TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpT
Qzo6RW5jb2RlZEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5j
dGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVu
Z3RoLCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpLCBuYXRpdmVGdW5jdGlvbikpOworfQorCitB
TFdBWVNfSU5MSU5FIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCit7
CisgICAgaWYgKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBw
cm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChzdGF0ZSwgdGhyb3dTY29wZSwgV1RGTW92ZShleGNl
cHRpb24pKTsKK30KKworaW5saW5lIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25Pcjx2b2lk
PiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpCisg
ICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFz
ZUV4Y2VwdGlvbigpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZh
bHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAg
ICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhj
ZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICByZXR1cm4gdG9KUygm
c3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVk
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
SlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQorewor
ICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFn
YXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkp
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRl
ZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tT
ZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBUJiBub2RlKQoreworICAgIHJl
dHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgJm5vZGUpID8gJm5vZGUgOiBudWxs
cHRyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1NlY3VyaXR5
OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQqIG5vZGUpCit7
CisgICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBub2RlKSA/IG5vZGUg
OiBudWxscHRyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRXhjZXB0aW9uT3I8
VCo+IEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBFeGNlcHRpb25PcjxUKj4mJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaGFzRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAg
cmV0dXJuIGNoZWNrU2VjdXJpdHlGb3JOb2RlKHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFs
dWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBFeGNlcHRpb25PcjxUKj4g
QmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEV4Y2VwdGlvbk9yPFQmPiYmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICByZXR1
cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
Q2FsbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nQ2FsbGVyLmgJKHJldmlzaW9uIDIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZ0NhbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywzMDAgKzIz
LDEwIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCi0jaW5j
bHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKLSNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKLSNp
bmNsdWRlICJKU0R5bmFtaWNEb3duY2FzdC5oIgotI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5o
IgotI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCIKLSNpbmNsdWRlICJXZWJDb3Jl
VHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlIDxjc3RkZGVmPgotI2luY2x1ZGUgPGhl
YXAvSGVhcElubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgot
I2luY2x1ZGUgPGhlYXAvV2Vhay5oPgotI2luY2x1ZGUgPGhlYXAvV2Vha0lubGluZXMuaD4KLSNp
bmNsdWRlIDxydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVm
ZmVyLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3RJbmxp
bmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9Mb29rdXAuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9U
eXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KLSNp
bmNsdWRlIDxydW50aW1lL1dyaXRlQmFycmllci5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
Ci0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBm
aWxlIGEgbG90IGVhc2llciB0byByZWFkIGJ5IHB1dHRpbmcgYWxsIGZ1bmN0aW9uIGRlY2xhcmF0
aW9ucyBhdCB0aGUgdG9wLAotLy8gYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zIGJlbG93LCBldmVu
IGZvciB0ZW1wbGF0ZSBhbmQgaW5saW5lIGZ1bmN0aW9ucy4KLQotbmFtZXNwYWNlIEpTQyB7Ci1j
bGFzcyBKU0Z1bmN0aW9uOwotfQorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDYWNoZWRTY3JpcHQ7Ci1jbGFzcyBEZWZl
cnJlZFByb21pc2U7Ci1jbGFzcyBET01XaW5kb3c7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIFVSTDsK
LWNsYXNzIE5vZGU7Ci0KLXN0cnVjdCBFeGNlcHRpb25EZXRhaWxzIHsKLSAgICBTdHJpbmcgbWVz
c2FnZTsKLSAgICBpbnQgbGluZU51bWJlciB7IDAgfTsKLSAgICBpbnQgY29sdW1uTnVtYmVyIHsg
MCB9OwotICAgIFN0cmluZyBzb3VyY2VVUkw7Ci19OwotCi0vLyBCYXNlIGNsYXNzIGZvciBhbGwg
Y29uc3RydWN0b3Igb2JqZWN0cyBpbiB0aGUgSlNDIGJpbmRpbmdzLgotY2xhc3MgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgOiBwdWJsaWMgSlNET01PYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYg
SlNET01PYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwg
SlNDOjpJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91bGRDYWxs
R2V0Q2FsbERhdGE7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwotCi1wcm90ZWN0
ZWQ6Ci0gICAgRE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2Jh
bE9iamVjdCYpOwotCi0gICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3Qq
KTsKLSAgICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBKU0M6OkNh
bGxEYXRhJik7Ci19OwotCi1jbGFzcyBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCA6IHB1
YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25z
dHJ1Y3Rvck9iamVjdCBCYXNlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgRE9NQ29uc3RydWN0b3JKU0J1
aWx0aW5PYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7
Ci0KLSAgICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOwotICAgIHZvaWQg
c2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKLQotcHJp
dmF0ZToKLSAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6
ZUZ1bmN0aW9uOwotfTsKLQotRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coSlNDOjpFeGVjU3Rh
dGUqKTsKLURPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci1ET01X
aW5kb3cmIGZpcnN0RE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci0KLVdFQkNPUkVfRVhQT1JU
IEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRl
TmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUpOwotCi12b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogYXR0cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKLVdFQkNPUkVf
RVhQT1JUIGJvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKTsKLQotdm9pZCB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93RE9NU3ludGF4RXJyb3IoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsgLy8gTm90IHRoZSBzYW1lIGFzIGEgSmF2
YVNjcmlwdCBzeW50YXggZXJyb3IuCi12b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLXZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwot
V0VCQ09SRV9FWFBPUlQgdm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93Tm90U3VwcG9ydGVkRXJy
b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdl
KTsKLXZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgdGhyb3dT
ZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9p
ZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
Jik7Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11
c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVk
IGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVu
Y3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIq
IGV4cGVjdGVkVmFsdWVzKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RC
ZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25l
ZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKLVdFQkNPUkVf
RVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0
IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1XRUJD
T1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJy
b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZW1iZXJO
YW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBl
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSk7Ci0KLVN0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9y
TWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKTsKLVN0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBh
dHRyaWJ1dGVOYW1lKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dU
aGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKLQotV0VCQ09SRV9F
WFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWpl
Y3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7Ci1XRUJDT1JFX0VYUE9S
VCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJh
dGlvbk5hbWUpOwotCi1XRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9N
U3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKLVdF
QkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2Jh
bE9iamVjdCYsIEpTQzo6U3RydWN0dXJlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3RydWN0
dXJlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgV3Jh
cHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6
OkV4ZWNTdGF0ZSopOwotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTT2Jq
ZWN0KiBnZXRET01Qcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLQot
dm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYpOwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBKU0NsYXNzPiBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUds
b2JhbE9iamVjdCYpOwotCi1KU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdy
YXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKLXZvaWQqIHdyYXBwZXJLZXkoSlNDOjpB
cnJheUJ1ZmZlciopOwotCi1KU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01X
cmFwcGVyV29ybGQmLCB2b2lkKik7Ci1KU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqKTsKLUpTQzo6SlNBcnJheUJ1ZmZl
ciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVm
ZmVyKik7Ci0KLWJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2
b2lkKiwgSlNET01PYmplY3QqLCBKU0M6OldlYWtIYW5kbGVPd25lciopOwotYm9vbCBzZXRJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9N
T2JqZWN0KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKTsKLWJv
b2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVm
ZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciog
d3JhcHBlck93bmVyKTsKLQotYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0Kik7Ci1ib29sIGNsZWFySW5saW5lQ2FjaGVkV3Jh
cHBlcihET01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3Jh
cHBlcik7Ci1ib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBK
U0M6OkFycmF5QnVmZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9N
V3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBp
bmxpbmUgSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBSZWY8RE9NQ2xhc3M+JiBvYmplY3QpIHsgcmV0dXJuIGdldENhY2hlZFdyYXBwZXIod29y
bGQsIG9iamVjdC5nZXQoKSk7IH0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFt
ZSBXcmFwcGVyQ2xhc3M+IHZvaWQgY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNs
YXNzKiwgV3JhcHBlckNsYXNzKik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5h
bWUgV3JhcHBlckNsYXNzPiB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERP
TUNsYXNzKiwgV3JhcHBlckNsYXNzKik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlw
ZW5hbWUgVD4gYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYp
IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZh
bHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFw
cGVyQ2xhc3MqPjo6dHlwZTsKLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBU
PiBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0
eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xh
c3MqPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNWYWx1ZSB3
cmFwKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBET01DbGFzcyYpOwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0NsYXNzJiBjYXN0VGhpc1ZhbHVlKEpTQzo6RXhl
Y1N0YXRlJik7Ci0KLXZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJik7
Ci0KLWNvbnN0IEpTQzo6SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKEpTQzo6
Vk0mLCBjb25zdCBKU0M6Okhhc2hUYWJsZSYgc3RhdGljVGFibGUpOwotCi1TdHJpbmcgcmV0cmll
dmVFcnJvck1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlIGV4
Y2VwdGlvbiwgSlNDOjpDYXRjaFNjb3BlJik7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNj
cmlwdCogPSBudWxscHRyKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0ciwg
RXhjZXB0aW9uRGV0YWlscyogPSBudWxscHRyKTsKLXZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSopOwotCi1KU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uJiYpOwotSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUsIGNvbnN0IFN0cmluZyYpOwotCi0v
LyBDb252ZXJ0IGEgRE9NIGltcGxlbWVudGF0aW9uIGV4Y2VwdGlvbiBpbnRvIGEgSmF2YVNjcmlw
dCBleGNlcHRpb24gaW4gdGhlIGV4ZWN1dGlvbiBzdGF0ZS4KLXZvaWQgcHJvcGFnYXRlRXhjZXB0
aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOwotV0VC
Q09SRV9FWFBPUlQgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKLQotSlNDOjpKU1ZhbHVlIGpzU3Ry
aW5nKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgVVJMJik7IC8vIGVtcHR5IGlmIHRoZSBVUkwgaXMg
bnVsbAotCi1KU0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IFN0cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCi1KU0M6
OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFVSTCYp
OyAvLyB1bmRlZmluZWQgaWYgdGhlIFVSTCBpcyBudWxsCi0KLS8vIFNlZSBKYXZhU2NyaXB0Q29y
ZSBmb3IgZXhwbGFuYXRpb246IFNob3VsZCBiZSB1c2VkIGZvciBhbnkgc3RyaW5nIHRoYXQgaXMg
YWxyZWFkeSBvd25lZCBieSBhbm90aGVyCi0vLyBvYmplY3QsIHRvIGxldCB0aGUgZW5naW5lIGtu
b3cgdGhhdCBjb2xsZWN0aW5nIHRoZSBKU1N0cmluZyB3cmFwcGVyIGlzIHVubGlrZWx5IHRvIHNh
dmUgbWVtb3J5LgotSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBTdHJpbmcmKTsKLQotU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6
UHJvcGVydHlOYW1lKTsKLQotQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5n
KEpTQzo6UHJvcGVydHlOYW1lKTsKLQotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJU
b0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLVdF
QkNPUkVfRVhQT1JUIFN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5n
KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci1XRUJDT1JFX0VYUE9S
VCBTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
Ci0KLWludDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUsIEpTQzo6RXhlY1N0YXRl
KiwgYm9vbCYgb2theSk7Ci0KLS8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbnZlcnQgdmFs
dWVzIHRvIGludGVnZXJzIGFzIHBlciB0aGUgV2ViSURMIHNwZWNpZmljYXRpb24uCi0vLyBUaGUg
Y29udmVyc2lvbiBmYWlscyBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIG51
bWJlciBvciwgaWYgRW5mb3JjZVJhbmdlIGlzIHNwZWNpZmllZCwKLS8vIHRoZSB2YWx1ZSBpcyBv
dXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlciB0eXBlLgotCi1XRUJD
T1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRv
SW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09S
RV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQzMl90
IHRvVUludDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdF
QkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VS
YW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIGlu
dDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JF
X0VYUE9SVCB1aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkNsYW1wKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDMyX3QgdG9J
bnQzMkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JU
IHVpbnQzMl90IHRvVUludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
V0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRDbGFtcChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDgo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0
b1VJbnQ4KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGlu
dDE2X3QgdG9JbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VY
UE9SVCB1aW50MTZfdCB0b1VJbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1X
RUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotCi1KU0M6OkpTVmFsdWUganNEYXRlKEpTQzo6RXhlY1N0YXRlKiwgZG91
YmxlIHZhbHVlKTsKLQotLy8gTmFOIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8g
YSBkYXRlLgotZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
KTsKLQotLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0
eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCi1KU0M6OkpTT2JqZWN0
KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkJiBs
ZW5ndGgpOwotCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciYpOwotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcmKTsKLUpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6
OkFycmF5QnVmZmVyKik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyopOwotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCosIFJlZjxUPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWZQdHI8VD4mJik7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xv
YmFsT2JqZWN0KiwgY29uc3QgVmVjdG9yPFQ+Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3Qg
VmVjdG9yPFJlZlB0cjxUPj4mKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJik7Ci0KLUpTQzo6SlNW
YWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpT
Qzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJh
dG9yKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUJik7Ci1KU0M6
OkpTVmFsdWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJik7Ci0KLVJlZlB0cjxKU0M6
OkFycmF5QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJl
ZEludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDE2QXJy
YXk+IHRvUG9zc2libHlTaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwot
UmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXkoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hh
cmVkVWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQ4
Q2xhbXBlZEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJl
ZFVpbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDMy
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKLVJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJBcnJh
eShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9Q
b3NzaWJseVNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLQotUmVm
UHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVkSW50
OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50MTZBcnJheT4g
dG9VbnNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlND
OjpJbnQzMkFycmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKLVJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0m
LCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5zaGFy
ZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6
OlVpbnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVk
RmxvYXQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQ2
NEFycmF5PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1R5cGU+IFZlY3RvcjxSZWY8VD4+IHRv
UmVmTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9F
WFBPUlQgYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci0KLWVudW0gU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9ydFNlY3VyaXR5
RXJyb3IsIExvZ1NlY3VyaXR5RXJyb3IsIFRocm93U2VjdXJpdHlFcnJvciB9OwotbmFtZXNwYWNl
IEJpbmRpbmdTZWN1cml0eSB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hlY2tTZWN1
cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gVCogY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUKik7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpT
Qzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uT3I8VCo+JiYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IEV4Y2VwdGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYs
IEV4Y2VwdGlvbk9yPFQmPiYmKTsKLSAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5k
b3coSlNDOjpFeGVjU3RhdGUqLCBET01XaW5kb3cmLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9
IExvZ1NlY3VyaXR5RXJyb3IpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRv
dyhKU0M6OkV4ZWNTdGF0ZSYsIERPTVdpbmRvdyYsIFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgYm9v
bCBzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSosIFNlY3Vy
aXR5UmVwb3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7Ci0gICAgYm9vbCBzaG91bGRB
bGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUmLCBGcmFtZSYsIFN0cmluZyYgbWVzc2Fn
ZSk7Ci0gICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIE5v
ZGUqKTsKLX07Ci0KLXZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSk7Ci0KLVN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1BdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlND
OjpQcm9wZXJ0eU5hbWUpOwotCi10ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVu
Z3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
LQotCiBlbnVtIGNsYXNzIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHsgVGhyb3csIFJldHVybkVh
cmx5LCBSZWplY3RQcm9taXNlLCBBc3NlcnQgfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFz
cz4KQEAgLTM4OSw0MzcgKzk5LDQgQEAgc3RydWN0IEJpbmRpbmdDYWxsZXIgewogICAgIH0KIH07
CiAKLS8vIEV4Y2VwdGlvbk9yIGhhbmRsaW5nLgotdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25Pcjx2b2lkPiYmKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNE
T01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhl
Y1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25P
cjxUPiYmIHZhbHVlKTsKLQotLy8gSW5saW5lIGZ1bmN0aW9ucyBhbmQgdGVtcGxhdGUgZGVmaW5p
dGlvbnMuCi0KLWlubGluZSBKU0M6OlN0cnVjdHVyZSogRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNy
ZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQotewotICAgIHJldHVybiBKU0M6OlN0cnVjdHVy
ZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6
Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLX0KLQotaW5saW5lIERPTUNv
bnN0cnVjdG9yT2JqZWN0OjpET01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogSlNET01PYmpl
Y3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLWlubGluZSBTdHJpbmcgRE9NQ29u
c3RydWN0b3JPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCopCi17Ci0gICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgiRnVuY3Rpb24iKTsKLX0KLQotaW5saW5lIERPTUNvbnN0cnVjdG9ySlNC
dWlsdGluT2JqZWN0OjpET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVy
ZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogRE9N
Q29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLWlubGlu
ZSBKU0M6OkpTRnVuY3Rpb24qIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojppbml0aWFs
aXplRnVuY3Rpb24oKQotewotICAgIHJldHVybiBtX2luaXRpYWxpemVGdW5jdGlvbi5nZXQoKTsK
LX0KLQotaW5saW5lIHZvaWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnNldEluaXRp
YWxpemVGdW5jdGlvbihKU0M6OlZNJiB2bSwgSlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKLXsK
LSAgICBtX2luaXRpYWxpemVGdW5jdGlvbi5zZXQodm0sIHRoaXMsICZmdW5jdGlvbik7Ci19Ci0K
LWlubGluZSBKU0RPTUdsb2JhbE9iamVjdCogZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3Rv
dHlwZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAvLyBGSVhNRTogQ2FsbGVycyB0byB0
aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2luZyB0aGUgZ2xvYmFsIG9iamVjdAotICAgIC8vIGZy
b20gd2hpY2ggdGhlIG9iamVjdCBpcyBiZWluZyBjcmVhdGVkLCBpbnN0ZWFkIG9mIGFzc3VtaW5n
IHRoZSBsZXhpY2FsIG9uZS4KLSAgICAvLyBlLmcuIHN1YmZyYW1lLmRvY3VtZW50LmJvZHkgc2hv
dWxkIHVzZSB0aGUgc3ViZnJhbWUncyBnbG9iYWwgb2JqZWN0LCBub3QgdGhlIGxleGljYWwgb25l
LgotICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4g
aW5saW5lIEpTQzo6U3RydWN0dXJlKiBnZXRET01TdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgaWYgKEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xh
c3M6OmluZm8oKSkpCi0gICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7Ci0gICAgcmV0dXJuIGNhY2hl
RE9NU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sICZnbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFzczo6Y3JlYXRlUHJvdG90eXBlKHZtLCAmZ2xv
YmFsT2JqZWN0KSksIFdyYXBwZXJDbGFzczo6aW5mbygpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01T
dHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgZnVu
Y3Rpb24gaXMgd3JvbmcuIEl0IHVzZXMgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QgZm9yIGNyZWF0
aW5nIHRoZSBwcm90b3R5cGUgc3RydWN0dXJlLgotICAgIHJldHVybiBnZXRET01TdHJ1Y3R1cmU8
V3JhcHBlckNsYXNzPihleGVjLT52bSgpLCAqZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3Rv
dHlwZShleGVjKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5l
IEpTQzo6SlNPYmplY3QqIGdldERPTVByb3RvdHlwZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQotewotICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpT
T2JqZWN0Kj4oYXNPYmplY3QoZ2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFzcz4odm0sICpKU0M6
OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCkpLT5zdG9yZWRQcm90b3R5
cGUoKSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
RnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKLXsKLSAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBKU0NsYXNzOjpjcmVhdGUoZ2V0
RE9NU3RydWN0dXJlPEpTQ2xhc3M+KGdsb2JhbE9iamVjdC52bSgpLCBnbG9iYWxPYmplY3QpLCAm
Z2xvYmFsT2JqZWN0KTsKLSAgICBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhzdGF0
ZSwgKm9iamVjdCwgaW5pdGlhbGl6ZUZ1bmN0aW9uKTsKLSAgICByZXR1cm4gSlNDOjpKU1ZhbHVl
OjplbmNvZGUob2JqZWN0KTsKLX0KLQotaW5saW5lIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFw
cGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciopCi17Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlcio+KHdvcmxk
LnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci5nZXQoKSktPndyYXBwZXJPd25lcigpOwotfQot
Ci1pbmxpbmUgdm9pZCogd3JhcHBlcktleShKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QpCi17
Ci0gICAgcmV0dXJuIGRvbU9iamVjdDsKLX0KLQotaW5saW5lIEpTRE9NT2JqZWN0KiBnZXRJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqKSB7IHJldHVybiBudWxscHRy
OyB9Ci1pbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYs
IHZvaWQqLCBKU0RPTU9iamVjdCosIEpTQzo6V2Vha0hhbmRsZU93bmVyKikgeyByZXR1cm4gZmFs
c2U7IH0KLWlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29y
bGQmLCB2b2lkKiwgSlNET01PYmplY3QqKSB7IHJldHVybiBmYWxzZTsgfQotCi1pbmxpbmUgSlNE
T01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwg
U2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gZG9tT2JqZWN0LT53cmFwcGVy
KCk7Ci19Ci0KLWlubGluZSBKU0M6OkpTQXJyYXlCdWZmZXIqIGdldElubGluZUNhY2hlZFdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogYnVmZmVyKQotewot
ICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIGJ1ZmZlci0+bV93cmFwcGVyLmdldCgpOwotfQotCi1pbmxpbmUgYm9vbCBzZXRJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSog
ZG9tT2JqZWN0LCBKU0RPTU9iamVjdCogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdy
YXBwZXJPd25lcikKLXsKLSAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBkb21PYmplY3QtPnNldFdyYXBwZXIod3JhcHBlciwgd3JhcHBlck93bmVy
LCAmd29ybGQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBzZXRJbmxpbmVD
YWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRv
bU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25l
ciogd3JhcHBlck93bmVyKQotewotICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGRvbU9iamVjdC0+bV93cmFwcGVyID0gSlNDOjpXZWFrPEpTQzo6
SlNBcnJheUJ1ZmZlcj4od3JhcHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0
KiB3cmFwcGVyKQotewotICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGRvbU9iamVjdC0+Y2xlYXJXcmFwcGVyKHdyYXBwZXIpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1pbmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJy
YXlCdWZmZXIqIHdyYXBwZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgd2Vha0NsZWFyKGRvbU9iamVjdC0+bV93cmFwcGVyLCB3cmFw
cGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+
IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYg
d29ybGQsIERPTUNsYXNzJiBkb21PYmplY3QpCi17Ci0gICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBn
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCAmZG9tT2JqZWN0KSkKLSAgICAgICAgcmV0dXJu
IHdyYXBwZXI7Ci0gICAgcmV0dXJuIHdvcmxkLm1fd3JhcHBlcnMuZ2V0KHdyYXBwZXJLZXkoJmRv
bU9iamVjdCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3Jh
cHBlckNsYXNzPiBpbmxpbmUgdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3Js
ZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQotewotICAgIEpT
Qzo6V2Vha0hhbmRsZU93bmVyKiBvd25lciA9IHdyYXBwZXJPd25lcih3b3JsZCwgZG9tT2JqZWN0
KTsKLSAgICBpZiAoc2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFw
cGVyLCBvd25lcikpCi0gICAgICAgIHJldHVybjsKLSAgICB3ZWFrQWRkKHdvcmxkLm1fd3JhcHBl
cnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwgSlNDOjpXZWFrPEpTQzo6SlNPYmplY3Q+KHdyYXBw
ZXIsIG93bmVyLCAmd29ybGQpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5
cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgV3JhcHBlckNsYXNzKiB3cmFwcGVy
KQotewotICAgIGlmIChjbGVhcklubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwg
d3JhcHBlcikpCi0gICAgICAgIHJldHVybjsKLSAgICB3ZWFrUmVtb3ZlKHdvcmxkLm1fd3JhcHBl
cnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwgd3JhcHBlcik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBpbmxpbmUgYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIGRvbU9iamVjdCkgLT4gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVu
YW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+
Ojp0eXBlCi17Ci0gICAgdXNpbmcgV3JhcHBlckNsYXNzID0gdHlwZW5hbWUgSlNET01XcmFwcGVy
Q29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzOwotCi0gICAgQVNTRVJUKCFn
ZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0KSk7Ci0gICAg
YXV0byogZG9tT2JqZWN0UHRyID0gZG9tT2JqZWN0LnB0cigpOwotICAgIGF1dG8qIHdyYXBwZXIg
PSBXcmFwcGVyQ2xhc3M6OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihnbG9i
YWxPYmplY3QtPnZtKCksICpnbG9iYWxPYmplY3QpLCBnbG9iYWxPYmplY3QsIFdURk1vdmUoZG9t
T2JqZWN0KSk7Ci0gICAgY2FjaGVXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2Jq
ZWN0UHRyLCB3cmFwcGVyKTsKLSAgICByZXR1cm4gd3JhcHBlcjsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5
cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFz
cyo+Ojp0eXBlCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8RE9NQ2xhc3M+KGdsb2JhbE9i
amVjdCwgc3RhdGljX3JlZmVyZW5jZV9jYXN0PERPTUNsYXNzPihXVEZNb3ZlKGRvbU9iamVjdCkp
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTVmFsdWUg
d3JhcChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIERPTUNsYXNzJiBkb21PYmplY3QpCi17Ci0gICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRD
YWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0KSkKLSAgICAgICAg
cmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIHRvSlNOZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgUmVmPERPTUNsYXNzPihkb21PYmplY3QpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgSlNDbGFzcz4gaW5saW5lIEpTQ2xhc3MmIGNhc3RUaGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlKQotewotICAgIGF1dG8gdGhpc1ZhbHVlID0gc3RhdGUudGhpc1ZhbHVlKCk7Ci0gICAg
YXV0byBjYXN0ZWRUaGlzID0ganNEeW5hbWljRG93bmNhc3Q8SlNDbGFzcyo+KHN0YXRlLnZtKCks
IHRoaXNWYWx1ZSk7Ci0gICAgQVNTRVJUKGNhc3RlZFRoaXMpOwotICAgIHJldHVybiAqY2FzdGVk
VGhpczsKLX0KLQotaW5saW5lIGludDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUg
dmFsdWUsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBib29sJiBva2F5KQotewotICAgIGRvdWJsZSBu
dW1iZXIgPSB2YWx1ZS50b051bWJlcihleGVjKTsKLSAgICBva2F5ID0gc3RkOjppc2Zpbml0ZShu
dW1iZXIpOwotICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVyKTsKLX0KLQotLy8gVmFsaWRh
dGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9u
IDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCi1pbmxpbmUgSlNDOjpKU09iamVjdCogdG9KU1Nl
cXVlbmNlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIHVuc2lnbmVk
JiBsZW5ndGgpCi17Ci0gICAgSlNDOjpWTSYgdm0gPSBleGVjLnZtKCk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgSlNDOjpKU09iamVjdCogb2JqZWN0
ID0gdmFsdWUuZ2V0T2JqZWN0KCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgdGhyb3dT
ZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLQotICAgIEpTQzo6SlNWYWx1ZSBsZW5ndGhWYWx1ZSA9IG9iamVjdC0+Z2V0KCZleGVj
LCBleGVjLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOwotCi0gICAgaWYgKGxlbmd0aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29wZSk7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGxlbmd0aCA9IGxlbmd0aFZhbHVlLnRv
VUludDMyKCZleGVjKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsK
LQotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6
QXJyYXlCdWZmZXImIGJ1ZmZlcikKLXsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBnZXRDYWNoZWRX
cmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLQotICAgIC8vIFRoZSBKU0FycmF5QnVmZmVyOjpjcmVhdGUgZnVuY3Rpb24gd2lsbCBy
ZWdpc3RlciB0aGUgd3JhcHBlciBpbiBmaW5pc2hDcmVhdGlvbi4KLSAgICByZXR1cm4gSlNDOjpK
U0FycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUtPnZtKCksIGdsb2JhbE9iamVjdC0+YXJyYXlCdWZm
ZXJTdHJ1Y3R1cmUoYnVmZmVyLnNoYXJpbmdNb2RlKCkpLCAmYnVmZmVyKTsKLX0KLQotaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyVmlldyYgdmlldykKLXsKLSAgICBy
ZXR1cm4gdmlldy53cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QpOwotfQotCi1pbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIp
Ci0gICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwotICAgIHJldHVybiB0b0pTKHN0YXRlLCBn
bG9iYWxPYmplY3QsICpidWZmZXIpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6QXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotewotICAgIGlmICghdmlldykKLSAgICAgICAgcmV0
dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwg
KnZpZXcpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IFJlZjxUPiYmIHB0cikKLXsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0
ci5nZXQoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUmVmUHRyPFQ+JiYgcHRyKQotewotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgcHRyLmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBWZWN0b3I8VD4mIHZlY3RvcikKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVj
LCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0pKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVmVj
dG9yPFJlZlB0cjxUPj4mIHZlY3RvcikKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRy
LCB2ZWN0b3Iuc2l6ZSgpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpT
VmFsdWUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCB2ZWN0b3JbaV0uZ2V0KCkpKTsKLSAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0K
LWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9i
YWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJiBwcml2YXRlTmFtZSkKLXsKLSAgICBy
ZXR1cm4gSlNDOjpTeW1ib2w6OmNyZWF0ZShleGVjLT52bSgpLCBwcml2YXRlTmFtZS51aWQoKSk7
Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0
dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwgdmFsdWUsIGZhbHNlKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3Io
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBj
b25zdCBUJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3Qo
JnN0YXRlLCB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUpLCBmYWxzZSk7Ci19Ci0K
LWlubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCBKU0M6
OmpzVW5kZWZpbmVkKCksIHRydWUpOwotfQotCi1pbmxpbmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZm
ZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0
PEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqPih2bSwgdmFsdWUpOwotICAgIGlmICghd3JhcHBlcikK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHdyYXBwZXItPnBvc3NpYmx5U2hh
cmVkSW1wbCgpOwotfQotCi1pbmxpbmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vu
c2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17
Ci0gICAgYXV0byByZXN1bHQgPSB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KHZtLCB2
YWx1ZSk7Ci0gICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT5pc1NoYXJlZCgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgUmVmUHRyPEpT
Qzo6SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVk
VmlldzxKU0M6OkludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6
SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRW
aWV3PEpTQzo6SW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6
SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRW
aWV3PEpTQzo6SW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6
VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRW
aWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6
VWludDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6
OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFy
ZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENsYW1wZWRBZGFwdG9yPih2bSwgdmFsdWUpOyB9
Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZB
cnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9z
c2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MTZBZGFwdG9yPih2bSwgdmFsdWUp
OyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50
MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRv
UG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MzJBZGFwdG9yPih2bSwgdmFs
dWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVk
RmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpT
Qzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2
bSwgdmFsdWUpOyB9Ci1pbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5
U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFw
dG9yPih2bSwgdmFsdWUpOyB9Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvVW5z
aGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
SlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1
ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Vuc2hhcmVkSW50MTZBcnJh
eShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFy
ZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGlu
ZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBl
ZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlND
OjpVaW50OEFycmF5PiB0b1Vuc2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpV
aW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50OENsYW1w
ZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpV
aW50MTZBcnJheT4gdG9VbnNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVp
bnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJh
eT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUp
IHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0
b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvVW5z
aGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1
cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZt
LCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRG
bG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1
ZSk7IH0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSlNUPiBpbmxpbmUgVmVjdG9y
PFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICBKU0M6OlZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKCF2YWx1ZS5pc09iamVj
dCgpKSB7Ci0gICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlKTsKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8UmVmPFQ+PiByZXN1bHQ7Ci0g
ICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCB2YWx1ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZt
LCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlKSB7Ci0gICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgICAgICBpZiAoanNW
YWx1ZS5pbmhlcml0cyh2bSwgSlNUOjppbmZvKCkpKSB7Ci0gICAgICAgICAgICBhdXRvKiBvYmpl
Y3QgPSBKU1Q6OnRvV3JhcHBlZCh2bSwganNWYWx1ZSk7Ci0gICAgICAgICAgICBBU1NFUlQob2Jq
ZWN0KTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKm9iamVjdCk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoKnN0YXRlLCBzY29wZSk7
Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW5saW5lIFN0cmluZyBwcm9wZXJ0
eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgQVNT
RVJUKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSk7Ci0gICAgcmV0dXJuIHByb3BlcnR5TmFtZS51
aWQoKSA/IHByb3BlcnR5TmFtZS51aWQoKSA6IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCk7Ci19
Ci0KLWlubGluZSBBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIHJldHVybiBBdG9taWNTdHJpbmcocHJv
cGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVpZCgpIDogcHJvcGVydHlOYW1lLnB1Ymxp
Y05hbWUoKSk7Ci19Ci0KLXRlbXBsYXRlPEpTQzo6TmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rp
b24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0
aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6
OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6
ZW5jb2RlKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpLCBuYXRpdmVG
dW5jdGlvbikpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRp
b24mJiBleGNlcHRpb24pCi17Ci0gICAgaWYgKHRocm93U2NvcGUuZXhjZXB0aW9uKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChzdGF0ZSwgdGhyb3dT
Y29wZSwgV1RGTW92ZShleGNlcHRpb24pKTsKLX0KLQotaW5saW5lIHZvaWQgcHJvcGFnYXRlRXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3Bl
LCBFeGNlcHRpb25Pcjx2b2lkPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5o
YXNFeGNlcHRpb24oKSkpCi0gICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dT
Y29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBF
eGNlcHRpb25PcjxUPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNl
cHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3Bl
LCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0K
LSAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1
cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25P
cjxUPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkp
IHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5y
ZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLSAgICByZXR1
cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlLnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIEJpbmRp
bmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBU
JiBub2RlKQotewotICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwgJm5v
ZGUpID8gJm5vZGUgOiBudWxscHRyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
VCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIFQqIG5vZGUpCi17Ci0gICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0
YXRlLCBub2RlKSA/IG5vZGUgOiBudWxscHRyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5v
ZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb25PcjxUKj4mJiB2YWx1ZSkKLXsKLSAg
ICBpZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5yZWxlYXNl
RXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGNoZWNrU2VjdXJpdHlGb3JOb2RlKHN0YXRlLCB2YWx1
ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQmPiYmIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVhc2VFeGNl
cHRpb24oKTsKLSAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIHZhbHVlLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nU2VjdXJpdHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5
LmNwcAkocmV2aXNpb24gMjExMzUzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuY3BwOjIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQmluZGluZ1NlY3VyaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMzQgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMSwgMjAxMywgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWlu
aWcgPHNhbUB3ZWJraXQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0
dCA8bWljaGFlbEA2OGsub3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorCisjaW5jbHVkZSAi
Q2FjaGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKKyNpbmNsdWRlICJET01Db25z
dHJ1Y3RvcldpdGhEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNs
dWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWFk
ZXJzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uSW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNl
RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01Q
cm9taXNlLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKKyNpbmNsdWRlICJKU0V4
Y2VwdGlvbkJhc2UuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgPGJ5
dGVjb2RlL0NvZGVCbG9jay5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2su
aD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+CisjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JIYW5kbGluZ1Njb3BlLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9FcnJvckluc3RhbmNlLmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KKyNpbmNs
dWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTRnVu
Y3Rpb24uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVEFUSUNfQVNTRVJU
X0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9NQ29uc3RydWN0b3JPYmplY3QpOworU1RBVElD
X0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yV2l0aERvY3Vt
ZW50KTsKKwordm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIHByb3Bl
cnR5TmFtZSkKK3sKKyAgICBjb21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFt
ZSk7Cit9CisKK0pTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgcykKK3sKKyAgICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOworICAgIHJldHVybiBqc093bmVkU3RyaW5nKGV4ZWMsIHMpOworfQorCitKU1ZhbHVl
IGpzU3RyaW5nT3JVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCit7
CisgICAgaWYgKHMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBzKTsKK30KKworSlNWYWx1ZSBqc1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVSTCYgdXJsKQoreworICAgIHJldHVybiBqc1N0cmlu
Z1dpdGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkpOworfQorCitKU1ZhbHVlIGpzU3RyaW5nT3JV
bmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICBpZiAodXJs
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4ganNT
dHJpbmdXaXRoQ2FjaGUoZXhlYywgdXJsLnN0cmluZygpKTsKK30KKworc3RhdGljIGlubGluZSBT
dHJpbmcgc3RyaW5nVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIFN0cmluZyYmIHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmluZy5jb250YWluc09u
bHlMYXRpbjEoKSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nOworfQorCitTdHJp
bmcgaWRlbnRpZmllclRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudGlmaWVyKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIHN0cmluZyA9IGlk
ZW50aWZpZXIuc3RyaW5nKCk7CisgICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwg
c2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK1N0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3Ry
aW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3Rh
dGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaGFz
VW5wYWlyZWRTdXJyb2dhdGUoU3RyaW5nVmlldyBzdHJpbmcpCit7CisgICAgLy8gRmFzdCBwYXRo
IGZvciA4LWJpdCBzdHJpbmdzOyB0aGV5IGNhbid0IGhhdmUgYW55IHN1cnJvZ2F0ZXMuCisgICAg
aWYgKHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoYXV0
byBjb2RlUG9pbnQgOiBzdHJpbmcuY29kZVBvaW50cygpKSB7CisgICAgICAgIGlmIChVX0lTX1NV
UlJPR0FURShjb2RlUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9VU1ZTdHJp
bmcoU3RyaW5nJiYgc3RyaW5nKQoreworICAgIC8vIEZhc3QgcGF0aCBmb3IgdGhlIGNhc2Ugd2hl
cmUgdGhlcmUgYXJlIG5vIHVucGFpcmVkIHN1cnJvZ2F0ZXMuCisgICAgaWYgKCFoYXNVbnBhaXJl
ZFN1cnJvZ2F0ZShzdHJpbmcpKQorICAgICAgICByZXR1cm4gc3RyaW5nOworCisgICAgLy8gU2xv
dyBwYXRoOiBodHRwOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1vYnRhaW4tdW5pY29k
ZQorICAgIC8vIFJlcGxhY2VzIHVucGFpcmVkIHN1cnJvZ2F0ZXMgd2l0aCB0aGUgcmVwbGFjZW1l
bnQgY2hhcmFjdGVyLgorICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNl
cnZlQ2FwYWNpdHkoc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBTdHJpbmdWaWV3IHZpZXcgeyBzdHJp
bmcgfTsKKyAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogdmlldy5jb2RlUG9pbnRzKCkpIHsKKyAg
ICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChjb2RlUG9pbnQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnRvU3Ry
aW5nKCk7Cit9CisKK1N0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRp
Zmllci5zdHJpbmcoKTsKKyAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJp
bmcpKTsKK30KKworU3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50
b1dURlN0cmluZygmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisKKyAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKK30KKwor
SlNWYWx1ZSBqc0RhdGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUpCit7CisgICAgcmV0
dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7Cit9CisKK2RvdWJsZSB2YWx1ZVRvRGF0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzTnVt
YmVyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc051bWJlcigpOworICAgIGlmICghdmFsdWUu
aW5oZXJpdHMoZXhlYy0+dm0oKSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpKQorICAgICAgICByZXR1
cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odmFsdWUudG9PYmplY3QoZXhlYykpLT5pbnRlcm5h
bE51bWJlcigpOworfQorCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgZXhjZXB0aW9uVmFsdWUsIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQoreworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVh
ZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byogZXhjZXB0aW9uID0ganNEeW5hbWljRG93
bmNhc3Q8SlNDOjpFeGNlcHRpb24qPih2bSwgZXhjZXB0aW9uVmFsdWUpOworICAgIGlmICghZXhj
ZXB0aW9uKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IHZtLmxhc3RFeGNlcHRpb24oKTsKKyAgICAg
ICAgaWYgKCFleGNlcHRpb24pCisgICAgICAgICAgICBleGNlcHRpb24gPSBKU0M6OkV4Y2VwdGlv
bjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4Y2VwdGlvblZhbHVlLCBKU0M6OkV4Y2VwdGlvbjo6RG9O
b3RDYXB0dXJlU3RhY2spOworICAgIH0KKworICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNl
cHRpb24sIGNhY2hlZFNjcmlwdCk7Cit9CisKK1N0cmluZyByZXRyaWV2ZUVycm9yTWVzc2FnZShF
eGVjU3RhdGUmIHN0YXRlLCBWTSYgdm0sIEpTVmFsdWUgZXhjZXB0aW9uLCBDYXRjaFNjb3BlJiBj
YXRjaFNjb3BlKQoreworICAgIGlmIChhdXRvKiBleGNlcHRpb25CYXNlID0gdG9FeGNlcHRpb25C
YXNlKHZtLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gZXhjZXB0aW9uQmFzZS0+dG9TdHJp
bmcoKTsKKworICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJ
bnNwZWN0b3I6IFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbiBzaG91bGQgbm90IGV2YWx1YXRlIEph
dmFTY3JpcHQgaGFuZGxpbmcgZXhjZXB0aW9ucworICAgIC8vIElmIHRoaXMgaXMgYSBjdXN0b20g
ZXhjZXB0aW9uIG9iamVjdCwgY2FsbCB0b1N0cmluZyBvbiBpdCB0byB0cnkgYW5kIGdldCBhIG5p
Y2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZXhjZXB0aW9uLgorICAgIFN0cmluZyBl
cnJvck1lc3NhZ2U7CisgICAgaWYgKGF1dG8qIGVycm9yID0ganNEeW5hbWljRG93bmNhc3Q8RXJy
b3JJbnN0YW5jZSo+KHZtLCBleGNlcHRpb24pKQorICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJv
ci0+c2FuaXRpemVkVG9TdHJpbmcoJnN0YXRlKTsKKyAgICBlbHNlCisgICAgICAgIGVycm9yTWVz
c2FnZSA9IGV4Y2VwdGlvbi50b1dURlN0cmluZygmc3RhdGUpOworCisgICAgLy8gV2UgbmVlZCB0
byBjbGVhciBhbnkgbmV3IGV4Y2VwdGlvbiB0aGF0IG1heSBiZSB0aHJvd24gaW4gdGhlIHRvU3Ry
aW5nKCkgY2FsbCBhYm92ZS4KKyAgICAvLyByZXBvcnRFeGNlcHRpb24oKSBpcyBub3Qgc3VwcG9z
ZWQgdG8gYmUgbWFraW5nIG5ldyBleGNlcHRpb25zLgorICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNl
cHRpb24oKTsKKyAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gZXJyb3JN
ZXNzYWdlOworfQorCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6
RXhjZXB0aW9uKiBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0LCBFeGNlcHRp
b25EZXRhaWxzKiBleGNlcHRpb25EZXRhaWxzKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgUkVMRUFT
RV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgaWYgKGlz
VGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbih2bSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoZXhlYy0+dm0oKSk7CisK
KyAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0
YWNrRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4Q2Fs
bFN0YWNrU2l6ZVRvQ2FwdHVyZSkpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
dm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7CisKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKTsKKyAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IGpzRHluYW1pY0Rvd25jYXN0
PEpTRE9NV2luZG93Kj4odm0sIGdsb2JhbE9iamVjdCkpIHsKKyAgICAgICAgaWYgKCF3aW5kb3ct
PndyYXBwZWQoKS5pc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpbnQgbGluZU51bWJlciA9IDA7CisgICAgaW50IGNvbHVtbk51
bWJlciA9IDA7CisgICAgU3RyaW5nIGV4Y2VwdGlvblNvdXJjZVVSTDsKKyAgICBpZiAoY29uc3Qg
U2NyaXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsU3RhY2stPmZpcnN0Tm9uTmF0aXZlQ2Fs
bEZyYW1lKCkpIHsKKyAgICAgICAgbGluZU51bWJlciA9IGNhbGxGcmFtZS0+bGluZU51bWJlcigp
OworICAgICAgICBjb2x1bW5OdW1iZXIgPSBjYWxsRnJhbWUtPmNvbHVtbk51bWJlcigpOworICAg
ICAgICBleGNlcHRpb25Tb3VyY2VVUkwgPSBjYWxsRnJhbWUtPnNvdXJjZVVSTCgpOworICAgIH0K
KworICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSByZXRyaWV2ZUVycm9yTWVzc2FnZSgqZXhlYywg
dm0sIGV4Y2VwdGlvbi0+dmFsdWUoKSwgc2NvcGUpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5yZXBvcnRFeGNlcHRpb24o
ZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGV4Y2VwdGlvblNvdXJjZVVS
TCwgZXhjZXB0aW9uLCBjYWxsU3RhY2stPnNpemUoKSA/IGNhbGxTdGFjayA6IG51bGxwdHIsIGNh
Y2hlZFNjcmlwdCk7CisKKyAgICBpZiAoZXhjZXB0aW9uRGV0YWlscykgeworICAgICAgICBleGNl
cHRpb25EZXRhaWxzLT5tZXNzYWdlID0gZXJyb3JNZXNzYWdlOworICAgICAgICBleGNlcHRpb25E
ZXRhaWxzLT5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAgICAgZXhjZXB0aW9uRGV0YWls
cy0+Y29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOworICAgICAgICBleGNlcHRpb25EZXRhaWxz
LT5zb3VyY2VVUkwgPSBleGNlcHRpb25Tb3VyY2VVUkw7CisgICAgfQorfQorCit2b2lkIHJlcG9y
dEN1cnJlbnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1
dG8qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7Cit9CisKK3N0YXRp
YyBKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNv
ZGUgZWMsIGNvbnN0IFN0cmluZyogbWVzc2FnZSA9IG51bGxwdHIpCit7CisgICAgaWYgKCFlYyB8
fCBlYyA9PSBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yKQorICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKworICAgIC8vIEZJWE1FOiBIYW5kbGUgb3RoZXIgV2ViSURMIGV4Y2VwdGlvbiB0eXBl
cy4KKyAgICBpZiAoZWMgPT0gVHlwZUVycm9yKSB7CisgICAgICAgIGlmICghbWVzc2FnZSB8fCBt
ZXNzYWdlLT5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4
ZWMpOworICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMsICptZXNzYWdlKTsKKyAg
ICB9CisKKyAgICBpZiAoZWMgPT0gUmFuZ2VFcnJvcikgeworICAgICAgICBpZiAoIW1lc3NhZ2Ug
fHwgbWVzc2FnZS0+aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJCYWQgdmFsdWUiKSk7CisgICAgICAgIHJldHVybiBjcmVh
dGVSYW5nZUVycm9yKGV4ZWMsICptZXNzYWdlKTsKKyAgICB9CisKKyAgICBpZiAoZWMgPT0gU3Rh
Y2tPdmVyZmxvd0Vycm9yKQorICAgICAgICByZXR1cm4gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9y
KGV4ZWMpOworCisgICAgLy8gRklYTUU6IEFsbCBjYWxsZXJzIHRvIGNyZWF0ZURPTUV4Y2VwdGlv
biBuZWVkIHRvIHBhc3MgaW4gdGhlIGNvcnJlY3QgZ2xvYmFsIG9iamVjdC4KKyAgICAvLyBGb3Ig
bm93LCB3ZSdyZSBnb2luZyB0byBhc3N1bWUgdGhlIGxleGljYWxHbG9iYWxPYmplY3QuIFdoaWNo
IGlzIHdyb25nIGluIGNhc2VzIGxpa2UgdGhpczoKKyAgICAvLyBmcmFtZXNbMF0uZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudChudWxsLCBudWxsKTsgLy8gdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGljaCBz
aG91bGQgaGF2ZSB0aGUgc3ViZnJhbWUncyBwcm90b3R5cGVzLgorICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4
ZWMpOworCisgICAgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKwor
ICAgIENTdHJpbmcgbWVzc2FnZUNTdHJpbmc7CisgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgIG1l
c3NhZ2VDU3RyaW5nID0gbWVzc2FnZS0+dXRmOCgpOworICAgIGlmIChtZXNzYWdlICYmICFtZXNz
YWdlLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gSXQgaXMgc2FmZSB0byBkbyB0aGlzIGJlY2F1
c2UgdGhlIGNoYXIqIGNvbnRlbnRzIG9mIHRoZSBDU3RyaW5nIGFyZSBjb3BpZWQgaW50byBhIG5l
dyBXVEY6OlN0cmluZyBiZWZvcmUgdGhlIENTdHJpbmcgaXMgZGVzdHJveWVkLgorICAgICAgICBk
ZXNjcmlwdGlvbi5kZXNjcmlwdGlvbiA9IG1lc3NhZ2VDU3RyaW5nLmRhdGEoKTsKKyAgICB9CisK
KyAgICBKU1ZhbHVlIGVycm9yT2JqZWN0OworICAgIHN3aXRjaCAoZGVzY3JpcHRpb24udHlwZSkg
eworICAgIGNhc2UgRE9NQ29yZUV4Y2VwdGlvblR5cGU6CisjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisgICAgY2FzZSBJREJEYXRhYmFzZUV4Y2VwdGlvblR5cGU6CisjZW5kaWYKKyAgICAg
ICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgRE9NQ29yZUV4Y2VwdGlv
bjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZUV4
Y2VwdGlvblR5cGU6CisgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIEZpbGVFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFNRTEV4Y2VwdGlvblR5cGU6CisgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIFNRTEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU1ZHRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJyb3JP
YmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHRXhjZXB0aW9uOjpjcmVhdGUoZGVz
Y3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYUGF0aEV4Y2VwdGlvblR5cGU6
CisgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFhQYXRoRXhj
ZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IAorICAgIEFTU0VSVChlcnJvck9iamVjdCk7CisgICAgYWRkRXJyb3JJbmZvKGV4ZWMsIGFzT2Jq
ZWN0KGVycm9yT2JqZWN0KSwgdHJ1ZSk7CisgICAgcmV0dXJuIGVycm9yT2JqZWN0OworfQorCitK
U1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUg
ZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlRE9NRXhjZXB0
aW9uKGV4ZWMsIGVjLCAmbWVzc2FnZSk7Cit9CisKK0pTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9u
KEV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4g
Y3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgZXhjZXB0aW9uLmNvZGUoKSwgZXhjZXB0aW9uLnJl
bGVhc2VNZXNzYWdlKCkpOworfQorCit2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRp
b24mJiBleGNlcHRpb24pCit7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsK
KyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlv
bihzdGF0ZSwgV1RGTW92ZShleGNlcHRpb24pKSk7Cit9CisKK2Jvb2wgaGFzSXRlcmF0b3JNZXRo
b2QoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0
byYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgSlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgIENh
bGxEYXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlOworICAgIEpTVmFsdWUgYXBw
bHlNZXRob2QgPSBvYmplY3QtPmdldE1ldGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwg
dm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0
ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBmYWxzZSk7CisKKyAgICByZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5kZWZp
bmVkKCk7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJh
bWUoRXhlY1N0YXRlJiBzdGF0ZSwgRnJhbWUmIGZyYW1lLCBTdHJpbmcmIG1lc3NhZ2UpCit7Cisg
ICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKCZzdGF0ZSwg
JmZyYW1lLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBtZXNzYWdlID0gZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWlu
QWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9N
V2luZG93KEV4ZWNTdGF0ZSYgc3RhdGUsIERPTVdpbmRvdyYgZ2xvYmFsT2JqZWN0LCBTdHJpbmcm
IG1lc3NhZ2UpCit7CisgICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NU
b0RPTVdpbmRvdygmc3RhdGUsIGdsb2JhbE9iamVjdCwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9y
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgbWVzc2FnZSA9IGdsb2JhbE9iamVjdC5jcm9z
c0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUq
IGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFmcmFtZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+cHJpbnRFcnJv
ck1lc3NhZ2UobWVzc2FnZSk7Cit9CisKK1N0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJl
KEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJ
bmZvKQoreworICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0
LnN0cnVjdHVyZXMoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5n
ZXQoY2xhc3NJbmZvKS5nZXQoKTsKK30KKworU3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29u
c3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCit7CisgICAgYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5n
TWFya2luZyhnbG9iYWxPYmplY3Qudm0oKS5oZWFwLCBnbG9iYWxPYmplY3QuZ2NMb2NrKCkpOwor
ICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LnN0cnVjdHVy
ZXMobG9ja2VyKTsKKyAgICBBU1NFUlQoIXN0cnVjdHVyZXMuY29udGFpbnMoY2xhc3NJbmZvKSk7
CisgICAgcmV0dXJuIHN0cnVjdHVyZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZT4oZ2xvYmFsT2JqZWN0LnZtKCksICZnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJh
dG9yLT52YWx1ZS5nZXQoKTsKK30KKworc3RhdGljIGNvbnN0IGludDMyX3Qga01heEludDMyID0g
MHg3ZmZmZmZmZjsKK3N0YXRpYyBjb25zdCBpbnQzMl90IGtNaW5JbnQzMiA9IC1rTWF4SW50MzIg
LSAxOworc3RhdGljIGNvbnN0IHVpbnQzMl90IGtNYXhVSW50MzIgPSAweGZmZmZmZmZmVTsKK3N0
YXRpYyBjb25zdCBpbnQ2NF90IGtKU01heEludGVnZXIgPSAweDIwMDAwMDAwMDAwMDAwTEwgLSAx
OyAvLyAyXjUzIC0gMSwgbGFyZ2VzdCBpbnRlZ2VyIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBpbiBF
Q01BU2NyaXB0LgorCitzdGF0aWMgU3RyaW5nIHJhbmdlRXJyb3JTdHJpbmcoZG91YmxlIHZhbHVl
LCBkb3VibGUgbWluLCBkb3VibGUgbWF4KQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJWYWx1
ZSAiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdCh2YWx1ZSksICIgaXMgb3V0c2lk
ZSB0aGUgcmFuZ2UgWyIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1pbiksICIs
ICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1heCksICJdIik7Cit9CisKK3N0
YXRpYyBkb3VibGUgZW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB4LCBkb3Vi
bGUgbWluaW11bSwgZG91YmxlIG1heGltdW0pCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoc3Rk
Ojppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgeCA9IHRydW5jKHgpOworICAgIGlmICh4IDwgbWlu
aW11bSB8fCB4ID4gbWF4aW11bSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlLCByYW5nZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIHJldHVybiB4OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K3N0cnVjdCBJbnRUeXBlTGltaXRzIHsKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlw
ZUxpbWl0czxpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgaW50OF90IG1pblZhbHVlID0gLTEy
ODsKKyAgICBzdGF0aWMgY29uc3QgaW50OF90IG1heFZhbHVlID0gMTI3OworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDI1NjsgLy8gMl44Cit9OworCit0ZW1wbGF0
ZSA8Pgorc3RydWN0IEludFR5cGVMaW1pdHM8dWludDhfdD4geworICAgIHN0YXRpYyBjb25zdCB1
aW50OF90IG1heFZhbHVlID0gMjU1OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJP
ZlZhbHVlcyA9IDI1NjsgLy8gMl44Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVM
aW1pdHM8aW50MTZfdD4geworICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtaW5WYWx1ZSA9IC0zMjc2
ODsKKyAgICBzdGF0aWMgY29uc3Qgc2hvcnQgbWF4VmFsdWUgPSAzMjc2NzsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgorfTsKKwordGVt
cGxhdGUgPD4KK3N0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQxNl90PiB7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHNob3J0IG1heFZhbHVlID0gNjU1MzU7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG51bWJlck9mVmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKK307CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorc3RhdGljIGlubGluZSBUIHRvU21hbGxlckludChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zaWduZWQ8
VD46OnZhbHVlICYmIHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUg
dXNlZCBmb3Igc2lnbmVkIGludGVncmFsIHR5cGVzIik7CisKKyAgICB0eXBlZGVmIEludFR5cGVM
aW1pdHM8VD4gTGltaXRzVHJhaXQ7CisgICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBh
bHJlYWR5IGEgMzItYml0IHNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KKyAgICBp
ZiAodmFsdWUuaXNJbnQzMigpKSB7CisgICAgICAgIGludDMyX3QgZCA9IHZhbHVlLmFzSW50MzIo
KTsKKyAgICAgICAgaWYgKGQgPj0gTGltaXRzVHJhaXQ6Om1pblZhbHVlICYmIGQgPD0gTGltaXRz
VHJhaXQ6Om1heFZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwor
ICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1w
OgorICAgICAgICAgICAgcmV0dXJuIGQgPCBMaW1pdHNUcmFpdDo6bWluVmFsdWUgPyBMaW1pdHNU
cmFpdDo6bWluVmFsdWUgOiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7CisgICAgICAgIH0KKyAgICAg
ICAgZCAlPSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXM7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUPihkID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8gZCAtIExpbWl0c1RyYWl0Ojpu
dW1iZXJPZlZhbHVlcyA6IGQpOworICAgIH0KKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1i
ZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKworICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgIHJldHVybiBlbmZvcmNlUmFu
Z2Uoc3RhdGUsIHgsIExpbWl0c1RyYWl0OjptaW5WYWx1ZSwgTGltaXRzVHJhaXQ6Om1heFZhbHVl
KTsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAg
ICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7CisgICAgfQorCisg
ICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICB4ID0geCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgp
KTsKKyAgICB4ID0gZm1vZCh4LCBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMpOworCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KHggPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyB4IC0gTGlt
aXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzIDogeCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
Pgorc3RhdGljIGlubGluZSBUIHRvU21hbGxlclVJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZh
bHVlICYmIHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBm
b3IgdW5zaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKKworICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0
czxUPiBMaW1pdHNUcmFpdDsKKyAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVh
ZHkgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCisgICAgaWYg
KHZhbHVlLmlzVUludDMyKCkpIHsKKyAgICAgICAgdWludDMyX3QgZCA9IHZhbHVlLmFzVUludDMy
KCk7CisgICAgICAgIGlmIChkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9u
KSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIGNhc2UgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAg
ICAgICByZXR1cm4gTGltaXRzVHJhaXQ6Om1heFZhbHVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIDApOworCisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
KyAgICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwgTGltaXRzVHJhaXQ6Om1h
eFZhbHVlKTsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6
CisgICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7CisgICAg
fQorCisgICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICB4ID0geCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihm
YWJzKHgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZm1vZCh4LCBMaW1pdHNUcmFpdDo6
bnVtYmVyT2ZWYWx1ZXMpKTsKK30KKworaW50OF90IHRvSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlcklu
dDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2UpOworfQorCit1aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50
PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2UpOworfQorCitpbnQ4X3QgdG9JbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90Pihz
dGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQor
Cit1aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKworLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvV2ViSURMLyNlcy1ieXRlCitpbnQ4X3QgdG9JbnQ4KEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0
YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQor
CisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLW9jdGV0Cit1aW50OF90IHRvVUlu
dDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFs
bGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKTsKK30KKworaW50MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQx
Nl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlKTsKK30KKwordWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZf
dD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZSk7Cit9CisKK2ludDE2X3QgdG9JbnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQorCit1aW50MTZf
dCB0b1VJbnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
cmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1dlYklETC8jZXMtc2hvcnQKK2ludDE2X3QgdG9JbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0
dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtc2hvcnQKK3VpbnQxNl90IHRv
VUludDE2KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRv
U21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpOb3JtYWwpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwv
I2VzLWxvbmcKK2ludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkK
KyAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAg
ICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBrTWluSW50MzIsIGtNYXhJbnQzMik7Cit9
CisKK2ludDMyX3QgdG9JbnQzMkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50
MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1
cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPGludDMyX3Q+KHgpOworfQorCit1aW50MzJf
dCB0b1VJbnQzMkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwor
CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6
OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88dWludDMyX3Q+KHgpOworfQorCisvLyBodHRwOi8vd3d3
LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmcKK3VpbnQzMl90IHRvVUludDMyRW5m
b3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUlu
dDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0
ZSwgeCwgMCwga01heFVJbnQzMik7Cit9CisKK2ludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgLWtKU01h
eEludGVnZXIsIGtKU01heEludGVnZXIpOworfQorCit1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VS
YW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZt
ID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwg
MCwga0pTTWF4SW50ZWdlcik7Cit9CisKK2ludDY0X3QgdG9JbnQ2NENsYW1wKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8
aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+KHgsIC1rSlNNYXhJbnRl
Z2VyKSwga0pTTWF4SW50ZWdlcikpOworfQorCit1aW50NjRfdCB0b1VJbnQ2NENsYW1wKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVl
LnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAwKSwg
a0pTTWF4SW50ZWdlcikpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2Vz
LWxvbmctbG9uZworaW50NjRfdCB0b0ludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworCisgICAgLy8g
TWFwIE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1
bG8gMl42NC4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbjsKKyAgICBkb3VibGVUb0ludGVnZXIo
eCwgbik7CisgICAgcmV0dXJuIG47Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklE
TC8jZXMtdW5zaWduZWQtbG9uZy1sb25nCit1aW50NjRfdCB0b1VJbnQ2NChFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0
YXRlKTsKKworICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZp
bml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG47CisgICAg
ZG91YmxlVG9JbnRlZ2VyKHgsIG4pOworICAgIHJldHVybiBuOworfQorCitjbGFzcyBHZXRDYWxs
ZXJHbG9iYWxPYmplY3RGdW5jdG9yIHsKK3B1YmxpYzoKKyAgICBHZXRDYWxsZXJHbG9iYWxPYmpl
Y3RGdW5jdG9yKCkgPSBkZWZhdWx0OworCisgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0
b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1f
aGFzU2tpcHBlZEZpcnN0RnJhbWUpIHsKKyAgICAgICAgICAgIG1faGFzU2tpcHBlZEZpcnN0RnJh
bWUgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoYXV0byogY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJs
b2NrKCkpCisgICAgICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHZpc2l0b3ItPmNhbGxl
ZSgpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYWxsZWUgaXMgbm90IGFuIG9iamVjdCBpZiB0
aGUgY2FsbGVyIGlzIFdlYiBBc3NlbWJseS4KKyAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hh
dCB0byBkbyBoZXJlLiBXZSBjYW4gcHJvYmFibHkgZ2V0IHRoZSBnbG9iYWwgb2JqZWN0CisgICAg
ICAgICAgICAvLyBmcm9tIHRoZSB0b3AtbW9zdCBXYXNtIEluc3RhbmNlLiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzIxCisgICAgICAgICAgICBpZiAodmlzaXRv
ci0+Y2FsbGVlKCktPmlzT2JqZWN0KCkpCisgICAgICAgICAgICAgICAgbV9nbG9iYWxPYmplY3Qg
PSBqc0Nhc3Q8SlNPYmplY3QqPih2aXNpdG9yLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CisgICAgfQorCisg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFs
T2JqZWN0OyB9CisKK3ByaXZhdGU6CisgICAgbXV0YWJsZSBib29sIG1faGFzU2tpcHBlZEZpcnN0
RnJhbWUgeyBmYWxzZSB9OworICAgIG11dGFibGUgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2Jq
ZWN0IHsgbnVsbHB0ciB9OworfTsKKworRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coRXhlY1N0
YXRlKiBleGVjKQoreworICAgIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgaXRlcjsKKyAg
ICBleGVjLT5pdGVyYXRlKGl0ZXIpOworICAgIHJldHVybiBpdGVyLmdsb2JhbE9iamVjdCgpID8g
YXNKU0RPTVdpbmRvdyhpdGVyLmdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpIDogZmlyc3RET01X
aW5kb3coZXhlYyk7Cit9CisKK0RPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLT53cmFwcGVkKCk7Cit9CisKK0RPTVdpbmRvdyYgZmlyc3RET01XaW5kb3coRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKSktPndyYXBwZWQoKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGNhbkFjY2Vz
c0RvY3VtZW50KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRG9jdW1lbnQqIHRhcmdldERvY3VtZW50
LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCit7CisgICAgVk0mIHZt
ID0gc3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgaWYgKCF0YXJnZXREb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgRE9NV2luZG93JiBhY3RpdmUgPSBhY3RpdmVET01XaW5kb3coc3RhdGUpOworCisgICAgaWYg
KGFjdGl2ZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLmNhbkFjY2Vzcyh0YXJnZXREb2N1
bWVudC0+c2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3dp
dGNoIChyZXBvcnRpbmdPcHRpb24pIHsKKyAgICBjYXNlIFRocm93U2VjdXJpdHlFcnJvcjoKKyAg
ICAgICAgdGhyb3dTZWN1cml0eUVycm9yKCpzdGF0ZSwgc2NvcGUsIHRhcmdldERvY3VtZW50LT5k
b21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTG9nU2VjdXJpdHlFcnJvcjoKKyAgICAgICAgcHJpbnRFcnJv
ck1lc3NhZ2VGb3JGcmFtZSh0YXJnZXREb2N1bWVudC0+ZnJhbWUoKSwgdGFyZ2V0RG9jdW1lbnQt
PmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3I6CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCaW5kaW5nU2Vj
dXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBET01XaW5kb3cmIHRhcmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0
aW9uKQoreworICAgIHJldHVybiBjYW5BY2Nlc3NEb2N1bWVudChzdGF0ZSwgdGFyZ2V0LmRvY3Vt
ZW50KCksIHJlcG9ydGluZ09wdGlvbik7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBGcmFtZSogdGFyZ2V0
LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCit7CisgICAgcmV0dXJu
IHRhcmdldCAmJiBjYW5BY2Nlc3NEb2N1bWVudChzdGF0ZSwgdGFyZ2V0LT5kb2N1bWVudCgpLCBy
ZXBvcnRpbmdPcHRpb24pOworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb05vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBOb2RlKiB0YXJnZXQpCit7CisgICAg
cmV0dXJuICF0YXJnZXQgfHwgY2FuQWNjZXNzRG9jdW1lbnQoJnN0YXRlLCAmdGFyZ2V0LT5kb2N1
bWVudCgpLCBMb2dTZWN1cml0eUVycm9yKTsKK30KKyAgICAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1
ZSB0aHJvd1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGVycm9yTWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lk
IGFwcGVuZEFyZ3VtZW50TXVzdEJlKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIHVuc2lnbmVkIGFy
Z3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiQXJndW1lbnQgIik7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoYXJndW1lbnRJ
bmRleCArIDEpOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICgnIik7CisgICAgYnVpbGRl
ci5hcHBlbmQoYXJndW1lbnROYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIicpIHRv
ICIpOworICAgIGlmICghZnVuY3Rpb25OYW1lKSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgidGhlICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChpbnRlcmZhY2VOYW1lKTsKKyAg
ICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgY29uc3RydWN0b3IiKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBidWlsZGVyLmFwcGVuZChpbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJy4nKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZnVuY3Rpb25OYW1lKTsKKyAg
ICB9CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgbXVzdCBiZSAiKTsKK30KKworSlNDOjpF
bmNvZGVkSlNWYWx1ZSByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKQoreworICAgIGF1dG8mIGNvbnRleHQgPSAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgIGNvbnRleHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VM
ZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJv
cGVydHkgJyIsIGF0dHJpYnV0ZU5hbWUsICInIG9uIGEgbm9uLSIsIGludGVyZmFjZU5hbWUsICIg
b2JqZWN0LiIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
fQorICAgIAordm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKQoreworICAgIGF1dG8mIGNvbnRleHQgPSAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgIGNvbnRleHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VM
ZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBzZXQgcHJvcGVy
dHkgJyIsIGF0dHJpYnV0ZU5hbWUsICInIG9uIGEgbm9uLSIsIGludGVyZmFjZU5hbWUsICIgb2Jq
ZWN0LiIpKTsKK30KKwordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4
Y2VwdGlvbigpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01F
eGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUikpOworfQorCit2b2lkIHRocm93Tm90
U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkpOworICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOworICAgIHRocm93RXhjZXB0
aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JU
RURfRVJSLCAmbWVzc2FnZVN0cmluZykpOworfQorCit2b2lkIHRocm93SW52YWxpZFN0YXRlRXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBj
aGFyKiBtZXNzYWdlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIFN0
cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElOVkFMSURfU1RBVEVfRVJSLCAmbWVz
c2FnZVN0cmluZykpOworfQorCit2b2lkIHRocm93U2VjdXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigm
c3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTRUNVUklUWV9FUlIsIG1l
c3NhZ2UpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51
bUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5z
aWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3Qg
Y2hhciogZXhwZWN0ZWRWYWx1ZXMpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAg
IGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFt
ZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOworICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgib25lIG9mOiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFZhbHVl
cyk7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50
b1N0cmluZygpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJl
RnVuY3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVy
LCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFt
ZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJhIGZ1bmN0aW9uIik7CisgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKK30K
KworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRl
eCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFj
ZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBl
KQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBhcHBlbmRBcmd1bWVudE11c3RC
ZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNl
TmFtZSwgZnVuY3Rpb25OYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImFuIGluc3Rh
bmNlIG9mICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVHlwZSk7CisgICAgcmV0dXJu
IHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKK30K
Kwordm9pZCB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNj
b3BlLCBBU0NJSUxpdGVyYWwoIkludmFsaWQgQXJyYXkgZWxlbWVudCB0eXBlIikpOworfQorCit2
b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQoreworICAgIHRocm93VHlw
ZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcu
JywgYXR0cmlidXRlTmFtZSwgIiBhdHRyaWJ1dGUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiLCBl
eHBlY3RlZFR5cGUpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1JlcXVpcmVkTWVt
YmVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSwgY29uc3QgY2hhciogbWVtYmVyTmFtZSwgY29uc3QgY2hhciogZGljdGlvbmFyeU5hbWUsIGNv
bnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJNZW1iZXIgIik7CisgICAgYnVpbGRlci5hcHBlbmQo
ZGljdGlvbmFyeU5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7CisgICAgYnVpbGRlci5h
cHBlbmQobWVtYmVyTmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgaXMgcmVxdWly
ZWQgYW5kIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIik7CisgICAgYnVpbGRlci5hcHBlbmQoZXhw
ZWN0ZWRUeXBlKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBi
dWlsZGVyLnRvU3RyaW5nKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93Q29uc3Ry
dWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUpCit7CisgICAgcmV0dXJuIHRocm93Vk1FcnJvcigmc3RhdGUsIHNjb3BlLCBjcmVhdGVSZWZl
cmVuY2VFcnJvcigmc3RhdGUsIG1ha2VTdHJpbmcoaW50ZXJmYWNlTmFtZSwgIiBjb25zdHJ1Y3Rv
ciBhc3NvY2lhdGVkIGV4ZWN1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIikpKTsKK30KKwor
dm9pZCB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiVmFsdWUgaXMgbm90IGEgc2VxdWVuY2UiKSk7Cit9CisKK3ZvaWQgdGhyb3dO
b25GaW5pdGVUeXBlRXJyb3IoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlRo
ZSBwcm92aWRlZCB2YWx1ZSBpcyBub24tZmluaXRlIikpOworfQorCitTdHJpbmcgbWFrZUdldHRl
clR5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFj
ZU5hbWUsICcuJywgYXR0cmlidXRlTmFtZSwgIiBnZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBp
bnN0YW5jZXMgb2YgIiwgaW50ZXJmYWNlTmFtZSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKQoreworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIG1h
a2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGF0dHJpYnV0ZU5hbWUpKTsK
K30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlz
ZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFj
ZU5hbWUsIGF0dHJpYnV0ZU5hbWUpKTsKK30KKworYm9vbCB0aHJvd1NldHRlclR5cGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIq
IGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgdGhyb3dU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwg
Jy4nLCBhdHRyaWJ1dGVOYW1lLCAiIHNldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNl
cyBvZiAiLCBpbnRlcmZhY2VOYW1lKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcg
bWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiQ2FuIG9ubHkg
Y2FsbCAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGZ1bmN0aW9uTmFtZSwgIiBvbiBpbnN0YW5jZXMg
b2YgIiwgaW50ZXJmYWNlTmFtZSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3Nh
Z2UoaW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFs
dWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKERlZmVycmVkUHJvbWlzZSYgcHJvbWlz
ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKK3sK
KyAgICBwcm9taXNlLnJlamVjdChUeXBlRXJyb3IsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShp
bnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0
aFRoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZh
Y2VOYW1lLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lKQoreworICAgIHJldHVybiBjcmVhdGVSZWpl
Y3RlZFByb21pc2VXaXRoVHlwZUVycm9yKHN0YXRlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2Uo
aW50ZXJmYWNlTmFtZSwgbWV0aG9kTmFtZSkpOworfQorCit2b2lkIGNhbGxGdW5jdGlvbldpdGhD
dXJyZW50QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCYgdGhp
c09iamVjdCwgSlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBKU0M6OkNhbGxEYXRh
IGNhbGxEYXRhOworICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENhbGxEYXRh
KCZmdW5jdGlvbiwgY2FsbERhdGEpOworICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6
Tm9uZSk7CisKKyAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAg
ICAgIGFyZ3VtZW50cy5hcHBlbmQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgIEpT
Qzo6Y2FsbCgmc3RhdGUsICZmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmdGhpc09iamVj
dCwgYXJndW1lbnRzKTsKK30KKwordm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6
dmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRv
cikKK3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PERPTUNvbnN0cnVjdG9ySlNCdWls
dGluT2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVuY3Rpb24p
OworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsVGhyb3dUeXBl
RXJyb3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHRocm93VHlwZUVycm9y
KGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIG9w
ZXJhdG9yIikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworfQorCitD
YWxsVHlwZSBET01Db25zdHJ1Y3Rvck9iamVjdDo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERh
dGEmIGNhbGxEYXRhKQoreworICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxUaHJv
d1R5cGVFcnJvcjsKKyAgICByZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7Cit9CisKK3ZvaWQgdGhyb3dE
T01TeW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRp
b24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU1lOVEFYX0VSUikp
OworfQorCit2b2lkIHRocm93RGF0YUNsb25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigm
c3RhdGUsIERBVEFfQ0xPTkVfRVJSKSk7Cit9CisKK3ZvaWQgdGhyb3dJbmRleFNpemVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5ERVhfU0laRV9FUlIpKTsKK30KKwordm9p
ZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0
aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBU
WVBFX01JU01BVENIX0VSUikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3Bw
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5jcHAJKHJldmlzaW9uIDIxMTM1
MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjAsMzY3ICsyMCwyMCBAQAogICovCiAKICNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRp
bmdTZWN1cml0eS5oIgogCi0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiQ29t
bW9uVk0uaCIKLSNpbmNsdWRlICJET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oIgotI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24u
aCIKLSNpbmNsdWRlICJFeGNlcHRpb25IZWFkZXJzLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uSW50
ZXJmYWNlcy5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCi0jaW5j
bHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIK
LSNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5o
IgotI2luY2x1ZGUgIkpTRXhjZXB0aW9uQmFzZS5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9u
SGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKICNpbmNsdWRlICJTZWN1
cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgPGJ5dGVjb2RlL0NvZGVCbG9jay5oPgotI2luY2x1ZGUg
PGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0
Q2FsbFN0YWNrRmFjdG9yeS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JIYW5kbGlu
Z1Njb3BlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvckluc3RhbmNlLmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9FeGNlcHRpb24uaD4KLSNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMu
aD4KLSNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4K
LSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJh
Y3Rlck5hbWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9NQ29uc3RydWN0b3JPYmplY3QpOwotU1RB
VElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yV2l0aERv
Y3VtZW50KTsKLQotdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIHBy
b3BlcnR5TmFtZSkKLXsKLSAgICBjb21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5
TmFtZSk7Ci19Ci0KLUpTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFN0cmluZyYgcykKLXsKLSAgICBpZiAocy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOwotICAgIHJldHVybiBqc093bmVkU3RyaW5nKGV4ZWMsIHMpOwotfQotCi1KU1Zh
bHVlIGpzU3RyaW5nT3JVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMp
Ci17Ci0gICAgaWYgKHMuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBzKTsKLX0KLQotSlNWYWx1ZSBqc1N0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVSTCYgdXJsKQotewotICAgIHJldHVybiBqc1N0
cmluZ1dpdGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkpOwotfQotCi1KU1ZhbHVlIGpzU3RyaW5n
T3JVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKLXsKLSAgICBpZiAo
dXJsLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4g
anNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdXJsLnN0cmluZygpKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBTdHJpbmcgc3RyaW5nVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUsIFN0cmluZyYmIHN0cmluZykKLXsKLSAgICBpZiAoIXN0cmluZy5jb250YWlu
c09ubHlMYXRpbjEoKSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RyaW5nOwotfQotCi1T
dHJpbmcgaWRlbnRpZmllclRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudGlmaWVyKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgU3RyaW5nIHN0cmluZyA9
IGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0
ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Ci19Ci0KLVN0cmluZyB2YWx1ZVRvQnl0ZVN0cmlu
ZyhFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAg
U3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmco
c3RhdGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wg
aGFzVW5wYWlyZWRTdXJyb2dhdGUoU3RyaW5nVmlldyBzdHJpbmcpCi17Ci0gICAgLy8gRmFzdCBw
YXRoIGZvciA4LWJpdCBzdHJpbmdzOyB0aGV5IGNhbid0IGhhdmUgYW55IHN1cnJvZ2F0ZXMuCi0g
ICAgaWYgKHN0cmluZy5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAo
YXV0byBjb2RlUG9pbnQgOiBzdHJpbmcuY29kZVBvaW50cygpKSB7Ci0gICAgICAgIGlmIChVX0lT
X1NVUlJPR0FURShjb2RlUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9VU1ZT
dHJpbmcoU3RyaW5nJiYgc3RyaW5nKQotewotICAgIC8vIEZhc3QgcGF0aCBmb3IgdGhlIGNhc2Ug
d2hlcmUgdGhlcmUgYXJlIG5vIHVucGFpcmVkIHN1cnJvZ2F0ZXMuCi0gICAgaWYgKCFoYXNVbnBh
aXJlZFN1cnJvZ2F0ZShzdHJpbmcpKQotICAgICAgICByZXR1cm4gc3RyaW5nOwotCi0gICAgLy8g
U2xvdyBwYXRoOiBodHRwOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1vYnRhaW4tdW5p
Y29kZQotICAgIC8vIFJlcGxhY2VzIHVucGFpcmVkIHN1cnJvZ2F0ZXMgd2l0aCB0aGUgcmVwbGFj
ZW1lbnQgY2hhcmFjdGVyLgotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIHJlc3VsdC5y
ZXNlcnZlQ2FwYWNpdHkoc3RyaW5nLmxlbmd0aCgpKTsKLSAgICBTdHJpbmdWaWV3IHZpZXcgeyBz
dHJpbmcgfTsKLSAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogdmlldy5jb2RlUG9pbnRzKCkpIHsK
LSAgICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCi0gICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChjb2RlUG9pbnQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LnRv
U3RyaW5nKCk7Ci19Ci0KLVN0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKLXsKLSAgICBTdHJpbmcgc3RyaW5nID0gaWRl
bnRpZmllci5zdHJpbmcoKTsKLSAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShz
dHJpbmcpKTsKLX0KLQotU3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1
ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7Ci0KLSAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKLX0K
LQotSlNWYWx1ZSBqc0RhdGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUpCi17Ci0gICAg
cmV0dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKS0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7Ci19Ci0KLWRvdWJsZSB2YWx1ZVRv
RGF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlz
TnVtYmVyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc051bWJlcigpOwotICAgIGlmICghdmFs
dWUuaW5oZXJpdHMoZXhlYy0+dm0oKSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpKQotICAgICAgICBy
ZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odmFsdWUudG9PYmplY3QoZXhlYykpLT5pbnRl
cm5hbE51bWJlcigpOwotfQotCi12b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgZXhjZXB0aW9uVmFsdWUsIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQotewot
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRo
cmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0gICAgYXV0byogZXhjZXB0aW9uID0ganNEeW5hbWlj
RG93bmNhc3Q8SlNDOjpFeGNlcHRpb24qPih2bSwgZXhjZXB0aW9uVmFsdWUpOwotICAgIGlmICgh
ZXhjZXB0aW9uKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IHZtLmxhc3RFeGNlcHRpb24oKTsKLSAg
ICAgICAgaWYgKCFleGNlcHRpb24pCi0gICAgICAgICAgICBleGNlcHRpb24gPSBKU0M6OkV4Y2Vw
dGlvbjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4Y2VwdGlvblZhbHVlLCBKU0M6OkV4Y2VwdGlvbjo6
RG9Ob3RDYXB0dXJlU3RhY2spOwotICAgIH0KLQotICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBl
eGNlcHRpb24sIGNhY2hlZFNjcmlwdCk7Ci19Ci0KLVN0cmluZyByZXRyaWV2ZUVycm9yTWVzc2Fn
ZShFeGVjU3RhdGUmIHN0YXRlLCBWTSYgdm0sIEpTVmFsdWUgZXhjZXB0aW9uLCBDYXRjaFNjb3Bl
JiBjYXRjaFNjb3BlKQotewotICAgIGlmIChhdXRvKiBleGNlcHRpb25CYXNlID0gdG9FeGNlcHRp
b25CYXNlKHZtLCBleGNlcHRpb24pKQotICAgICAgICByZXR1cm4gZXhjZXB0aW9uQmFzZS0+dG9T
dHJpbmcoKTsKLQotICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdl
YiBJbnNwZWN0b3I6IFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbiBzaG91bGQgbm90IGV2YWx1YXRl
IEphdmFTY3JpcHQgaGFuZGxpbmcgZXhjZXB0aW9ucwotICAgIC8vIElmIHRoaXMgaXMgYSBjdXN0
b20gZXhjZXB0aW9uIG9iamVjdCwgY2FsbCB0b1N0cmluZyBvbiBpdCB0byB0cnkgYW5kIGdldCBh
IG5pY2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZXhjZXB0aW9uLgotICAgIFN0cmlu
ZyBlcnJvck1lc3NhZ2U7Ci0gICAgaWYgKGF1dG8qIGVycm9yID0ganNEeW5hbWljRG93bmNhc3Q8
RXJyb3JJbnN0YW5jZSo+KHZtLCBleGNlcHRpb24pKQotICAgICAgICBlcnJvck1lc3NhZ2UgPSBl
cnJvci0+c2FuaXRpemVkVG9TdHJpbmcoJnN0YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIGVycm9y
TWVzc2FnZSA9IGV4Y2VwdGlvbi50b1dURlN0cmluZygmc3RhdGUpOwotCi0gICAgLy8gV2UgbmVl
ZCB0byBjbGVhciBhbnkgbmV3IGV4Y2VwdGlvbiB0aGF0IG1heSBiZSB0aHJvd24gaW4gdGhlIHRv
U3RyaW5nKCkgY2FsbCBhYm92ZS4KLSAgICAvLyByZXBvcnRFeGNlcHRpb24oKSBpcyBub3Qgc3Vw
cG9zZWQgdG8gYmUgbWFraW5nIG5ldyBleGNlcHRpb25zLgotICAgIGNhdGNoU2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKLSAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gZXJy
b3JNZXNzYWdlOwotfQotCi12b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpT
Qzo6RXhjZXB0aW9uKiBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0LCBFeGNl
cHRpb25EZXRhaWxzKiBleGNlcHRpb25EZXRhaWxzKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgUkVM
RUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0gICAgaWYg
KGlzVGVybWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbih2bSwgZXhjZXB0aW9uKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoZXhlYy0+dm0oKSk7
Ci0KLSAgICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2Fs
bFN0YWNrRnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4
Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVyZSkpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0g
ICAgdm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7Ci0KLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKTsKLSAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTRE9NV2luZG93Kj4odm0sIGdsb2JhbE9iamVjdCkpIHsKLSAgICAgICAgaWYgKCF3aW5k
b3ctPndyYXBwZWQoKS5pc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpbnQgbGluZU51bWJlciA9IDA7Ci0gICAgaW50IGNvbHVt
bk51bWJlciA9IDA7Ci0gICAgU3RyaW5nIGV4Y2VwdGlvblNvdXJjZVVSTDsKLSAgICBpZiAoY29u
c3QgU2NyaXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsU3RhY2stPmZpcnN0Tm9uTmF0aXZl
Q2FsbEZyYW1lKCkpIHsKLSAgICAgICAgbGluZU51bWJlciA9IGNhbGxGcmFtZS0+bGluZU51bWJl
cigpOwotICAgICAgICBjb2x1bW5OdW1iZXIgPSBjYWxsRnJhbWUtPmNvbHVtbk51bWJlcigpOwot
ICAgICAgICBleGNlcHRpb25Tb3VyY2VVUkwgPSBjYWxsRnJhbWUtPnNvdXJjZVVSTCgpOwotICAg
IH0KLQotICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSByZXRyaWV2ZUVycm9yTWVzc2FnZSgqZXhl
Yywgdm0sIGV4Y2VwdGlvbi0+dmFsdWUoKSwgc2NvcGUpOwotICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKLSAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5yZXBvcnRFeGNlcHRp
b24oZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGV4Y2VwdGlvblNvdXJj
ZVVSTCwgZXhjZXB0aW9uLCBjYWxsU3RhY2stPnNpemUoKSA/IGNhbGxTdGFjayA6IG51bGxwdHIs
IGNhY2hlZFNjcmlwdCk7Ci0KLSAgICBpZiAoZXhjZXB0aW9uRGV0YWlscykgewotICAgICAgICBl
eGNlcHRpb25EZXRhaWxzLT5tZXNzYWdlID0gZXJyb3JNZXNzYWdlOwotICAgICAgICBleGNlcHRp
b25EZXRhaWxzLT5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKLSAgICAgICAgZXhjZXB0aW9uRGV0
YWlscy0+Y29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOwotICAgICAgICBleGNlcHRpb25EZXRh
aWxzLT5zb3VyY2VVUkwgPSBleGNlcHRpb25Tb3VyY2VVUkw7Ci0gICAgfQotfQotCi12b2lkIHJl
cG9ydEN1cnJlbnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotICAg
IGF1dG8qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwotICAgIHNjb3BlLmNsZWFyRXhj
ZXB0aW9uKCk7Ci0gICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7Ci19Ci0KLXN0
YXRpYyBKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlv
bkNvZGUgZWMsIGNvbnN0IFN0cmluZyogbWVzc2FnZSA9IG51bGxwdHIpCi17Ci0gICAgaWYgKCFl
YyB8fCBlYyA9PSBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yKQotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLQotICAgIC8vIEZJWE1FOiBIYW5kbGUgb3RoZXIgV2ViSURMIGV4Y2VwdGlvbiB0
eXBlcy4KLSAgICBpZiAoZWMgPT0gVHlwZUVycm9yKSB7Ci0gICAgICAgIGlmICghbWVzc2FnZSB8
fCBtZXNzYWdlLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9y
KGV4ZWMpOwotICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMsICptZXNzYWdlKTsK
LSAgICB9Ci0KLSAgICBpZiAoZWMgPT0gUmFuZ2VFcnJvcikgewotICAgICAgICBpZiAoIW1lc3Nh
Z2UgfHwgbWVzc2FnZS0+aXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJhbmdl
RXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJCYWQgdmFsdWUiKSk7Ci0gICAgICAgIHJldHVybiBj
cmVhdGVSYW5nZUVycm9yKGV4ZWMsICptZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBpZiAoZWMgPT0g
U3RhY2tPdmVyZmxvd0Vycm9yKQotICAgICAgICByZXR1cm4gY3JlYXRlU3RhY2tPdmVyZmxvd0Vy
cm9yKGV4ZWMpOwotCi0gICAgLy8gRklYTUU6IEFsbCBjYWxsZXJzIHRvIGNyZWF0ZURPTUV4Y2Vw
dGlvbiBuZWVkIHRvIHBhc3MgaW4gdGhlIGNvcnJlY3QgZ2xvYmFsIG9iamVjdC4KLSAgICAvLyBG
b3Igbm93LCB3ZSdyZSBnb2luZyB0byBhc3N1bWUgdGhlIGxleGljYWxHbG9iYWxPYmplY3QuIFdo
aWNoIGlzIHdyb25nIGluIGNhc2VzIGxpa2UgdGhpczoKLSAgICAvLyBmcmFtZXNbMF0uZG9jdW1l
bnQuY3JlYXRlRWxlbWVudChudWxsLCBudWxsKTsgLy8gdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGlj
aCBzaG91bGQgaGF2ZSB0aGUgc3ViZnJhbWUncyBwcm90b3R5cGVzLgotICAgIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBl
KGV4ZWMpOwotCi0gICAgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsK
LQotICAgIENTdHJpbmcgbWVzc2FnZUNTdHJpbmc7Ci0gICAgaWYgKG1lc3NhZ2UpCi0gICAgICAg
IG1lc3NhZ2VDU3RyaW5nID0gbWVzc2FnZS0+dXRmOCgpOwotICAgIGlmIChtZXNzYWdlICYmICFt
ZXNzYWdlLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gSXQgaXMgc2FmZSB0byBkbyB0aGlzIGJl
Y2F1c2UgdGhlIGNoYXIqIGNvbnRlbnRzIG9mIHRoZSBDU3RyaW5nIGFyZSBjb3BpZWQgaW50byBh
IG5ldyBXVEY6OlN0cmluZyBiZWZvcmUgdGhlIENTdHJpbmcgaXMgZGVzdHJveWVkLgotICAgICAg
ICBkZXNjcmlwdGlvbi5kZXNjcmlwdGlvbiA9IG1lc3NhZ2VDU3RyaW5nLmRhdGEoKTsKLSAgICB9
Ci0KLSAgICBKU1ZhbHVlIGVycm9yT2JqZWN0OwotICAgIHN3aXRjaCAoZGVzY3JpcHRpb24udHlw
ZSkgewotICAgIGNhc2UgRE9NQ29yZUV4Y2VwdGlvblR5cGU6Ci0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0gICAgY2FzZSBJREJEYXRhYmFzZUV4Y2VwdGlvblR5cGU6Ci0jZW5kaWYKLSAg
ICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgRE9NQ29yZUV4Y2Vw
dGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmls
ZUV4Y2VwdGlvblR5cGU6Ci0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIEZpbGVFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFNRTEV4Y2VwdGlvblR5cGU6Ci0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIFNRTEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1ZHRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXJy
b3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHRXhjZXB0aW9uOjpjcmVhdGUo
ZGVzY3JpcHRpb24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYUGF0aEV4Y2VwdGlvblR5
cGU6Ci0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFhQYXRo
RXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIAotICAgIEFTU0VSVChlcnJvck9iamVjdCk7Ci0gICAgYWRkRXJyb3JJbmZvKGV4ZWMsIGFz
T2JqZWN0KGVycm9yT2JqZWN0KSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIGVycm9yT2JqZWN0OwotfQot
Ci1KU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNv
ZGUgZWMsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlRE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjLCAmbWVzc2FnZSk7Ci19Ci0KLUpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0
aW9uKEV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKLXsKLSAgICByZXR1
cm4gY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgZXhjZXB0aW9uLmNvZGUoKSwgZXhjZXB0aW9u
LnJlbGVhc2VNZXNzYWdlKCkpOwotfQotCi12b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRo
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNl
cHRpb24mJiBleGNlcHRpb24pCi17Ci0gICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigp
KTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZURPTUV4Y2Vw
dGlvbihzdGF0ZSwgV1RGTW92ZShleGNlcHRpb24pKSk7Ci19Ci0KLWJvb2wgaGFzSXRlcmF0b3JN
ZXRob2QoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
YXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLQotICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAg
IENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlOwotICAgIEpTVmFsdWUg
YXBwbHlNZXRob2QgPSBvYmplY3QtPmdldE1ldGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlw
ZSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9s
Lml0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0KLSAgICByZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5k
ZWZpbmVkKCk7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1Rv
RnJhbWUoRXhlY1N0YXRlJiBzdGF0ZSwgRnJhbWUmIGZyYW1lLCBTdHJpbmcmIG1lc3NhZ2UpCi17
Ci0gICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKCZzdGF0
ZSwgJmZyYW1lLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBtZXNzYWdlID0gZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmNyb3NzRG9t
YWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1Rv
RE9NV2luZG93KEV4ZWNTdGF0ZSYgc3RhdGUsIERPTVdpbmRvdyYgZ2xvYmFsT2JqZWN0LCBTdHJp
bmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nl
c3NUb0RPTVdpbmRvdygmc3RhdGUsIGdsb2JhbE9iamVjdCwgRG9Ob3RSZXBvcnRTZWN1cml0eUVy
cm9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgbWVzc2FnZSA9IGdsb2JhbE9iamVjdC5j
cm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJh
bWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgaWYgKCFmcmFtZSkKQEAg
LTM4OCwzODEgKzQxLDYgQEAgdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiBm
cgogICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+cHJpbnRFcnJvck1lc3NhZ2Uo
bWVzc2FnZSk7CiB9CiAKLVN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQotewot
ICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LnN0cnVjdHVy
ZXMoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKLSAgICByZXR1cm4gc3RydWN0dXJlcy5nZXQoY2xhc3NJ
bmZvKS5nZXQoKTsKLX0KLQotU3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8pCi17Ci0gICAgYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFya2luZyhn
bG9iYWxPYmplY3Qudm0oKS5oZWFwLCBnbG9iYWxPYmplY3QuZ2NMb2NrKCkpOwotICAgIEpTRE9N
U3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LnN0cnVjdHVyZXMobG9ja2Vy
KTsKLSAgICBBU1NFUlQoIXN0cnVjdHVyZXMuY29udGFpbnMoY2xhc3NJbmZvKSk7Ci0gICAgcmV0
dXJuIHN0cnVjdHVyZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4oZ2xv
YmFsT2JqZWN0LnZtKCksICZnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJhdG9yLT52YWx1
ZS5nZXQoKTsKLX0KLQotc3RhdGljIGNvbnN0IGludDMyX3Qga01heEludDMyID0gMHg3ZmZmZmZm
ZjsKLXN0YXRpYyBjb25zdCBpbnQzMl90IGtNaW5JbnQzMiA9IC1rTWF4SW50MzIgLSAxOwotc3Rh
dGljIGNvbnN0IHVpbnQzMl90IGtNYXhVSW50MzIgPSAweGZmZmZmZmZmVTsKLXN0YXRpYyBjb25z
dCBpbnQ2NF90IGtKU01heEludGVnZXIgPSAweDIwMDAwMDAwMDAwMDAwTEwgLSAxOyAvLyAyXjUz
IC0gMSwgbGFyZ2VzdCBpbnRlZ2VyIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBpbiBFQ01BU2NyaXB0
LgotCi1zdGF0aWMgU3RyaW5nIHJhbmdlRXJyb3JTdHJpbmcoZG91YmxlIHZhbHVlLCBkb3VibGUg
bWluLCBkb3VibGUgbWF4KQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJWYWx1ZSAiLCBTdHJp
bmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdCh2YWx1ZSksICIgaXMgb3V0c2lkZSB0aGUgcmFu
Z2UgWyIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1pbiksICIsICIsIFN0cmlu
Zzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1heCksICJdIik7Ci19Ci0KLXN0YXRpYyBkb3Vi
bGUgZW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB4LCBkb3VibGUgbWluaW11
bSwgZG91YmxlIG1heGltdW0pCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoc3RkOjppc25hbih4
KSB8fCBzdGQ6OmlzaW5mKHgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgeCA9IHRydW5jKHgpOwotICAgIGlmICh4IDwgbWluaW11bSB8fCB4
ID4gbWF4aW11bSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5n
ZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIHJldHVybiB4OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBJ
bnRUeXBlTGltaXRzIHsKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czxp
bnQ4X3Q+IHsKLSAgICBzdGF0aWMgY29uc3QgaW50OF90IG1pblZhbHVlID0gLTEyODsKLSAgICBz
dGF0aWMgY29uc3QgaW50OF90IG1heFZhbHVlID0gMTI3OwotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBudW1iZXJPZlZhbHVlcyA9IDI1NjsgLy8gMl44Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3Ry
dWN0IEludFR5cGVMaW1pdHM8dWludDhfdD4gewotICAgIHN0YXRpYyBjb25zdCB1aW50OF90IG1h
eFZhbHVlID0gMjU1OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9
IDI1NjsgLy8gMl44Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8aW50
MTZfdD4gewotICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtaW5WYWx1ZSA9IC0zMjc2ODsKLSAgICBz
dGF0aWMgY29uc3Qgc2hvcnQgbWF4VmFsdWUgPSAzMjc2NzsKLSAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgotfTsKLQotdGVtcGxhdGUgPD4K
LXN0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQxNl90PiB7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIHNob3J0IG1heFZhbHVlID0gNjU1MzU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51
bWJlck9mVmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
Pgotc3RhdGljIGlubGluZSBUIHRvU21hbGxlckludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsK
LSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zaWduZWQ8VD46OnZhbHVl
ICYmIHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Ig
c2lnbmVkIGludGVncmFsIHR5cGVzIik7Ci0KLSAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4g
TGltaXRzVHJhaXQ7Ci0gICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEg
MzItYml0IHNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KLSAgICBpZiAodmFsdWUu
aXNJbnQzMigpKSB7Ci0gICAgICAgIGludDMyX3QgZCA9IHZhbHVlLmFzSW50MzIoKTsKLSAgICAg
ICAgaWYgKGQgPj0gTGltaXRzVHJhaXQ6Om1pblZhbHVlICYmIGQgPD0gTGltaXRzVHJhaXQ6Om1h
eFZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwotICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAg
ICAgICAgcmV0dXJuIGQgPCBMaW1pdHNUcmFpdDo6bWluVmFsdWUgPyBMaW1pdHNUcmFpdDo6bWlu
VmFsdWUgOiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgZCAlPSBM
aW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXM7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
PihkID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8gZCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZh
bHVlcyA6IGQpOwotICAgIH0KLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLQotICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgewotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUs
IHgsIExpbWl0c1RyYWl0OjptaW5WYWx1ZSwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKLSAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgIHJldHVy
biBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7Ci0gICAgfQotCi0gICAgaWYgKHN0
ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICB4ID0geCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsKLSAgICB4
ID0gZm1vZCh4LCBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMpOwotCi0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KHggPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyB4IC0gTGltaXRzVHJhaXQ6
Om51bWJlck9mVmFsdWVzIDogeCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGlj
IGlubGluZSBUIHRvU21hbGxlclVJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgVk0m
IHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZhbHVlICYmIHN0
ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdW5zaWdu
ZWQgaW50ZWdyYWwgdHlwZXMiKTsKLQotICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBMaW1p
dHNUcmFpdDsKLSAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1i
aXQgdW5zaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCi0gICAgaWYgKHZhbHVlLmlz
VUludDMyKCkpIHsKLSAgICAgICAgdWludDMyX3QgZCA9IHZhbHVlLmFzVUludDMyKCk7Ci0gICAg
ICAgIGlmIChkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPihkKTsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1
cm4gTGltaXRzVHJhaXQ6Om1heFZhbHVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIDApOwotCi0gICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAg
cmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsK
LSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAg
IHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7Ci0gICAgfQotCi0gICAg
aWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICB4ID0geCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZm1vZCh4LCBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZW
YWx1ZXMpKTsKLX0KLQotaW50OF90IHRvSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+
KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2UpOwotfQotCi11aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+
KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2UpOwotfQotCi1pbnQ4X3QgdG9JbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi11aW50OF90
IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvV2ViSURMLyNlcy1ieXRlCi1pbnQ4X3QgdG9JbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi0vLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLW9jdGV0Ci11aW50OF90IHRvVUludDgoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1
aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKTsKLX0KLQotaW50MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0
ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsK
LX0KLQotdWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUs
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19
Ci0KLWludDE2X3QgdG9JbnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi11aW50MTZfdCB0b1VJbnQx
NkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRv
U21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8j
ZXMtc2hvcnQKLWludDE2X3QgdG9JbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cu
dzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtc2hvcnQKLXVpbnQxNl90IHRvVUludDE2KEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJ
bnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmcK
LWludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAg
cmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4g
ZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBrTWluSW50MzIsIGtNYXhJbnQzMik7Ci19Ci0KLWludDMy
X3QgdG9JbnQzMkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
aWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQot
ICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjpp
c25hbih4KSA/IDAgOiBjbGFtcFRvPGludDMyX3Q+KHgpOwotfQotCi11aW50MzJfdCB0b1VJbnQz
MkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVl
LmlzVUludDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgZG91
YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgp
ID8gMCA6IGNsYW1wVG88dWludDMyX3Q+KHgpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9U
Ui9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmcKLXVpbnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdl
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBp
ZiAodmFsdWUuaXNVSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0K
LSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgMCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwg
a01heFVJbnQzMik7Ci19Ci0KLWludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
LSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBkb3VibGUg
eCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgMCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgLWtKU01heEludGVnZXIs
IGtKU01heEludGVnZXIpOwotfQotCi11aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBk
b3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgMCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga0pTTWF4
SW50ZWdlcik7Ci19Ci0KLWludDY0X3QgdG9JbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8aW50NjRfdD4o
c3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+KHgsIC1rSlNNYXhJbnRlZ2VyKSwga0pT
TWF4SW50ZWdlcikpOwotfQotCi11aW50NjRfdCB0b1VJbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAwKSwga0pTTWF4SW50
ZWdlcikpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmctbG9u
ZwotaW50NjRfdCB0b0ludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotCi0gICAgLy8gTWFwIE5hTnMg
YW5kICsvLUluZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4K
LSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbjsKLSAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7Ci0g
ICAgcmV0dXJuIG47Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5z
aWduZWQtbG9uZy1sb25nCi11aW50NjRfdCB0b1VJbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLQot
ICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1
ZXMgbW9kdWxvIDJeNjQuCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIG47Ci0gICAgZG91YmxlVG9J
bnRlZ2VyKHgsIG4pOwotICAgIHJldHVybiBuOwotfQotCi1jbGFzcyBHZXRDYWxsZXJHbG9iYWxP
YmplY3RGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9y
KCkgPSBkZWZhdWx0OwotCi0gICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFj
a1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW1faGFzU2tpcHBl
ZEZpcnN0RnJhbWUpIHsKLSAgICAgICAgICAgIG1faGFzU2tpcHBlZEZpcnN0RnJhbWUgPSB0cnVl
OwotICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoYXV0byogY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCkpCi0g
ICAgICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHZpc2l0b3ItPmNhbGxlZSgpKTsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYWxsZWUgaXMgbm90IGFuIG9iamVjdCBpZiB0aGUgY2FsbGVy
IGlzIFdlYiBBc3NlbWJseS4KLSAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyBo
ZXJlLiBXZSBjYW4gcHJvYmFibHkgZ2V0IHRoZSBnbG9iYWwgb2JqZWN0Ci0gICAgICAgICAgICAv
LyBmcm9tIHRoZSB0b3AtbW9zdCBXYXNtIEluc3RhbmNlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzIxCi0gICAgICAgICAgICBpZiAodmlzaXRvci0+Y2FsbGVl
KCktPmlzT2JqZWN0KCkpCi0gICAgICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBqc0Nhc3Q8
SlNPYmplY3QqPih2aXNpdG9yLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7Ci0gICAgfQotCi0gICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0OyB9
Ci0KLXByaXZhdGU6Ci0gICAgbXV0YWJsZSBib29sIG1faGFzU2tpcHBlZEZpcnN0RnJhbWUgeyBm
YWxzZSB9OwotICAgIG11dGFibGUgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0IHsgbnVs
bHB0ciB9OwotfTsKLQotRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coRXhlY1N0YXRlKiBleGVj
KQotewotICAgIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgaXRlcjsKLSAgICBleGVjLT5p
dGVyYXRlKGl0ZXIpOwotICAgIHJldHVybiBpdGVyLmdsb2JhbE9iamVjdCgpID8gYXNKU0RPTVdp
bmRvdyhpdGVyLmdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpIDogZmlyc3RET01XaW5kb3coZXhl
Yyk7Ci19Ci0KLURPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT53
cmFwcGVkKCk7Ci19Ci0KLURPTVdpbmRvdyYgZmlyc3RET01XaW5kb3coRXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3Qo
KSktPndyYXBwZWQoKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGNhbkFjY2Vzc0RvY3VtZW50
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRG9jdW1lbnQqIHRhcmdldERvY3VtZW50LCBTZWN1cml0
eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCiB7CiAgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CkBAIC03OTAsMjQ1ICs2OCwzNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FuQWNjZXNz
RG9jdW1lbnQoSlNDCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEJpbmRpbmdTZWN1cml0
eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERP
TVdpbmRvdyYgdGFyZ2V0LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24p
Ci17Ci0gICAgcmV0dXJuIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJnZXQuZG9jdW1lbnQo
KSwgcmVwb3J0aW5nT3B0aW9uKTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEZyYW1lKiB0YXJnZXQsIFNl
Y3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKLXsKLSAgICByZXR1cm4gdGFy
Z2V0ICYmIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJnZXQtPmRvY3VtZW50KCksIHJlcG9y
dGluZ09wdGlvbik7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vz
c1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIE5vZGUqIHRhcmdldCkKLXsKLSAgICByZXR1
cm4gIXRhcmdldCB8fCBjYW5BY2Nlc3NEb2N1bWVudCgmc3RhdGUsICZ0YXJnZXQtPmRvY3VtZW50
KCksIExvZ1NlY3VyaXR5RXJyb3IpOwotfQotICAgIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIHRo
cm93VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKLX0KLQotc3RhdGljIHZvaWQgYXBw
ZW5kQXJndW1lbnRNdXN0QmUoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgdW5zaWduZWQgYXJndW1l
bnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJBcmd1bWVudCAiKTsKLSAgICBidWlsZGVyLmFwcGVuZE51bWJlcihhcmd1bWVudEluZGV4
ICsgMSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgKCciKTsKLSAgICBidWlsZGVyLmFw
cGVuZChhcmd1bWVudE5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJykgdG8gIik7
Ci0gICAgaWYgKCFmdW5jdGlvbk5hbWUpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJ0aGUgIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5hbWUpOwotICAgICAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBjb25zdHJ1Y3RvciIpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5hbWUpOwotICAgICAgICBidWlsZGVyLmFw
cGVuZCgnLicpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChmdW5jdGlvbk5hbWUpOwotICAgIH0K
LSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBtdXN0IGJlICIpOwotfQotCi1KU0M6OkVuY29k
ZWRKU1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUp
Ci17Ci0gICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0
ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAg
Y29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVs
OjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0
eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNlTmFtZSwgIiBvYmpl
Y3QuIikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0g
ICAgCi12b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUp
Ci17Ci0gICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0
ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAg
Y29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVs
OjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRlbXB0IHRvIHNldCBwcm9wZXJ0eSAn
IiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50ZXJmYWNlTmFtZSwgIiBvYmplY3Qu
IikpOwotfQotCi12b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2Vw
dGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSKSk7Ci19Ci0KLXZvaWQgdGhyb3dOb3RTdXBw
b3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUs
IGNvbnN0IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7
Ci0gICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7Ci0gICAgdGhyb3dFeGNlcHRpb24o
JnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9F
UlIsICZtZXNzYWdlU3RyaW5nKSk7Ci19Ci0KLXZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIq
IG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgU3RyaW5n
IG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5WQUxJRF9TVEFURV9FUlIsICZtZXNzYWdl
U3RyaW5nKSk7Ci19Ci0KLXZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewot
ICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNFQ1VSSVRZX0VSUiwgbWVzc2Fn
ZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25l
ZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFy
KiBleHBlY3RlZFZhbHVlcykKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBw
ZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBm
dW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJvbmUgb2Y6ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVmFsdWVzKTsK
LSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3Ry
aW5nKCkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVGdW5j
dGlvbkVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
dW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwotICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFy
Z3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgaW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsK
LSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImEgZnVuY3Rpb24iKTsKLSAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOwotfQotCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBj
b25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCi17
Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1
aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1l
LCBmdW5jdGlvbk5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYW4gaW5zdGFuY2Ug
b2YgIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRUeXBlKTsKLSAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOwotfQotCi12
b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBBcnJheSBlbGVtZW50IHR5cGUiKSk7Ci19Ci0KLXZvaWQg
dGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRy
aWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCi17Ci0gICAgdGhyb3dUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBh
dHRyaWJ1dGVOYW1lLCAiIGF0dHJpYnV0ZSBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICIsIGV4cGVj
dGVkVHlwZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJU
eXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBj
b25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3Qg
Y2hhciogZXhwZWN0ZWRUeXBlKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIk1lbWJlciAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChkaWN0
aW9uYXJ5TmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoJy4nKTsKLSAgICBidWlsZGVyLmFwcGVu
ZChtZW1iZXJOYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBpcyByZXF1aXJlZCBh
bmQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChleHBlY3Rl
ZFR5cGUpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxk
ZXIudG9TdHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3Rv
clNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSkK
LXsKLSAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZVJlZmVyZW5j
ZUVycm9yKCZzdGF0ZSwgbWFrZVN0cmluZyhpbnRlcmZhY2VOYW1lLCAiIGNvbnN0cnVjdG9yIGFz
c29jaWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMgdW5hdmFpbGFibGUiKSkpOwotfQotCi12b2lk
IHRocm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKQotewotICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlM
aXRlcmFsKCJWYWx1ZSBpcyBub3QgYSBzZXF1ZW5jZSIpKTsKLX0KLQotdm9pZCB0aHJvd05vbkZp
bml0ZVR5cGVFcnJvcihFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQot
ewotICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIHBy
b3ZpZGVkIHZhbHVlIGlzIG5vbi1maW5pdGUiKSk7Ci19Ci0KLVN0cmluZyBtYWtlR2V0dGVyVHlw
ZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRy
aWJ1dGVOYW1lKQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFt
ZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGdldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3Rh
bmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJv
d0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUpCi17Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgbWFrZUdl
dHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgYXR0cmlidXRlTmFtZSkpOwotfQot
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0
aFR5cGVFcnJvcihzdGF0ZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFt
ZSwgYXR0cmlidXRlTmFtZSkpOwotfQotCi1ib29sIHRocm93U2V0dGVyVHlwZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKK2Jvb2wgQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoRXhlY1N0YXRlJiBzdGF0ZSwgRnJhbWUmIGZy
YW1lLCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
LCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAi
IHNldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1l
KSk7CisgICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKCZz
dGF0ZSwgJmZyYW1lLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBtZXNzYWdlID0gZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmNyb3Nz
RG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpKTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVN0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQotewotICAgIHJl
dHVybiBtYWtlU3RyaW5nKCJDYW4gb25seSBjYWxsICIsIGludGVyZmFjZU5hbWUsICcuJywgZnVu
Y3Rpb25OYW1lLCAiIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKLX0KLQotRW5j
b2RlZEpTVmFsdWUgdGhyb3dUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lKQotewotICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUp
KTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJy
b3IoRGVmZXJyZWRQcm9taXNlJiBwcm9taXNlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBtZXRob2ROYW1lKQotewotICAgIHByb21pc2UucmVqZWN0KFR5cGVFcnJvciwg
bWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1KU0M6OkVuY29k
ZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUp
Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUs
IG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7Ci19
Ci0KLXZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0
aW9uKQotewotICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7Ci0gICAgSlNDOjpDYWxsVHlwZSBj
YWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoJmZ1bmN0aW9uLCBjYWxsRGF0YSk7Ci0gICAgQVNT
RVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKLQotICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgYXJndW1lbnRzOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5h
cmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZChzdGF0ZS51bmNo
ZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgSlNDOjpjYWxsKCZzdGF0ZSwgJmZ1bmN0aW9uLCBjYWxs
VHlwZSwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVudHMpOwotfQotCi12b2lkIERPTUNv
bnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiBjZWxs
LCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGF1dG8qIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QqPihjZWxsKTsKLSAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2luaXRpYWxpemVGdW5jdGlvbik7Ci19Ci0KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7Ci0gICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ29u
c3RydWN0b3IgcmVxdWlyZXMgJ25ldycgb3BlcmF0b3IiKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSk7Ci19Ci0KLUNhbGxUeXBlIERPTUNvbnN0cnVjdG9yT2JqZWN0Ojpn
ZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCi17Ci0gICAgY2FsbERhdGEu
bmF0aXZlLmZ1bmN0aW9uID0gY2FsbFRocm93VHlwZUVycm9yOwotICAgIHJldHVybiBDYWxsVHlw
ZTo6SG9zdDsKLX0KLQotdm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91
bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEV4ZWNTdGF0ZSYgc3RhdGUsIERPTVdpbmRvdyYgZ2xv
YmFsT2JqZWN0LCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRp
b24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0
aW9uKCZzdGF0ZSwgU1lOVEFYX0VSUikpOworICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3Vs
ZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRlLCBnbG9iYWxPYmplY3QsIERvTm90UmVwb3J0
U2VjdXJpdHlFcnJvcikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIG1lc3NhZ2UgPSBnbG9i
YWxPYmplY3QuY3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZz
dGF0ZSkpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCB0aHJvd0RhdGFDbG9uZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK2Jvb2wgQmlu
ZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgRE9NV2luZG93JiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9y
dGluZ09wdGlvbikKIHsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBEQVRB
X0NMT05FX0VSUikpOworICAgIHJldHVybiBjYW5BY2Nlc3NEb2N1bWVudChzdGF0ZSwgdGFyZ2V0
LmRvY3VtZW50KCksIHJlcG9ydGluZ09wdGlvbik7CiB9CiAKLXZvaWQgdGhyb3dJbmRleFNpemVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCitib29s
IEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgRnJhbWUqIHRhcmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5n
T3B0aW9uKQogewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhj
ZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElOREVYX1NJ
WkVfRVJSKSk7CisgICAgcmV0dXJuIHRhcmdldCAmJiBjYW5BY2Nlc3NEb2N1bWVudChzdGF0ZSwg
dGFyZ2V0LT5kb2N1bWVudCgpLCByZXBvcnRpbmdPcHRpb24pOwogfQogCi12b2lkIHRocm93VHlw
ZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKQorYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgTm9kZSogdGFyZ2V0KQogewotICAgIEFTU0VSVCghc2NvcGUuZXhj
ZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4
Y2VwdGlvbigmc3RhdGUsIFRZUEVfTUlTTUFUQ0hfRVJSKSk7CisgICAgcmV0dXJuICF0YXJnZXQg
fHwgY2FuQWNjZXNzRG9jdW1lbnQoJnN0YXRlLCAmdGFyZ2V0LT5kb2N1bWVudCgpLCBMb2dTZWN1
cml0eUVycm9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nU2VjdXJpdHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5oCShyZXZpc2lv
biAyMTEzNTMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5o
OjIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3Vy
aXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MjUgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmln
aHQgKEMpIDIwMDMtMjAwNiwgMjAwOC0yMDA5LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2Ft
QHdlYmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxMiBFcmljc3NvbiBBQi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgTWljaGFlbCBQcnVldHQgPG1p
Y2hhZWxANjhrLm9yZz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCisjaW5jbHVkZSAiSlNET01HbG9iYWxP
YmplY3QuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJKU0R5bmFtaWNE
b3duY2FzdC5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5oIgorI2luY2x1ZGUgIlNjcmlw
dFdyYXBwYWJsZUlubGluZXMuaCIKKyNpbmNsdWRlICJXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4K
KyNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvV2Vh
ay5oPgorI2luY2x1ZGUgPGhlYXAvV2Vha0lubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0F1
eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8cnVudGltZS9K
U0FycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDZWxsSW5s
aW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGltZS9Mb29rdXAuaD4KKyNp
bmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1dy
aXRlQmFycmllci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBmaWxlIGEgbG90IGVhc2llciB0
byByZWFkIGJ5IHB1dHRpbmcgYWxsIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBhdCB0aGUgdG9wLAor
Ly8gYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zIGJlbG93LCBldmVuIGZvciB0ZW1wbGF0ZSBhbmQg
aW5saW5lIGZ1bmN0aW9ucy4KKworbmFtZXNwYWNlIEpTQyB7CitjbGFzcyBKU0Z1bmN0aW9uOwor
fQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZFNjcmlwdDsKK2NsYXNzIERl
ZmVycmVkUHJvbWlzZTsKK2NsYXNzIERPTVdpbmRvdzsKK2NsYXNzIEZyYW1lOworY2xhc3MgVVJM
OworY2xhc3MgTm9kZTsKKworc3RydWN0IEV4Y2VwdGlvbkRldGFpbHMgeworICAgIFN0cmluZyBt
ZXNzYWdlOworICAgIGludCBsaW5lTnVtYmVyIHsgMCB9OworICAgIGludCBjb2x1bW5OdW1iZXIg
eyAwIH07CisgICAgU3RyaW5nIHNvdXJjZVVSTDsKK307CisKKy8vIEJhc2UgY2xhc3MgZm9yIGFs
bCBjb25zdHJ1Y3RvciBvYmplY3RzIGluIHRoZSBKU0MgYmluZGluZ3MuCitjbGFzcyBET01Db25z
dHJ1Y3Rvck9iamVjdCA6IHB1YmxpYyBKU0RPTU9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBKU0RPTU9iamVjdCBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2Ug
fCBKU0M6OkltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UgfCBKU0M6OlR5cGVPZlNob3VsZENh
bGxHZXRDYWxsRGF0YTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNWYWx1ZSk7CisKK3Byb3Rl
Y3RlZDoKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xv
YmFsT2JqZWN0Jik7CisKKyAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVj
dCopOworICAgIHN0YXRpYyBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIEpTQzo6
Q2FsbERhdGEmKTsKK307CisKK2NsYXNzIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0IDog
cHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIERPTUNv
bnN0cnVjdG9yT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAgICBET01Db25zdHJ1Y3RvckpT
QnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3Im
KTsKKworICAgIEpTQzo6SlNGdW5jdGlvbiogaW5pdGlhbGl6ZUZ1bmN0aW9uKCk7CisgICAgdm9p
ZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYsIEpTQzo6SlNGdW5jdGlvbiYpOworCitw
cml2YXRlOgorICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNGdW5jdGlvbj4gbV9pbml0aWFs
aXplRnVuY3Rpb247Cit9OworCitET01XaW5kb3cmIGNhbGxlckRPTVdpbmRvdyhKU0M6OkV4ZWNT
dGF0ZSopOworRE9NV2luZG93JiBhY3RpdmVET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKK0RP
TVdpbmRvdyYgZmlyc3RET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKKworV0VCQ09SRV9FWFBP
UlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9y
KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSk7CisKK3ZvaWQgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOworV0VCQ09S
RV9FWFBPUlQgYm9vbCB0aHJvd1NldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJp
YnV0ZU5hbWUpOworCit2b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93RGF0YUNsb25lRXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dET01TeW50YXhFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOyAvLyBOb3QgdGhlIHNhbWUgYXMgYSBK
YXZhU2NyaXB0IHN5bnRheCBlcnJvci4KK3ZvaWQgdGhyb3dJbmRleFNpemVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVzc2FnZSk7
CitXRUJDT1JFX0VYUE9SVCB2b2lkIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpOwordm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworV0VCQ09SRV9FWFBPUlQgdm9pZCB0aHJv
d1NlcXVlbmNlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2
b2lkIHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmKTsKKworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50
TXVzdEJlRW51bUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWdu
ZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBm
dW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hh
ciogZXhwZWN0ZWRWYWx1ZXMpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVz
dEJlRnVuY3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2ln
bmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciog
ZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOworV0VCQ09S
RV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29u
c3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK1dF
QkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lbWJl
ck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5
cGUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9u
Q29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKTsKKworU3RyaW5nIG1ha2VHZXR0ZXJUeXBlRXJy
b3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0
ZU5hbWUpOworU3RyaW5nIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKKworV0VCQ09SRV9FWFBPUlQg
SlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJv
d1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOworCitXRUJDT1JF
X0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogYXR0cmlidXRlTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJl
amVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmLCBjb25zdCBjaGFy
KiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKTsKK1dFQkNPUkVfRVhQ
T1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3Bl
cmF0aW9uTmFtZSk7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJlKiBnZXRDYWNoZWRE
T01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwor
V0VCQ09SRV9FWFBPUlQgSlNDOjpTdHJ1Y3R1cmUqIGNhY2hlRE9NU3RydWN0dXJlKEpTRE9NR2xv
YmFsT2JqZWN0JiwgSlNDOjpTdHJ1Y3R1cmUqLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6U3RydWN0dXJlKiBnZXRET01TdHJ1
Y3R1cmUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBX
cmFwcGVyQ2xhc3M+IEpTQzo6U3RydWN0dXJlKiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlKEpT
Qzo6RXhlY1N0YXRlKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNP
YmplY3QqIGdldERPTVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwor
Cit2b2lkIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgSlNDOjpKU0Z1bmN0aW9uJik7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEpTQ2xhc3M+IEpTQzo6RW5jb2RlZEpTVmFsdWUgY3JlYXRlSlNCdWlsdGluKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU0Z1bmN0aW9uJiBpbml0aWFsaXplRnVuY3Rpb24sIEpTRE9N
R2xvYmFsT2JqZWN0Jik7CisKK0pTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9N
V3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciopOwordm9pZCogd3JhcHBlcktleShKU0M6
OkFycmF5QnVmZmVyKik7CisKK0pTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYsIHZvaWQqKTsKK0pTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFw
cGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSopOworSlNDOjpKU0FycmF5QnVm
ZmVyKiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlC
dWZmZXIqKTsKKworYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYs
IHZvaWQqLCBKU0RPTU9iamVjdCosIEpTQzo6V2Vha0hhbmRsZU93bmVyKik7Citib29sIHNldElu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgU2NyaXB0V3JhcHBhYmxlKiwgSlNE
T01PYmplY3QqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpOwor
Ym9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlC
dWZmZXIqLCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVy
KiB3cmFwcGVyT3duZXIpOworCitib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqKTsKK2Jvb2wgY2xlYXJJbmxpbmVDYWNoZWRX
cmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9NT2JqZWN0KiB3
cmFwcGVyKTsKK2Jvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYs
IEpTQzo6QXJyYXlCdWZmZXIqLCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmLCBET01DbGFzcyYpOwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+
IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYg
d29ybGQsIFJlZjxET01DbGFzcz4mIG9iamVjdCkgeyByZXR1cm4gZ2V0Q2FjaGVkV3JhcHBlcih3
b3JsZCwgb2JqZWN0LmdldCgpKTsgfQordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVu
YW1lIFdyYXBwZXJDbGFzcz4gdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgRE9N
Q2xhc3MqLCBXcmFwcGVyQ2xhc3MqKTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBl
bmFtZSBXcmFwcGVyQ2xhc3M+IHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwg
RE9NQ2xhc3MqLCBXcmFwcGVyQ2xhc3MqKTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0
eXBlbmFtZSBUPiBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4m
JikgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6
dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46Oldy
YXBwZXJDbGFzcyo+Ojp0eXBlOwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1l
IFQ+IGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUPiYmKSAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUs
IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJD
bGFzcyo+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gSlNDOjpKU1ZhbHVl
IHdyYXAoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIERPTUNsYXNzJik7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IEpTQ2xhc3MmIGNhc3RUaGlzVmFsdWUoSlNDOjpF
eGVjU3RhdGUmKTsKKwordm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcm
KTsKKworY29uc3QgSlNDOjpIYXNoVGFibGUmIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoSlND
OjpWTSYsIGNvbnN0IEpTQzo6SGFzaFRhYmxlJiBzdGF0aWNUYWJsZSk7CisKK1N0cmluZyByZXRy
aWV2ZUVycm9yTWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUg
ZXhjZXB0aW9uLCBKU0M6OkNhdGNoU2NvcGUmKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0
RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2FjaGVk
U2NyaXB0KiA9IG51bGxwdHIpOworV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiosIENhY2hlZFNjcmlwdCogPSBudWxscHRy
LCBFeGNlcHRpb25EZXRhaWxzKiA9IG51bGxwdHIpOwordm9pZCByZXBvcnRDdXJyZW50RXhjZXB0
aW9uKEpTQzo6RXhlY1N0YXRlKik7CisKK0pTQzo6SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb24mJik7CitKU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgRXhjZXB0aW9uQ29kZSwgY29uc3QgU3RyaW5nJik7CisK
Ky8vIENvbnZlcnQgYSBET00gaW1wbGVtZW50YXRpb24gZXhjZXB0aW9uIGludG8gYSBKYXZhU2Ny
aXB0IGV4Y2VwdGlvbiBpbiB0aGUgZXhlY3V0aW9uIHN0YXRlLgordm9pZCBwcm9wYWdhdGVFeGNl
cHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb24mJik7CitX
RUJDT1JFX0VYUE9SVCB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOworCitKU0M6OkpTVmFsdWUganNT
dHJpbmcoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBVUkwmKTsgLy8gZW1wdHkgaWYgdGhlIFVSTCBp
cyBudWxsCisKK0pTQzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgU3RyaW5nJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgc3RyaW5nIGlzIG51bGwKK0pT
Qzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgVVJM
Jik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgVVJMIGlzIG51bGwKKworLy8gU2VlIEphdmFTY3JpcHRD
b3JlIGZvciBleHBsYW5hdGlvbjogU2hvdWxkIGJlIHVzZWQgZm9yIGFueSBzdHJpbmcgdGhhdCBp
cyBhbHJlYWR5IG93bmVkIGJ5IGFub3RoZXIKKy8vIG9iamVjdCwgdG8gbGV0IHRoZSBlbmdpbmUg
a25vdyB0aGF0IGNvbGxlY3RpbmcgdGhlIEpTU3RyaW5nIHdyYXBwZXIgaXMgdW5saWtlbHkgdG8g
c2F2ZSBtZW1vcnkuCitKU0M6OkpTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChKU0M6OkV4ZWNT
dGF0ZSosIGNvbnN0IFN0cmluZyYpOworCitTdHJpbmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlND
OjpQcm9wZXJ0eU5hbWUpOworCitBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJp
bmcoSlNDOjpQcm9wZXJ0eU5hbWUpOworCitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmll
clRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwor
V0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9CeXRlU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJp
bmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK1dFQkNPUkVfRVhQ
T1JUIFN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKKworaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWYWx1ZSwgSlNDOjpFeGVjU3Rh
dGUqLCBib29sJiBva2F5KTsKKworLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY29udmVydCB2
YWx1ZXMgdG8gaW50ZWdlcnMgYXMgcGVyIHRoZSBXZWJJREwgc3BlY2lmaWNhdGlvbi4KKy8vIFRo
ZSBjb252ZXJzaW9uIGZhaWxzIGlmIHRoZSB2YWx1ZSBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEg
bnVtYmVyIG9yLCBpZiBFbmZvcmNlUmFuZ2UgaXMgc3BlY2lmaWVkLAorLy8gdGhlIHZhbHVlIGlz
IG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSBkZXN0aW5hdGlvbiBpbnRlZ2VyIHR5cGUuCisKK1dF
QkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDE2X3Qg
dG9JbnQxNkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJD
T1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJFbmZvcmNlUmFu
Z2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDMy
X3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
V0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IHRvVUludDY0RW5mb3Jj
ZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworV0VCQ09SRV9FWFBPUlQg
aW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNP
UkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNkNsYW1wKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2Q2xhbXAo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0
b0ludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBP
UlQgdWludDMyX3QgdG9VSW50MzJDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
CitXRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjRDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NENsYW1wKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50
OChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50OF90
IHRvVUludDgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQg
aW50MTZfdCB0b0ludDE2KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVf
RVhQT1JUIHVpbnQxNl90IHRvVUludDE2KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
K1dFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7CisKK0pTQzo6SlNWYWx1ZSBqc0RhdGUoSlNDOjpFeGVjU3RhdGUqLCBk
b3VibGUgdmFsdWUpOworCisvLyBOYU4gaWYgdGhlIHZhbHVlIGNhbid0IGJlIGNvbnZlcnRlZCB0
byBhIGRhdGUuCitkb3VibGUgdmFsdWVUb0RhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFs
dWUpOworCisvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNlcXVlbmNl
IHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KK0pTQzo6SlNPYmpl
Y3QqIHRvSlNTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgdW5zaWduZWQm
IGxlbmd0aCk7CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyJik7CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyYpOwor
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpT
Qzo6QXJyYXlCdWZmZXIqKTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Kik7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgUmVmPFQ+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZlB0cjxUPiYmKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBjb25zdCBWZWN0b3I8VD4mKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25z
dCBWZWN0b3I8UmVmUHRyPFQ+PiYpOworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5hbWUmKTsKKworSlNDOjpK
U1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0Jiwg
SlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTSXRl
cmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIGNvbnN0IFQmKTsKK0pT
Qzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUmKTsKKworUmVmUHRyPEpT
Qzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hh
cmVkSW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50MTZB
cnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
CitSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MzJBcnJheShKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvUG9zc2libHlT
aGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWlu
dDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hh
cmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50
MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOworUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFy
cmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0
b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworCitS
ZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5zaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJ
bnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQxNkFycmF5
PiB0b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxK
U0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOworUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9VbnNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNo
YXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpT
Qzo6VWludDE2QXJyYXk+IHRvVW5zaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1Zh
bHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hhcmVkVWludDMyQXJyYXkoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvVW5zaGFy
ZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpGbG9h
dDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEpTVHlwZT4gVmVjdG9yPFJlZjxUPj4g
dG9SZWZOYXRpdmVBcnJheShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JF
X0VYUE9SVCBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKKworZW51bSBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiB7IERvTm90UmVwb3J0U2VjdXJp
dHlFcnJvciwgTG9nU2VjdXJpdHlFcnJvciwgVGhyb3dTZWN1cml0eUVycm9yIH07CituYW1lc3Bh
Y2UgQmluZGluZ1NlY3VyaXR5IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBjaGVja1Nl
Y3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIFQmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIFQqKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNlcHRpb25PcjxUKj4gY2hlY2tTZWN1cml0eUZvck5vZGUo
SlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb25PcjxUKj4mJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRl
JiwgRXhjZXB0aW9uT3I8VCY+JiYpOworICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdp
bmRvdyhKU0M6OkV4ZWNTdGF0ZSosIERPTVdpbmRvdyYsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9u
ID0gTG9nU2VjdXJpdHlFcnJvcik7CisgICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2lu
ZG93KEpTQzo6RXhlY1N0YXRlJiwgRE9NV2luZG93JiwgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICBi
b29sIHNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSosIEZyYW1lKiwgU2Vj
dXJpdHlSZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1cml0eUVycm9yKTsKKyAgICBib29sIHNob3Vs
ZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSYsIEZyYW1lJiwgU3RyaW5nJiBtZXNz
YWdlKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKEpTQzo6RXhlY1N0YXRlJiwg
Tm9kZSopOworfTsKKwordm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKTsKKworU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6
UHJvcGVydHlOYW1lKTsKK0F0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhK
U0M6OlByb3BlcnR5TmFtZSk7CisKK3RlbXBsYXRlPEpTQzo6TmF0aXZlRnVuY3Rpb24sIGludCBs
ZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVy
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUp
OworCisKK2VudW0gY2xhc3MgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3IgeyBUaHJvdywgUmV0dXJu
RWFybHksIFJlamVjdFByb21pc2UsIEFzc2VydCB9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0Ns
YXNzPgorc3RydWN0IEJpbmRpbmdDYWxsZXIgeworICAgIHVzaW5nIEF0dHJpYnV0ZVNldHRlckZ1
bmN0aW9uID0gYm9vbChKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OkpTVmFsdWUsIEpT
Qzo6VGhyb3dTY29wZSYpOworICAgIHVzaW5nIEF0dHJpYnV0ZUdldHRlckZ1bmN0aW9uID0gSlND
OjpKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgSlNDbGFzcyYsIEpTQzo6VGhyb3dTY29wZSYpOwor
ICAgIHVzaW5nIE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICB1c2luZyBQ
cm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6
RXhlY1N0YXRlKiwgSlNDbGFzcyosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dT
Y29wZSYpOworCisgICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RGb3JBdHRyaWJ1dGUoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKyAgICBzdGF0aWMgSlNDbGFzcyogY2FzdEZv
ck9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYpOworCisgICAgdGVtcGxhdGU8UHJvbWlzZU9wZXJh
dGlvbkNhbGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNhbGxlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmVqZWN0UHJvbWlzZT4K
KyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxsUHJvbWlzZU9wZXJhdGlvbihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgY29uc3Qg
Y2hhciogb3BlcmF0aW9uTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7CisgICAg
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwor
ICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3RhdGUpOworICAg
ICAgICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCAm
JiBVTkxJS0VMWSghdGhpc09iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlz
ZVdpdGhUaGlzVHlwZUVycm9yKHByb21pc2UuZ2V0KCksIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NO
YW1lLCBvcGVyYXRpb25OYW1lKTsKKyAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QpOworICAgICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIEpTQ2xhc3M6OmluZm8oKSk7
CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJh
dGVkIGNvZGUgdG8gdXNlIHJlZmVyZW5jZXMgZm9yIHN0YXRlIGFuZCB0aGlzT2JqZWN0LgorICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uQ2FsbGVyKHN0YXRlLCB0aGlzT2JqZWN0LCBXVEZNb3ZlKHBy
b21pc2UpLCB0aHJvd1Njb3BlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxPcGVyYXRpb25DYWxs
ZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3Vs
ZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgorICAgIHN0YXRpYyBKU0M6
OkVuY29kZWRKU1ZhbHVlIGNhbGxPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBjb25z
dCBjaGFyKiBvcGVyYXRpb25OYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlKTsKKyAg
ICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7
CisgICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yT3BlcmF0aW9uKCpzdGF0ZSk7Cisg
ICAgICAgIGlmIChzaG91bGRUaHJvdyAhPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0
ICYmIFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93
ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygp
LT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOworICAgICAgICAgICAgLy8gRm9yIGN1c3RvbSBw
cm9taXNlLXJldHVybmluZyBvcGVyYXRpb25zCisgICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJv
bWlzZVdpdGhUaGlzVHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUs
IG9wZXJhdGlvbk5hbWUpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsK
KyAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjpp
bmZvKCkpOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5n
IGdlbmVyYXRlZCBjb2RlIHRvIHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVj
dC4KKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhy
b3dTY29wZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8QXR0cmlidXRlU2V0dGVyRnVuY3Rpb24g
c2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0aWMgYm9vbCBzZXRBdHRyaWJ1dGUoSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCisgICAg
eworICAgICAgICBBU1NFUlQoc3RhdGUpOworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byogdGhpc09iamVjdCA9
IGNhc3RGb3JBdHRyaWJ1dGUoKnN0YXRlLCB0aGlzVmFsdWUpOworICAgICAgICBpZiAoVU5MSUtF
TFkoIXRoaXNPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIChzaG91bGRUaHJvdyA9PSBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpID8gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSkg
OiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHNldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCBKU0M6
OkpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0aHJvd1Njb3BlKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTxBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiBnZXR0ZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93Pgor
ICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlKTsKKyAgICAgICAgYXV0byB0aHJv
d1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBjYXN0Rm9yQXR0cmlidXRlKCpzdGF0ZSwgdGhpc1ZhbHVlKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgeworICAgICAgICAgICAgaWYgKHNob3VsZFRo
cm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjpp
bmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSk7CisgICAgICAgICAgICBpZiAoc2hvdWxk
VGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2UpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwg
SlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOworICAgICAgICAgICAg
cmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNVbmRlZmluZWQoKSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKGdldHRlcigqc3RhdGUsICp0
aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7CisgICAgfQorfTsKKworLy8gRXhjZXB0aW9uT3IgaGFu
ZGxpbmcuCit2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6
VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlND
OjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpOworCisvLyBJ
bmxpbmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0ZSBkZWZpbml0aW9ucy4KKworaW5saW5lIEpTQzo6
U3RydWN0dXJlKiBET01Db25zdHJ1Y3Rvck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90
b3R5cGUpCit7CisgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworfQorCitpbmxpbmUgRE9NQ29uc3RydWN0b3JPYmplY3Q6OkRPTUNv
bnN0cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCisgICAgOiBKU0RPTU9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9i
amVjdCkKK3sKK30KKworaW5saW5lIFN0cmluZyBET01Db25zdHJ1Y3Rvck9iamVjdDo6Y2xhc3NO
YW1lKGNvbnN0IEpTT2JqZWN0KikKK3sKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJGdW5jdGlv
biIpOworfQorCitpbmxpbmUgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OkRPTUNvbnN0
cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3sKK30KKworaW5saW5lIEpTQzo6SlNGdW5jdGlvbiogRE9N
Q29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OmluaXRpYWxpemVGdW5jdGlvbigpCit7CisgICAg
cmV0dXJuIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLmdldCgpOworfQorCitpbmxpbmUgdm9pZCBET01D
b25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6c2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQoreworICAgIG1faW5pdGlhbGl6ZUZ1bmN0
aW9uLnNldCh2bSwgdGhpcywgJmZ1bmN0aW9uKTsKK30KKworaW5saW5lIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiBl
eGVjKQoreworICAgIC8vIEZJWE1FOiBDYWxsZXJzIHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJl
IHVzaW5nIHRoZSBnbG9iYWwgb2JqZWN0CisgICAgLy8gZnJvbSB3aGljaCB0aGUgb2JqZWN0IGlz
IGJlaW5nIGNyZWF0ZWQsIGluc3RlYWQgb2YgYXNzdW1pbmcgdGhlIGxleGljYWwgb25lLgorICAg
IC8vIGUuZy4gc3ViZnJhbWUuZG9jdW1lbnQuYm9keSBzaG91bGQgdXNlIHRoZSBzdWJmcmFtZSdz
IGdsb2JhbCBvYmplY3QsIG5vdCB0aGUgbGV4aWNhbCBvbmUuCisgICAgcmV0dXJuIEpTQzo6anND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUq
IGdldERPTVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9i
amVjdCkKK3sKKyAgICBpZiAoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldENhY2hlZERP
TVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFzczo6aW5mbygpKSkKKyAgICAgICAg
cmV0dXJuIHN0cnVjdHVyZTsKKyAgICByZXR1cm4gY2FjaGVET01TdHJ1Y3R1cmUoZ2xvYmFsT2Jq
ZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgV3Jh
cHBlckNsYXNzOjpjcmVhdGVQcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpKSwgV3JhcHBlckNs
YXNzOjppbmZvKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGlu
ZSBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBpcyB3cm9uZy4gSXQgdXNl
cyB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdCBmb3IgY3JlYXRpbmcgdGhlIHByb3RvdHlwZSBzdHJ1
Y3R1cmUuCisgICAgcmV0dXJuIGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMtPnZt
KCksICpkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0RE9N
UHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTQzo6SlNPYmplY3QqPihhc09iamVjdChnZXRE
T01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPih2bSwgKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KSktPnN0b3JlZFByb3RvdHlwZSgpKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVp
bHRpbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1
bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIEpTQzo6SlNP
YmplY3QqIG9iamVjdCA9IEpTQ2xhc3M6OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNDbGFzcz4o
Z2xvYmFsT2JqZWN0LnZtKCksIGdsb2JhbE9iamVjdCksICZnbG9iYWxPYmplY3QpOworICAgIGNh
bGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKHN0YXRlLCAqb2JqZWN0LCBpbml0aWFsaXpl
RnVuY3Rpb24pOworICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShvYmplY3QpOworfQor
CitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29y
bGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKj4od29ybGQudm0oKS5tX3R5cGVkQXJyYXlDb250
cm9sbGVyLmdldCgpKS0+d3JhcHBlck93bmVyKCk7Cit9CisKK2lubGluZSB2b2lkKiB3cmFwcGVy
S2V5KEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCkKK3sKKyAgICByZXR1cm4gZG9tT2JqZWN0
OworfQorCitpbmxpbmUgSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkJiwgdm9pZCopIHsgcmV0dXJuIG51bGxwdHI7IH0KK2lubGluZSBib29sIHNldElu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0Kiwg
SlNDOjpXZWFrSGFuZGxlT3duZXIqKSB7IHJldHVybiBmYWxzZTsgfQoraW5saW5lIGJvb2wgY2xl
YXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVj
dCopIHsgcmV0dXJuIGZhbHNlOyB9CisKK2lubGluZSBKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9i
amVjdCkKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIHJldHVybiBkb21PYmplY3QtPndyYXBwZXIoKTsKK30KKworaW5saW5lIEpTQzo6
SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKCF3b3JsZC5pc05vcm1h
bCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gYnVmZmVyLT5tX3dyYXBw
ZXIuZ2V0KCk7Cit9CisKK2lubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0
KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKQoreworICAgIGlm
ICghd29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvbU9iamVj
dC0+c2V0V3JhcHBlcih3cmFwcGVyLCB3cmFwcGVyT3duZXIsICZ3b3JsZCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2lubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlC
dWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpCit7Cisg
ICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZG9t
T2JqZWN0LT5tX3dyYXBwZXIgPSBKU0M6OldlYWs8SlNDOjpKU0FycmF5QnVmZmVyPih3cmFwcGVy
LCB3cmFwcGVyT3duZXIsICZ3b3JsZCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBi
b29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBTY3Jp
cHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01PYmplY3QqIHdyYXBwZXIpCit7CisgICAgaWYg
KCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZG9tT2JqZWN0
LT5jbGVhcldyYXBwZXIod3JhcHBlcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBi
b29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6
OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlcikKK3sK
KyAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB3
ZWFrQ2xlYXIoZG9tT2JqZWN0LT5tX3dyYXBwZXIsIHdyYXBwZXIpOworICAgIHJldHVybiB0cnVl
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3Qq
IGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MmIGRvbU9i
amVjdCkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIo
d29ybGQsICZkb21PYmplY3QpKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICByZXR1cm4g
d29ybGQubV93cmFwcGVycy5nZXQod3JhcHBlcktleSgmZG9tT2JqZWN0KSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lk
IGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0
LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCit7CisgICAgSlNDOjpXZWFrSGFuZGxlT3duZXIqIG93
bmVyID0gd3JhcHBlck93bmVyKHdvcmxkLCBkb21PYmplY3QpOworICAgIGlmIChzZXRJbmxpbmVD
YWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBwZXIsIG93bmVyKSkKKyAgICAgICAg
cmV0dXJuOworICAgIHdlYWtBZGQod29ybGQubV93cmFwcGVycywgd3JhcHBlcktleShkb21PYmpl
Y3QpLCBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4od3JhcHBlciwgb3duZXIsICZ3b3JsZCkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBp
bmxpbmUgdm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFz
cyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCit7CisgICAgaWYgKGNsZWFySW5s
aW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyKSkKKyAgICAgICAgcmV0
dXJuOworICAgIHdlYWtSZW1vdmUod29ybGQubV93cmFwcGVycywgd3JhcHBlcktleShkb21PYmpl
Y3QpLCB3cmFwcGVyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1l
IFQ+IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6
OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVy
dGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGUKK3sKKyAgICB1c2luZyBX
cmFwcGVyQ2xhc3MgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xh
c3M+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICBBU1NFUlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFs
T2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKTsKKyAgICBhdXRvKiBkb21PYmplY3RQdHIgPSBk
b21PYmplY3QucHRyKCk7CisgICAgYXV0byogd3JhcHBlciA9IFdyYXBwZXJDbGFzczo6Y3JlYXRl
KGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGdsb2JhbE9iamVjdC0+dm0oKSwgKmdsb2Jh
bE9iamVjdCksIGdsb2JhbE9iamVjdCwgV1RGTW92ZShkb21PYmplY3QpKTsKKyAgICBjYWNoZVdy
YXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3RQdHIsIHdyYXBwZXIpOworICAg
IHJldHVybiB3cmFwcGVyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5h
bWUgVD4gaW5saW5lIGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBSZWY8VD4mJiBkb21PYmplY3QpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFz
dGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29u
dmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGUKK3sKKyAgICByZXR1
cm4gY3JlYXRlV3JhcHBlcjxET01DbGFzcz4oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfcmVmZXJlbmNl
X2Nhc3Q8RE9NQ2xhc3M+KFdURk1vdmUoZG9tT2JqZWN0KSkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRE9NQ2xhc3MmIGRvbU9iamVj
dCkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2Jq
ZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICBy
ZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBSZWY8RE9NQ2xhc3M+
KGRvbU9iamVjdCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlND
bGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCit7CisgICAgYXV0byB0
aGlzVmFsdWUgPSBzdGF0ZS50aGlzVmFsdWUoKTsKKyAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5
bmFtaWNEb3duY2FzdDxKU0NsYXNzKj4oc3RhdGUudm0oKSwgdGhpc1ZhbHVlKTsKKyAgICBBU1NF
UlQoY2FzdGVkVGhpcyk7CisgICAgcmV0dXJuICpjYXN0ZWRUaGlzOworfQorCitpbmxpbmUgaW50
MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGJvb2wmIG9rYXkpCit7CisgICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVy
KGV4ZWMpOworICAgIG9rYXkgPSBzdGQ6OmlzZmluaXRlKG51bWJlcik7CisgICAgcmV0dXJuIEpT
Qzo6dG9JbnQzMihudW1iZXIpOworfQorCisvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9i
amVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwg
c3BlYy4KK2lubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUm
IGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQmIGxlbmd0aCkKK3sKKyAgICBKU0M6
OlZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsK
KyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMs
IHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgSlNDOjpKU1Zh
bHVlIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoJmV4ZWMsIGV4ZWMucHJvcGVydHlOYW1lcygp
Lmxlbmd0aCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKKyAg
ICBpZiAobGVuZ3RoVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICB0aHJvd1Nl
cXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgbGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9VSW50MzIoJmV4ZWMpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAgcmV0dXJuIG9iamVjdDsK
K30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlciYgYnVmZmVyKQor
eworICAgIGlmIChhdXRvIHJlc3VsdCA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53
b3JsZCgpLCBidWZmZXIpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgLy8gVGhlIEpT
QXJyYXlCdWZmZXI6OmNyZWF0ZSBmdW5jdGlvbiB3aWxsIHJlZ2lzdGVyIHRoZSB3cmFwcGVyIGlu
IGZpbmlzaENyZWF0aW9uLgorICAgIHJldHVybiBKU0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZShz
dGF0ZS0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZShidWZmZXIuc2hh
cmluZ01vZGUoKSksICZidWZmZXIpOworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6QXJyYXlCdWZmZXJWaWV3JiB2aWV3KQoreworICAgIHJldHVybiB2aWV3LndyYXAoc3RhdGUs
IGdsb2JhbE9iamVjdCk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlC
dWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIEpTQzo6
anNOdWxsKCk7CisgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmJ1ZmZlcik7
Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpT
Qzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlclZpZXcqIHZp
ZXcpCit7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAg
ICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqdmlldyk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgcHRyKQoreworICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4mJiBwdHIpCit7
CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBwdHIuZ2V0KCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxU
PiYgdmVjdG9yKQoreworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTQzo6SlNBcnJh
eSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXpl
KCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBh
cnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZl
Y3RvcltpXSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFs
dWUoKSk7CisgICAgfQorICAgIHJldHVybiBhcnJheTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPFQ+PiYgdmVjdG9y
KQoreworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTQzo6SlNBcnJheSogYXJyYXkg
PSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXplKCkpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgeworICAgICAgICBhcnJheS0+cHV0
RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXS5n
ZXQoKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUo
KSk7CisgICAgfQorICAgIHJldHVybiBhcnJheTsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6
UHJpdmF0ZU5hbWUmIHByaXZhdGVOYW1lKQoreworICAgIHJldHVybiBKU0M6OlN5bWJvbDo6Y3Jl
YXRlKGV4ZWMtPnZtKCksIHByaXZhdGVOYW1lLnVpZCgpKTsKK30KKworaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1
bHRPYmplY3QoJnN0YXRlLCB2YWx1ZSwgZmFsc2UpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIHZhbHVlKQoreworICAg
IHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIHRvSlMoJnN0YXRlLCAm
Z2xvYmFsT2JqZWN0LCB2YWx1ZSksIGZhbHNlKTsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQoreworICAgIHJldHVybiBjcmVh
dGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIEpTQzo6anNVbmRlZmluZWQoKSwgdHJ1ZSk7
Cit9CisKK2lubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvUG9zc2libHlTaGFy
ZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNhc3Q8SlNDOjpKU0FycmF5QnVmZmVyVmll
dyo+KHZtLCB2YWx1ZSk7CisgICAgaWYgKCF3cmFwcGVyKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICByZXR1cm4gd3JhcHBlci0+cG9zc2libHlTaGFyZWRJbXBsKCk7Cit9CisKK2lubGlu
ZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5zaGFyZWRBcnJheUJ1ZmZlclZpZXco
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IHRv
UG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcodm0sIHZhbHVlKTsKKyAgICBpZiAoIXJlc3Vs
dCB8fCByZXN1bHQtPmlzU2hhcmVkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2li
bHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1
cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+
KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5
U2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQxNkFkYXB0b3I+
KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5
U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+
KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5
U2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+
KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9Q
b3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpV
aW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVk
VmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlND
OjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBK
U0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5
cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8
SlNDOjpGbG9hdDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYg
dm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0
aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBS
ZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDY0QXJyYXkoSlND
OjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hh
cmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KKwor
aW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9VbnNoYXJlZEludDhBcnJheShKU0M6OlZN
JiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVU
eXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxK
U0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OkludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkludDMyQXJy
YXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUp
IHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDMyQWRhcHRv
cj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFy
ZWRVaW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpT
Qzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRvcj4odm0sIHZhbHVl
KTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Vuc2hhcmVkVWlu
dDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
SlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcj4o
dm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0b1Vuc2hhcmVk
VWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDE2QWRhcHRvcj4odm0sIHZhbHVl
KTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hhcmVkVWludDMyQXJy
YXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hh
cmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5s
aW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6
OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRp
dmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJl
ZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBl
ZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVlKTsgfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBKU1Q+IGlubGluZSBWZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFy
cmF5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIEpT
Qzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgdGhyb3dT
ZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKworICAgIFZlY3RvcjxSZWY8VD4+IHJlc3VsdDsKKyAgICBmb3JFYWNoSW5JdGVyYWJsZSgm
c3RhdGUsIHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmIChqc1ZhbHVlLmluaGVyaXRzKHZtLCBKU1Q6
OmluZm8oKSkpIHsKKyAgICAgICAgICAgIGF1dG8qIG9iamVjdCA9IEpTVDo6dG9XcmFwcGVkKHZt
LCBqc1ZhbHVlKTsKKyAgICAgICAgICAgIEFTU0VSVChvYmplY3QpOworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgqb2JqZWN0KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0aHJvd0Fy
cmF5RWxlbWVudFR5cGVFcnJvcigqc3RhdGUsIHNjb3BlKTsKKyAgICB9KTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitpbmxpbmUgU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBBU1NFUlQoIXByb3BlcnR5TmFtZS5pc1N5
bWJvbCgpKTsKKyAgICByZXR1cm4gcHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVp
ZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKK30KKworaW5saW5lIEF0b21pY1N0cmlu
ZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCit7CisgICAgcmV0dXJuIEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUudWlkKCkgPyBwcm9w
ZXJ0eU5hbWUudWlkKCkgOiBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKK30KKwordGVtcGxh
dGU8SlNDOjpOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpF
bmNvZGVkSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKK3sKKyAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpKU0Z1bmN0aW9u
OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBsZW5ndGgs
IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5hdGl2ZUZ1bmN0aW9uKSk7Cit9CisKK0FMV0FZ
U19JTkxJTkUgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK3sKKyAg
ICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuOworICAgIHByb3Bh
Z2F0ZUV4Y2VwdGlvblNsb3dQYXRoKHN0YXRlLCB0aHJvd1Njb3BlLCBXVEZNb3ZlKGV4Y2VwdGlv
bikpOworfQorCitpbmxpbmUgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYg
dmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkKKyAgICAg
ICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhj
ZXB0aW9uKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUp
Cit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBw
cm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRp
b24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorICAgIHJldHVybiB0b0pTKCZzdGF0
ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6
OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpCit7CisgICAg
aWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVF
eGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZz
dGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3Vy
aXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQmIG5vZGUpCit7CisgICAgcmV0dXJu
IHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCAmbm9kZSkgPyAmbm9kZSA6IG51bGxwdHI7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBCaW5kaW5nU2VjdXJpdHk6OmNo
ZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVCogbm9kZSkKK3sKKyAg
ICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIG5vZGUpID8gbm9kZSA6IG51
bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBFeGNlcHRpb25PcjxUKj4g
QmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEV4Y2VwdGlvbk9yPFQqPiYmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICByZXR1
cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEV4Y2VwdGlvbk9yPFQqPiBCaW5k
aW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
RXhjZXB0aW9uT3I8VCY+JiYgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmhhc0V4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpOworICAgIHJldHVybiBj
aGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHBy
b3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1
cml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZ1NlY3VyaXR5LmgJKHJldmlzaW9uIDIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDI4MCAr
MjMsMjMgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIK
LSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKLSNp
bmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgot
I2luY2x1ZGUgIkpTRHluYW1pY0Rvd25jYXN0LmgiCi0jaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxl
LmgiCi0jaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oIgotI2luY2x1ZGUgIldlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlci5oIgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8
aGVhcC9IZWFwSW5saW5lcy5oPgotI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+
Ci0jaW5jbHVkZSA8aGVhcC9XZWFrLmg+Ci0jaW5jbHVkZSA8aGVhcC9XZWFrSW5saW5lcy5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaD4K
LSNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlC
dWZmZXIuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9KU0NlbGxJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdElu
bGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0xvb2t1cC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4K
LSNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1l
L1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0vLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlz
IGZpbGUgYSBsb3QgZWFzaWVyIHRvIHJlYWQgYnkgcHV0dGluZyBhbGwgZnVuY3Rpb24gZGVjbGFy
YXRpb25zIGF0IHRoZSB0b3AsCi0vLyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYmVsb3csIGV2
ZW4gZm9yIHRlbXBsYXRlIGFuZCBpbmxpbmUgZnVuY3Rpb25zLgogCiBuYW1lc3BhY2UgSlNDIHsK
LWNsYXNzIEpTRnVuY3Rpb247CitjbGFzcyBFeGVjU3RhdGU7CiB9CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgQ2FjaGVkU2NyaXB0OwotY2xhc3MgRGVmZXJyZWRQcm9taXNlOwogY2xh
c3MgRE9NV2luZG93OwogY2xhc3MgRnJhbWU7Ci1jbGFzcyBVUkw7CiBjbGFzcyBOb2RlOwogCi1z
dHJ1Y3QgRXhjZXB0aW9uRGV0YWlscyB7Ci0gICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgaW50IGxp
bmVOdW1iZXIgeyAwIH07Ci0gICAgaW50IGNvbHVtbk51bWJlciB7IDAgfTsKLSAgICBTdHJpbmcg
c291cmNlVVJMOwotfTsKLQotLy8gQmFzZSBjbGFzcyBmb3IgYWxsIGNvbnN0cnVjdG9yIG9iamVj
dHMgaW4gdGhlIEpTQyBiaW5kaW5ncy4KLWNsYXNzIERPTUNvbnN0cnVjdG9yT2JqZWN0IDogcHVi
bGljIEpTRE9NT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIEpTRE9NT2JqZWN0IEJhc2U7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0
dXJlRmxhZ3MgfCBKU0M6OkltcGxlbWVudHNIYXNJbnN0YW5jZSB8IEpTQzo6SW1wbGVtZW50c0Rl
ZmF1bHRIYXNJbnN0YW5jZSB8IEpTQzo6VHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRhOwotICAg
IHN0YXRpYyBKU0M6OlN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKLQotcHJvdGVjdGVkOgotICAgIERPTUNvbnN0
cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQotICAg
IHN0YXRpYyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7Ci0gICAgc3RhdGljIEpT
Qzo6Q2FsbFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgSlNDOjpDYWxsRGF0YSYpOwotfTsKLQot
Y2xhc3MgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QgOiBwdWJsaWMgRE9NQ29uc3RydWN0
b3JPYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFz
ZTsKLQotcHJvdGVjdGVkOgotICAgIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6
U3RydWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQzo6SlNDZWxsKiwgSlNDOjpTbG90VmlzaXRvciYpOwotCi0gICAgSlNDOjpKU0Z1
bmN0aW9uKiBpbml0aWFsaXplRnVuY3Rpb24oKTsKLSAgICB2b2lkIHNldEluaXRpYWxpemVGdW5j
dGlvbihKU0M6OlZNJiwgSlNDOjpKU0Z1bmN0aW9uJik7Ci0KLXByaXZhdGU6Ci0gICAgSlNDOjpX
cml0ZUJhcnJpZXI8SlNDOjpKU0Z1bmN0aW9uPiBtX2luaXRpYWxpemVGdW5jdGlvbjsKLX07Ci0K
LURPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci1ET01XaW5kb3cm
IGFjdGl2ZURPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwotRE9NV2luZG93JiBmaXJzdERPTVdp
bmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwotCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1Zh
bHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9F
WFBPUlQgdm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLQot
dm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1XRUJDT1JFX0VYUE9SVCBib29sIHRocm93
U2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci0KLXZvaWQg
dGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmKTsKLXZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYpOwotdm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJik7IC8vIE5vdCB0aGUgc2FtZSBhcyBhIEphdmFTY3JpcHQgc3ludGF4IGVy
cm9yLgotdm9pZCB0aHJvd0luZGV4U2l6ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJik7Ci12b2lkIHRocm93SW52YWxpZFN0YXRlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKLVdFQkNPUkVfRVhQT1JUIHZv
aWQgdGhyb3dOb25GaW5pdGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmKTsKLXZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVzc2FnZSk7Ci12b2lkIHRocm93U2Vj
dXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHRocm93U2VxdWVuY2VUeXBlRXJyb3Io
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLXZvaWQgdGhyb3dUeXBlTWlzbWF0
Y2hFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotCi1XRUJDT1JFX0VY
UE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBj
b25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFZhbHVlcyk7
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwg
Y29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5h
bWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVtYmVyTmFtZSwgY29uc3QgY2hhciog
ZGljdGlvbmFyeU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1KU0M6OkVuY29kZWRK
U1ZhbHVlIHRocm93Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVy
ZmFjZU5hbWUpOwotCi1TdHJpbmcgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci1TdHJpbmcgbWFr
ZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIGF0dHJpYnV0ZU5hbWUpOwotCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVl
IHRocm93R2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci1X
RUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsK
LVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlz
VHlwZUVycm9yKERlZmVycmVkUHJvbWlzZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNW
YWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25z
dCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKTsKLQotV0VC
Q09SRV9FWFBPUlQgSlNDOjpTdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShKU0RPTUds
b2JhbE9iamVjdCYsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6
OlN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlN0
cnVjdHVyZSosIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFdy
YXBwZXJDbGFzcz4gSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVjdHVyZShKU0M6OlZNJiwgSlNE
T01HbG9iYWxPYmplY3QmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpT
dHJ1Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqKTsKLXRl
bXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90
eXBlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kik7Ci0KLXZvaWQgY2FsbEZ1bmN0aW9u
V2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0JiB0aGlz
T2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4g
SlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTRnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmplY3QmKTsKLQot
SlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBKU0M6
OkFycmF5QnVmZmVyKik7Ci12b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIqKTsKLQot
SlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9p
ZCopOwotSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxk
JiwgU2NyaXB0V3JhcHBhYmxlKik7Ci1KU0M6OkpTQXJyYXlCdWZmZXIqIGdldElubGluZUNhY2hl
ZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciopOwotCi1ib29sIHNl
dElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0
KiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqKTsKLWJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3JhcHBlciwg
SlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcik7Ci1ib29sIHNldElubGluZUNhY2hl
ZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciosIEpTQzo6SlNBcnJh
eUJ1ZmZlciogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcik7Ci0K
LWJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBK
U0RPTU9iamVjdCopOwotYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiwgU2NyaXB0V3JhcHBhYmxlKiwgSlNET01PYmplY3QqIHdyYXBwZXIpOwotYm9vbCBjbGVh
cklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlcios
IEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlcik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNs
YXNzPiBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERP
TUNsYXNzJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNPYmpl
Y3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgUmVmPERPTUNsYXNz
PiYgb2JqZWN0KSB7IHJldHVybiBnZXRDYWNoZWRXcmFwcGVyKHdvcmxkLCBvYmplY3QuZ2V0KCkp
OyB9Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiB2
b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyosIFdyYXBwZXJDbGFz
cyopOwotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4g
dm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyosIFdyYXBwZXJD
bGFzcyopOwotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGF1dG8gY3Jl
YXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUPiYmKSAtPiB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNE
T01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGU7
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gYXV0byBjcmVhdGVXcmFw
cGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPCFzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFw
cGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGU7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0
ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgRE9NQ2xhc3MmKTsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
SlNDbGFzcz4gSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYpOwotCi12b2lk
IGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0b21pY1N0cmluZyYpOwotCi1jb25zdCBKU0M6Okhh
c2hUYWJsZSYgZ2V0SGFzaFRhYmxlRm9yR2xvYmFsRGF0YShKU0M6OlZNJiwgY29uc3QgSlNDOjpI
YXNoVGFibGUmIHN0YXRpY1RhYmxlKTsKLQotU3RyaW5nIHJldHJpZXZlRXJyb3JNZXNzYWdlKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIEpTQzo6Q2F0
Y2hTY29wZSYpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7
Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6RXhjZXB0aW9uKiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIsIEV4Y2VwdGlvbkRldGFpbHMq
ID0gbnVsbHB0cik7Ci12b2lkIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUq
KTsKLQotSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEV4
Y2VwdGlvbiYmKTsKLUpTQzo6SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGVjU3Rh
dGUqLCBFeGNlcHRpb25Db2RlLCBjb25zdCBTdHJpbmcmKTsKLQotLy8gQ29udmVydCBhIERPTSBp
bXBsZW1lbnRhdGlvbiBleGNlcHRpb24gaW50byBhIEphdmFTY3JpcHQgZXhjZXB0aW9uIGluIHRo
ZSBleGVjdXRpb24gc3RhdGUuCi12b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQg
cHJvcGFnYXRlRXhjZXB0aW9uU2xvd1BhdGgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmLCBFeGNlcHRpb24mJik7Ci0KLUpTQzo6SlNWYWx1ZSBqc1N0cmluZyhKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IFVSTCYpOyAvLyBlbXB0eSBpZiB0aGUgVVJMIGlzIG51bGwKLQotSlNDOjpKU1Zh
bHVlIGpzU3RyaW5nT3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsg
Ly8gdW5kZWZpbmVkIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAotSlNDOjpKU1ZhbHVlIGpzU3RyaW5n
T3JVbmRlZmluZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBVUkwmKTsgLy8gdW5kZWZpbmVkIGlm
IHRoZSBVUkwgaXMgbnVsbAotCi0vLyBTZWUgSmF2YVNjcmlwdENvcmUgZm9yIGV4cGxhbmF0aW9u
OiBTaG91bGQgYmUgdXNlZCBmb3IgYW55IHN0cmluZyB0aGF0IGlzIGFscmVhZHkgb3duZWQgYnkg
YW5vdGhlcgotLy8gb2JqZWN0LCB0byBsZXQgdGhlIGVuZ2luZSBrbm93IHRoYXQgY29sbGVjdGlu
ZyB0aGUgSlNTdHJpbmcgd3JhcHBlciBpcyB1bmxpa2VseSB0byBzYXZlIG1lbW9yeS4KLUpTQzo6
SlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5n
Jik7Ci0KLVN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7Ci0K
LUF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFt
ZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEpTQzo6
RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci1XRUJDT1JFX0VYUE9SVCBTdHJp
bmcgdmFsdWVUb0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9V
U1ZTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi1pbnQzMl90IGZpbml0
ZUludDMyVmFsdWUoSlNDOjpKU1ZhbHVlLCBKU0M6OkV4ZWNTdGF0ZSosIGJvb2wmIG9rYXkpOwot
Ci0vLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBjb252ZXJ0IHZhbHVlcyB0byBpbnRlZ2VycyBh
cyBwZXIgdGhlIFdlYklETCBzcGVjaWZpY2F0aW9uLgotLy8gVGhlIGNvbnZlcnNpb24gZmFpbHMg
aWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgb3IsIGlmIEVuZm9y
Y2VSYW5nZSBpcyBzcGVjaWZpZWQsCi0vLyB0aGUgdmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ug
b2YgdGhlIGRlc3RpbmF0aW9uIGludGVnZXIgdHlwZS4KLQotV0VCQ09SRV9FWFBPUlQgaW50OF90
IHRvSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJD
T1JFX0VYUE9SVCB1aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQxNl90
IHRvVUludDE2RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdF
QkNPUkVfRVhQT1JUIGludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VS
YW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQ2
NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
V0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOwotCi1XRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4Q2xhbXAo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0
b1VJbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBP
UlQgaW50MTZfdCB0b0ludDE2Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
V0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJDbGFtcChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQz
MkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGlu
dDY0X3QgdG9JbnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNP
UkVfRVhQT1JUIHVpbnQ2NF90IHRvVUludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotCi1XRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTYoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9V
SW50MTYoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50
NjRfdCB0b0ludDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQ
T1JUIHVpbnQ2NF90IHRvVUludDY0KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQot
SlNDOjpKU1ZhbHVlIGpzRGF0ZShKU0M6OkV4ZWNTdGF0ZSosIGRvdWJsZSB2YWx1ZSk7Ci0KLS8v
IE5hTiBpZiB0aGUgdmFsdWUgY2FuJ3QgYmUgY29udmVydGVkIHRvIGEgZGF0ZS4KLWRvdWJsZSB2
YWx1ZVRvRGF0ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSk7Ci0KLS8vIFZhbGlkYXRl
cyB0aGF0IHRoZSBwYXNzZWQgb2JqZWN0IGlzIGEgc2VxdWVuY2UgdHlwZSBwZXIgc2VjdGlvbiA0
LjEuMTMgb2YgdGhlIFdlYklETCBzcGVjLgotSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCB1bnNpZ25lZCYgbGVuZ3RoKTsKLQotSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpTQzo6QXJy
YXlCdWZmZXImKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Jik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciopOwot
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpBcnJheUJ1ZmZlclZpZXcqKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJik7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgUmVmUHRyPFQ+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0
IFZlY3RvcjxUPiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFZlY3RvcjxSZWZQdHI8VD4+
Jik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgY29uc3QgSlNDOjpQcml2YXRlTmFtZSYpOwotCi1KU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9y
KEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgVCYpOwotSlNDOjpKU1ZhbHVlIHRvSlNJdGVy
YXRvckVuZChKU0M6OkV4ZWNTdGF0ZSYpOwotCi1SZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+
IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
Ci1SZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hh
cmVkSW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDMy
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUp
OwotUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4QXJyYXkoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9Q
b3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwot
UmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Bvc3NpYmx5
U2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpG
bG9hdDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9h
dDY0QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVJlZlB0cjxKU0M6OkFycmF5QnVm
ZmVyVmlldz4gdG9VbnNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKLVJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9VbnNoYXJlZEludDhBcnJheShKU0M6OlZNJiwg
SlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFy
cmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9V
bnNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpV
aW50OEFycmF5PiB0b1Vuc2hhcmVkVWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsK
LVJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJy
YXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9V
bnNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6
VWludDMyQXJyYXk+IHRvVW5zaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKLVJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJl
ZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgSlNUeXBlPiBWZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSXRl
cmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwordm9pZCBwcmludEVy
cm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAogZW51
bSBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiB7IERvTm90UmVwb3J0U2VjdXJpdHlFcnJvciwgTG9n
U2VjdXJpdHlFcnJvciwgVGhyb3dTZWN1cml0eUVycm9yIH07CisKIG5hbWVzcGFjZSBCaW5kaW5n
U2VjdXJpdHkgewogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JO
b2RlKEpTQzo6RXhlY1N0YXRlJiwgVCYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNo
ZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgVCopOwpAQCAtMzA5LDQ5NSArNTIs
NiBAQCBuYW1lc3BhY2UgQmluZGluZ1NlY3VyaXR5IHsKICAgICBib29sIHNob3VsZEFsbG93QWNj
ZXNzVG9Ob2RlKEpTQzo6RXhlY1N0YXRlJiwgTm9kZSopOwogfTsKIAotdm9pZCBwcmludEVycm9y
TWVzc2FnZUZvckZyYW1lKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotU3RyaW5n
IHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKLUF0b21pY1N0cmluZyBw
cm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7Ci0KLXRlbXBsYXRl
PEpTQzo6TmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9u
Q2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVk
SlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotCi0KLWVudW0gY2xhc3MgQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3IgeyBUaHJvdywgUmV0dXJuRWFybHksIFJlamVjdFByb21pc2UsIEFzc2VydCB9
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPgotc3RydWN0IEJpbmRpbmdDYWxsZXIgewot
ICAgIHVzaW5nIEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9uID0gYm9vbChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQ2xhc3MmLCBKU0M6OkpTVmFsdWUsIEpTQzo6VGhyb3dTY29wZSYpOwotICAgIHVzaW5nIEF0
dHJpYnV0ZUdldHRlckZ1bmN0aW9uID0gSlNDOjpKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgSlND
bGFzcyYsIEpTQzo6VGhyb3dTY29wZSYpOwotICAgIHVzaW5nIE9wZXJhdGlvbkNhbGxlckZ1bmN0
aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBKU0M6
OlRocm93U2NvcGUmKTsKLSAgICB1c2luZyBQcm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24g
PSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDbGFzcyosIFJlZjxEZWZl
cnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOwotCi0gICAgc3RhdGljIEpTQ2xhc3Mq
IGNhc3RGb3JBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsK
LSAgICBzdGF0aWMgSlNDbGFzcyogY2FzdEZvck9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYpOwot
Ci0gICAgdGVtcGxhdGU8UHJvbWlzZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNh
bGxlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJy
b3JCZWhhdmlvcjo6UmVqZWN0UHJvbWlzZT4KLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBjYWxsUHJvbWlzZU9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJl
ZFByb21pc2U+JiYgcHJvbWlzZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2Fz
dEZvck9wZXJhdGlvbigqc3RhdGUpOwotICAgICAgICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCAmJiBVTkxJS0VMWSghdGhpc09iamVjdCkpCi0gICAg
ICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKHByb21pc2UuZ2V0
KCksIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25OYW1lKTsKLSAgICAgICAg
QVNTRVJUKHRoaXNPYmplY3QpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIEpTQ2xhc3M6OmluZm8oKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
cmVmYWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgdG8gdXNlIHJlZmVyZW5jZXMgZm9y
IHN0YXRlIGFuZCB0aGlzT2JqZWN0LgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uQ2FsbGVyKHN0
YXRlLCB0aGlzT2JqZWN0LCBXVEZNb3ZlKHByb21pc2UpLCB0aHJvd1Njb3BlKTsKLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTxPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OlRocm93PgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxPcGVyYXRpb24o
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBj
YXN0Rm9yT3BlcmF0aW9uKCpzdGF0ZSk7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdyAhPSBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0ICYmIFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgewot
ICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpU
aHJvdykKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwg
dGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOwot
ICAgICAgICAgICAgLy8gRm9yIGN1c3RvbSBwcm9taXNlLXJldHVybmluZyBvcGVyYXRpb25zCi0g
ICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKCpzdGF0ZSwg
SlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOwotICAgICAgICB9Ci0g
ICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZvKCkpOwotICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2RlIHRvIHVzZSByZWZlcmVu
Y2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkNh
bGxlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8QXR0cmlidXRlU2V0dGVyRnVuY3Rpb24gc2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
ciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KLSAgICBzdGF0
aWMgYm9vbCBzZXRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkVuY29kZWRK
U1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGNvbnN0
IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi0gICAgewotICAgICAgICBBU1NFUlQoc3RhdGUpOwotICAg
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsK
LSAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JBdHRyaWJ1dGUoKnN0YXRlLCB0aGlz
VmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3QpKQotICAgICAgICAgICAg
cmV0dXJuIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpID8g
dGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCkt
PmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSkgOiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHNldHRl
cigqc3RhdGUsICp0aGlzT2JqZWN0LCBKU0M6OkpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
LCB0aHJvd1Njb3BlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxBdHRyaWJ1dGVHZXR0ZXJGdW5j
dGlvbiBnZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVk
VGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVl
IGF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShz
dGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yQXR0cmlidXRl
KCpzdGF0ZSwgdGhpc1ZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkg
ewotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
OjpUaHJvdykKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFt
ZSk7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OlJlamVjdFByb21pc2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VX
aXRoR2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0
dHJpYnV0ZU5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpT
Qzo6anNVbmRlZmluZWQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1
ZTo6ZW5jb2RlKGdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7Ci0gICAg
fQotfTsKLQotLy8gRXhjZXB0aW9uT3IgaGFuZGxpbmcuCi12b2lkIHByb3BhZ2F0ZUV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYp
OwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUm
LCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+JiYp
OwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlND
OjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2Vw
dGlvbk9yPFQ+JiYgdmFsdWUpOwotCi0vLyBJbmxpbmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0ZSBk
ZWZpbml0aW9ucy4KLQotaW5saW5lIEpTQzo6U3RydWN0dXJlKiBET01Db25zdHJ1Y3Rvck9iamVj
dDo6Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi17Ci0gICAgcmV0dXJuIEpTQzo6U3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZv
KEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotfQotCi1pbmxpbmUg
RE9NQ29uc3RydWN0b3JPYmplY3Q6OkRPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgOiBKU0RP
TU9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0KLQotaW5saW5lIFN0cmluZyBE
T01Db25zdHJ1Y3Rvck9iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KikKLXsKLSAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsKCJGdW5jdGlvbiIpOwotfQotCi1pbmxpbmUgRE9NQ29uc3RydWN0
b3JKU0J1aWx0aW5PYmplY3Q6OkRPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAg
OiBET01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0KLQot
aW5saW5lIEpTQzo6SlNGdW5jdGlvbiogRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6Omlu
aXRpYWxpemVGdW5jdGlvbigpCi17Ci0gICAgcmV0dXJuIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLmdl
dCgpOwotfQotCi1pbmxpbmUgdm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6c2V0
SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mIHZtLCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9u
KQotewotICAgIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLnNldCh2bSwgdGhpcywgJmZ1bmN0aW9uKTsK
LX0KLQotaW5saW5lIEpTRE9NR2xvYmFsT2JqZWN0KiBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9y
UHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIEZJWE1FOiBDYWxsZXJz
IHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzaW5nIHRoZSBnbG9iYWwgb2JqZWN0Ci0gICAg
Ly8gZnJvbSB3aGljaCB0aGUgb2JqZWN0IGlzIGJlaW5nIGNyZWF0ZWQsIGluc3RlYWQgb2YgYXNz
dW1pbmcgdGhlIGxleGljYWwgb25lLgotICAgIC8vIGUuZy4gc3ViZnJhbWUuZG9jdW1lbnQuYm9k
eSBzaG91bGQgdXNlIHRoZSBzdWJmcmFtZSdzIGdsb2JhbCBvYmplY3QsIG5vdCB0aGUgbGV4aWNh
bCBvbmUuCi0gICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNs
YXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVjdHVyZShKU0M6OlZNJiB2bSwg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBpZiAoSlNDOjpTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGdldENhY2hlZERPTVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIFdyYXBw
ZXJDbGFzczo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAgICByZXR1cm4g
Y2FjaGVET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVN0cnVj
dHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVQcm90b3R5cGUodm0s
ICZnbG9iYWxPYmplY3QpKSwgV3JhcHBlckNsYXNzOjppbmZvKCkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdl
dERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAvLyBGSVhNRTogVGhp
cyBmdW5jdGlvbiBpcyB3cm9uZy4gSXQgdXNlcyB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdCBmb3Ig
Y3JlYXRpbmcgdGhlIHByb3RvdHlwZSBzdHJ1Y3R1cmUuCi0gICAgcmV0dXJuIGdldERPTVN0cnVj
dHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMtPnZtKCksICpkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9y
UHJvdG90eXBlKGV4ZWMpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBp
bmxpbmUgSlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTQzo6anNDYXN0PEpT
Qzo6SlNPYmplY3QqPihhc09iamVjdChnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPih2bSwg
KkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSktPnN0b3JlZFBy
b3RvdHlwZSgpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xv
YmFsT2JqZWN0KQotewotICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQ2xhc3M6OmNyZWF0
ZShnZXRET01TdHJ1Y3R1cmU8SlNDbGFzcz4oZ2xvYmFsT2JqZWN0LnZtKCksIGdsb2JhbE9iamVj
dCksICZnbG9iYWxPYmplY3QpOwotICAgIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRz
KHN0YXRlLCAqb2JqZWN0LCBpbml0aWFsaXplRnVuY3Rpb24pOwotICAgIHJldHVybiBKU0M6OkpT
VmFsdWU6OmVuY29kZShvYmplY3QpOwotfQotCi1pbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIq
IHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKikK
LXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKj4o
d29ybGQudm0oKS5tX3R5cGVkQXJyYXlDb250cm9sbGVyLmdldCgpKS0+d3JhcHBlck93bmVyKCk7
Ci19Ci0KLWlubGluZSB2b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVj
dCkKLXsKLSAgICByZXR1cm4gZG9tT2JqZWN0OwotfQotCi1pbmxpbmUgSlNET01PYmplY3QqIGdl
dElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCopIHsgcmV0dXJuIG51
bGxwdHI7IH0KLWlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0KiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqKSB7IHJldHVy
biBmYWxzZTsgfQotaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBw
ZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCopIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLWlubGlu
ZSBKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCkKLXsKLSAgICBpZiAoIXdvcmxkLmlzTm9y
bWFsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBkb21PYmplY3QtPndy
YXBwZXIoKTsKLX0KLQotaW5saW5lIEpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVk
V3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIp
Ci17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gYnVmZmVyLT5tX3dyYXBwZXIuZ2V0KCk7Ci19Ci0KLWlubGluZSBib29sIHNl
dElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBh
YmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25l
ciogd3JhcHBlck93bmVyKQotewotICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGRvbU9iamVjdC0+c2V0V3JhcHBlcih3cmFwcGVyLCB3cmFwcGVy
T3duZXIsICZ3b3JsZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIHNldElu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZl
ciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRs
ZU93bmVyKiB3cmFwcGVyT3duZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0LT5tX3dyYXBwZXIgPSBKU0M6OldlYWs8
SlNDOjpKU0FycmF5QnVmZmVyPih3cmFwcGVyLCB3cmFwcGVyT3duZXIsICZ3b3JsZCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01P
YmplY3QqIHdyYXBwZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0LT5jbGVhcldyYXBwZXIod3JhcHBlcik7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6
SlNBcnJheUJ1ZmZlciogd3JhcHBlcikKLXsKLSAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB3ZWFrQ2xlYXIoZG9tT2JqZWN0LT5tX3dyYXBwZXIs
IHdyYXBwZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01D
bGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiB3b3JsZCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKLXsKLSAgICBpZiAoYXV0byogd3JhcHBl
ciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsICZkb21PYmplY3QpKQotICAgICAgICBy
ZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gd29ybGQubV93cmFwcGVycy5nZXQod3JhcHBlcktl
eSgmZG9tT2JqZWN0KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFt
ZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQm
IHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCi17Ci0g
ICAgSlNDOjpXZWFrSGFuZGxlT3duZXIqIG93bmVyID0gd3JhcHBlck93bmVyKHdvcmxkLCBkb21P
YmplY3QpOwotICAgIGlmIChzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3Qs
IHdyYXBwZXIsIG93bmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdlYWtBZGQod29ybGQubV93
cmFwcGVycywgd3JhcHBlcktleShkb21PYmplY3QpLCBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4o
d3JhcHBlciwgb3duZXIsICZ3b3JsZCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFz
cywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCB1bmNhY2hlV3JhcHBlcihET01X
cmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdy
YXBwZXIpCi17Ci0gICAgaWYgKGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2Jq
ZWN0LCB3cmFwcGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdlYWtSZW1vdmUod29ybGQubV93
cmFwcGVycywgd3JhcHBlcktleShkb21PYmplY3QpLCB3cmFwcGVyKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIo
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwg
dHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNs
YXNzKj46OnR5cGUKLXsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSB0eXBlbmFtZSBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICBBU1NF
UlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKTsK
LSAgICBhdXRvKiBkb21PYmplY3RQdHIgPSBkb21PYmplY3QucHRyKCk7Ci0gICAgYXV0byogd3Jh
cHBlciA9IFdyYXBwZXJDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+
KGdsb2JhbE9iamVjdC0+dm0oKSwgKmdsb2JhbE9iamVjdCksIGdsb2JhbE9iamVjdCwgV1RGTW92
ZShkb21PYmplY3QpKTsKLSAgICBjYWNoZVdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBk
b21PYmplY3RQdHIsIHdyYXBwZXIpOwotICAgIHJldHVybiB3cmFwcGVyOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gaW5saW5lIGF1dG8gY3JlYXRlV3JhcHBl
cihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VD4mJiBkb21PYmplY3QpIC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1
ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBl
ckNsYXNzKj46OnR5cGUKLXsKLSAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxET01DbGFzcz4oZ2xv
YmFsT2JqZWN0LCBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8RE9NQ2xhc3M+KFdURk1vdmUoZG9tT2Jq
ZWN0KSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKLXsKLSAgICBpZiAoYXV0byogd3JhcHBlciA9
IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKQotICAg
ICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwg
Z2xvYmFsT2JqZWN0LCBSZWY8RE9NQ2xhc3M+KGRvbU9iamVjdCkpOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUpCi17Ci0gICAgYXV0byB0aGlzVmFsdWUgPSBzdGF0ZS50aGlzVmFsdWUoKTsK
LSAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0NsYXNzKj4oc3RhdGUu
dm0oKSwgdGhpc1ZhbHVlKTsKLSAgICBBU1NFUlQoY2FzdGVkVGhpcyk7Ci0gICAgcmV0dXJuICpj
YXN0ZWRUaGlzOwotfQotCi1pbmxpbmUgaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rYXkpCi17Ci0gICAgZG91
YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIG9rYXkgPSBzdGQ6OmlzZmlu
aXRlKG51bWJlcik7Ci0gICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOwotfQotCi0vLyBW
YWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNl
Y3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KLWlubGluZSBKU0M6OkpTT2JqZWN0KiB0
b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgdW5z
aWduZWQmIGxlbmd0aCkKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBv
YmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICB0
aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotCi0gICAgSlNDOjpKU1ZhbHVlIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5nZXQo
JmV4ZWMsIGV4ZWMucHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7Ci0KLSAgICBpZiAobGVuZ3RoVmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkgewotICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgbGVuZ3RoID0gbGVuZ3RoVmFs
dWUudG9VSW50MzIoJmV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxw
dHIpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpBcnJheUJ1ZmZlciYgYnVmZmVyKQotewotICAgIGlmIChhdXRvIHJlc3VsdCA9IGdldENh
Y2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBidWZmZXIpKQotICAgICAgICByZXR1
cm4gcmVzdWx0OwotCi0gICAgLy8gVGhlIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSBmdW5jdGlvbiB3
aWxsIHJlZ2lzdGVyIHRoZSB3cmFwcGVyIGluIGZpbmlzaENyZWF0aW9uLgotICAgIHJldHVybiBK
U0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0ZS0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJh
eUJ1ZmZlclN0cnVjdHVyZShidWZmZXIuc2hhcmluZ01vZGUoKSksICZidWZmZXIpOwotfQotCi1p
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3JiB2aWV3KQotewot
ICAgIHJldHVybiB2aWV3LndyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLWlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1
ZmZlcikKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgcmV0dXJuIHRvSlMoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgKmJ1ZmZlcik7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgaWYgKCF2aWV3KQotICAgICAg
ICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCAqdmlldyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgUmVmPFQ+JiYgcHRyKQotewotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgcHRyLmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBSZWZQdHI8VD4mJiBwdHIpCi17Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBwdHIuZ2V0KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQotewotICAgIEpTQzo6Vk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLQotICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5
KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXplKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rv
ci5zaXplKCk7ICsraSkgewotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwg
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXSkpOwotICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJh
eTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25z
dCBWZWN0b3I8UmVmUHRyPFQ+PiYgdmVjdG9yKQotewotICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LQotICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51
bGxwdHIsIHZlY3Rvci5zaXplKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
Qzo6SlNWYWx1ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7
ICsraSkgewotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXS5nZXQoKSkpOwotICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsK
LX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5hbWUmIHByaXZhdGVOYW1lKQotewot
ICAgIHJldHVybiBKU0M6OlN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHByaXZhdGVOYW1lLnVp
ZCgpKTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB2YWx1ZSwgZmFsc2Up
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVy
YXRvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFQmIHZhbHVlKQotewotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9i
amVjdCgmc3RhdGUsIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZSksIGZhbHNlKTsK
LX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlKQotewotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUs
IEpTQzo6anNVbmRlZmluZWQoKSwgdHJ1ZSk7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpBcnJh
eUJ1ZmZlclZpZXc+IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0s
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93
bmNhc3Q8SlNDOjpKU0FycmF5QnVmZmVyVmlldyo+KHZtLCB2YWx1ZSk7Ci0gICAgaWYgKCF3cmFw
cGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gd3JhcHBlci0+cG9zc2li
bHlTaGFyZWRJbXBsKCk7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+
IHRvVW5zaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICBhdXRvIHJlc3VsdCA9IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXco
dm0sIHZhbHVlKTsKLSAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPmlzU2hhcmVkKCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSBSZWZQ
dHI8SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0s
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZl
VHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8
SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVU
eXBlZFZpZXc8SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8
SlNDOjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVU
eXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8
SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVU
eXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8
SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJs
eVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1
ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVp
bnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6
dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJl
ZFVpbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpT
Qzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZt
LCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvUG9zc2libHlT
aGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1
cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0
b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9z
c2libHlTaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkg
eyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2
NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLQotaW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4g
dG9VbnNoYXJlZEludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0s
IHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQx
NkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9V
bnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQot
aW5saW5lIFJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2
ZVR5cGVkVmlldzxKU0M6OkludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0
cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxK
U0M6OlVpbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4
Q2xhbXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3
PEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxK
U0M6OlVpbnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpT
Qzo6VWludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQz
MkFycmF5PiB0b1Vuc2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDMy
QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4g
dG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7
IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRv
cj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNo
YXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0s
IHZhbHVlKTsgfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1Q+IGlubGluZSBW
ZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotewotICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoIXZhbHVlLmlz
T2JqZWN0KCkpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUp
OwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIFZlY3RvcjxSZWY8VD4+IHJlc3Vs
dDsKLSAgICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpW
TSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAg
ICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlm
IChqc1ZhbHVlLmluaGVyaXRzKHZtLCBKU1Q6OmluZm8oKSkpIHsKLSAgICAgICAgICAgIGF1dG8q
IG9iamVjdCA9IEpTVDo6dG9XcmFwcGVkKHZtLCBqc1ZhbHVlKTsKLSAgICAgICAgICAgIEFTU0VS
VChvYmplY3QpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqb2JqZWN0KTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcigqc3RhdGUsIHNj
b3BlKTsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgU3RyaW5nIHBy
b3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAg
ICBBU1NFUlQoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKTsKLSAgICByZXR1cm4gcHJvcGVydHlO
YW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVpZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUo
KTsKLX0KLQotaW5saW5lIEF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhK
U0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIEF0b21pY1N0cmlu
Zyhwcm9wZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlkKCkgOiBwcm9wZXJ0eU5hbWUu
cHVibGljTmFtZSgpKTsKLX0KLQotdGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiBuYXRpdmVG
dW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBub25DYWNoaW5nU3RhdGlj
RnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RW5jb2RlZEpTVmFsdWUs
IEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSlNDOjpKU1Zh
bHVlOjplbmNvZGUoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLCBsZW5ndGgsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5h
dGl2ZUZ1bmN0aW9uKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBwcm9wYWdhdGVFeGNlcHRp
b24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4
Y2VwdGlvbiYmIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKHN0YXRlLCB0
aHJvd1Njb3BlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpOwotfQotCi1pbmxpbmUgdm9pZCBwcm9wYWdh
dGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZh
bHVlLmhhc0V4Y2VwdGlvbigpKSkKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0
aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhh
c0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93
U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0g
ICAgfQotICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFz
ZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2Vw
dGlvbk9yPFQ+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlv
bigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZh
bHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVs
ZWFzZVJldHVyblZhbHVlKCkpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCog
QmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIFQmIG5vZGUpCiB7CiAgICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRl
LCAmbm9kZSkgPyAmbm9kZSA6IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjExMzUzKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOjIxMTM1MykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAzNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDEx
LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0
IChDKSAyMDEzIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCisKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJDb21tb25W
TS5oIgorI2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmgiCisjaW5jbHVkZSAi
RXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbkhlYWRlcnMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25JbnRlcmZh
Y2VzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgi
CisjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZl
cnQuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0N1
c3RvbS5oIgorI2luY2x1ZGUgIkpTRXhjZXB0aW9uQmFzZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCisjaW5jbHVkZSA8Ynl0ZWNvZGUvQ29kZUJsb2NrLmg+CisjaW5jbHVkZSA8aW5z
cGVjdG9yL1NjcmlwdENhbGxTdGFjay5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxs
U3RhY2tGYWN0b3J5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9FcnJvckhhbmRsaW5nU2Nv
cGUuaD4KKyNpbmNsdWRlIDxydW50aW1lL0Vycm9ySW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0V4Y2VwdGlvbi5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVy
TmFtZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25z
dHJ1Y3Rvck9iamVjdCk7CitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUo
RE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQpOworCit2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNv
bnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGNvbW1vblZNKCkuYWRkSW1w
dXJlUHJvcGVydHkocHJvcGVydHlOYW1lKTsKK30KKworSlNWYWx1ZSBqc093bmVkU3RyaW5nT3JO
dWxsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQoreworICAgIGlmIChzLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgcmV0dXJuIGpzT3duZWRTdHJpbmco
ZXhlYywgcyk7Cit9CisKK0pTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFN0cmluZyYgcykKK3sKKyAgICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHMp
OworfQorCitKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwp
Cit7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Cit9
CisKK0pTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVS
TCYgdXJsKQoreworICAgIGlmICh1cmwuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkp
OworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb0J5dGVTdHJpbmcoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgU3RyaW5nJiYgc3RyaW5nKQoreworICAg
IGlmICghc3RyaW5nLmNvbnRhaW5zT25seUxhdGluMSgpKSB7CisgICAgICAgIHRocm93VHlwZUVy
cm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJl
dHVybiBzdHJpbmc7Cit9CisKK1N0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEV4ZWNTdGF0
ZSYgc3RhdGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmcoKTsKKyAgICByZXR1cm4gc3Ry
aW5nVG9CeXRlU3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKK30KKworU3Ry
aW5nIHZhbHVlVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0
YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgcmV0dXJu
IHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBoYXNVbnBhaXJlZFN1cnJvZ2F0ZShTdHJpbmdWaWV3IHN0cmlu
ZykKK3sKKyAgICAvLyBGYXN0IHBhdGggZm9yIDgtYml0IHN0cmluZ3M7IHRoZXkgY2FuJ3QgaGF2
ZSBhbnkgc3Vycm9nYXRlcy4KKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkp
IHsKKyAgICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5l
IFN0cmluZyBzdHJpbmdUb1VTVlN0cmluZyhTdHJpbmcmJiBzdHJpbmcpCit7CisgICAgLy8gRmFz
dCBwYXRoIGZvciB0aGUgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbm8gdW5wYWlyZWQgc3Vycm9nYXRl
cy4KKyAgICBpZiAoIWhhc1VucGFpcmVkU3Vycm9nYXRlKHN0cmluZykpCisgICAgICAgIHJldHVy
biBzdHJpbmc7CisKKyAgICAvLyBTbG93IHBhdGg6IGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dl
YmlkbC8jZGZuLW9idGFpbi11bmljb2RlCisgICAgLy8gUmVwbGFjZXMgdW5wYWlyZWQgc3Vycm9n
YXRlcyB3aXRoIHRoZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCisgICAgU3RyaW5nQnVpbGRlciBy
ZXN1bHQ7CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShzdHJpbmcubGVuZ3RoKCkpOworICAg
IFN0cmluZ1ZpZXcgdmlldyB7IHN0cmluZyB9OworICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiB2
aWV3LmNvZGVQb2ludHMoKSkgeworICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50
KSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVQb2ludCk7CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIGlkZW50aWZpZXJUb1VT
VlN0cmluZyhFeGVjU3RhdGUmLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQoreworICAg
IFN0cmluZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOworICAgIHJldHVybiBzdHJpbmdU
b1VTVlN0cmluZyhXVEZNb3ZlKHN0cmluZykpOworfQorCitTdHJpbmcgdmFsdWVUb1VTVlN0cmlu
ZyhFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
U3RyaW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhX
VEZNb3ZlKHN0cmluZykpOworfQorCitKU1ZhbHVlIGpzRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGRv
dWJsZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0o
KSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsK
K30KKworZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzTnVt
YmVyKCk7CisgICAgaWYgKCF2YWx1ZS5pbmhlcml0cyhleGVjLT52bSgpLCBEYXRlSW5zdGFuY2U6
OmluZm8oKSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1
aWV0X05hTigpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50
b09iamVjdChleGVjKSktPmludGVybmFsTnVtYmVyKCk7Cit9CisKK3ZvaWQgcmVwb3J0RXhjZXB0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgQ2FjaGVkU2NyaXB0
KiBjYWNoZWRTY3JpcHQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRvKiBl
eGNlcHRpb24gPSBqc0R5bmFtaWNEb3duY2FzdDxKU0M6OkV4Y2VwdGlvbio+KHZtLCBleGNlcHRp
b25WYWx1ZSk7CisgICAgaWYgKCFleGNlcHRpb24pIHsKKyAgICAgICAgZXhjZXB0aW9uID0gdm0u
bGFzdEV4Y2VwdGlvbigpOworICAgICAgICBpZiAoIWV4Y2VwdGlvbikKKyAgICAgICAgICAgIGV4
Y2VwdGlvbiA9IEpTQzo6RXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhjZXB0aW9uVmFs
dWUsIEpTQzo6RXhjZXB0aW9uOjpEb05vdENhcHR1cmVTdGFjayk7CisgICAgfQorCisgICAgcmVw
b3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgY2FjaGVkU2NyaXB0KTsKK30KKworU3RyaW5n
IHJldHJpZXZlRXJyb3JNZXNzYWdlKEV4ZWNTdGF0ZSYgc3RhdGUsIFZNJiB2bSwgSlNWYWx1ZSBl
eGNlcHRpb24sIENhdGNoU2NvcGUmIGNhdGNoU2NvcGUpCit7CisgICAgaWYgKGF1dG8qIGV4Y2Vw
dGlvbkJhc2UgPSB0b0V4Y2VwdGlvbkJhc2Uodm0sIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVy
biBleGNlcHRpb25CYXNlLT50b1N0cmluZygpOworCisgICAgLy8gRklYTUU6IDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3BlY3RvcjogV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9u
IHNob3VsZCBub3QgZXZhbHVhdGUgSmF2YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCisgICAg
Ly8gSWYgdGhpcyBpcyBhIGN1c3RvbSBleGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9u
IGl0IHRvIHRyeSBhbmQgZ2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBl
eGNlcHRpb24uCisgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKKyAgICBpZiAoYXV0byogZXJyb3Ig
PSBqc0R5bmFtaWNEb3duY2FzdDxFcnJvckluc3RhbmNlKj4odm0sIGV4Y2VwdGlvbikpCisgICAg
ICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLT5zYW5pdGl6ZWRUb1N0cmluZygmc3RhdGUpOworICAg
IGVsc2UKKyAgICAgICAgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLnRvV1RGU3RyaW5nKCZzdGF0
ZSk7CisKKyAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIGFueSBuZXcgZXhjZXB0aW9uIHRoYXQgbWF5
IGJlIHRocm93biBpbiB0aGUgdG9TdHJpbmcoKSBjYWxsIGFib3ZlLgorICAgIC8vIHJlcG9ydEV4
Y2VwdGlvbigpIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBtYWtpbmcgbmV3IGV4Y2VwdGlvbnMuCisg
ICAgY2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlv
bigpOworICAgIHJldHVybiBlcnJvck1lc3NhZ2U7Cit9CisKK3ZvaWQgcmVwb3J0RXhjZXB0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0
KiBjYWNoZWRTY3JpcHQsIEV4Y2VwdGlvbkRldGFpbHMqIGV4Y2VwdGlvbkRldGFpbHMpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
QVBJTG9jaygpKTsKKyAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLCBl
eGNlcHRpb24pKQorICAgICAgICByZXR1cm47CisKKyAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJy
b3JTY29wZShleGVjLT52bSgpKTsKKworICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxT
dGFjayhjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwg
U2NyaXB0Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKSk7CisgICAgc2NvcGUu
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKKworICAgIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIGlmIChKU0RPTVdpbmRvdyogd2lu
ZG93ID0ganNEeW5hbWljRG93bmNhc3Q8SlNET01XaW5kb3cqPih2bSwgZ2xvYmFsT2JqZWN0KSkg
eworICAgICAgICBpZiAoIXdpbmRvdy0+d3JhcHBlZCgpLmlzQ3VycmVudGx5RGlzcGxheWVkSW5G
cmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBsaW5lTnVtYmVy
ID0gMDsKKyAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsKKyAgICBTdHJpbmcgZXhjZXB0aW9uU291
cmNlVVJMOworICAgIGlmIChjb25zdCBTY3JpcHRDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxT
dGFjay0+Zmlyc3ROb25OYXRpdmVDYWxsRnJhbWUoKSkgeworICAgICAgICBsaW5lTnVtYmVyID0g
Y2FsbEZyYW1lLT5saW5lTnVtYmVyKCk7CisgICAgICAgIGNvbHVtbk51bWJlciA9IGNhbGxGcmFt
ZS0+Y29sdW1uTnVtYmVyKCk7CisgICAgICAgIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGNhbGxGcmFt
ZS0+c291cmNlVVJMKCk7CisgICAgfQorCisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHJldHJp
ZXZlRXJyb3JNZXNzYWdlKCpleGVjLCB2bSwgZXhjZXB0aW9uLT52YWx1ZSgpLCBzY29wZSk7Cisg
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdsb2Jh
bE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPnJlcG9ydEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51
bWJlciwgZXhjZXB0aW9uU291cmNlVVJMLCBleGNlcHRpb24sIGNhbGxTdGFjay0+c2l6ZSgpID8g
Y2FsbFN0YWNrIDogbnVsbHB0ciwgY2FjaGVkU2NyaXB0KTsKKworICAgIGlmIChleGNlcHRpb25E
ZXRhaWxzKSB7CisgICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPm1lc3NhZ2UgPSBlcnJvck1lc3Nh
Z2U7CisgICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwor
ICAgICAgICBleGNlcHRpb25EZXRhaWxzLT5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7Cisg
ICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPnNvdXJjZVVSTCA9IGV4Y2VwdGlvblNvdXJjZVVSTDsK
KyAgICB9Cit9CisKK3ZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CisgICAgYXV0byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7
CisgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICByZXBvcnRFeGNlcHRpb24oZXhlYywg
ZXhjZXB0aW9uKTsKK30KKworc3RhdGljIEpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgRXhjZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nKiBtZXNzYWdlID0gbnVs
bHB0cikKK3sKKyAgICBpZiAoIWVjIHx8IGVjID09IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IpCisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgLy8gRklYTUU6IEhhbmRsZSBvdGhl
ciBXZWJJREwgZXhjZXB0aW9uIHR5cGVzLgorICAgIGlmIChlYyA9PSBUeXBlRXJyb3IpIHsKKyAg
ICAgICAgaWYgKCFtZXNzYWdlIHx8IG1lc3NhZ2UtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgKm1lc3NhZ2UpOworICAgIH0KKworICAgIGlmIChlYyA9PSBSYW5nZUVycm9yKSB7
CisgICAgICAgIGlmICghbWVzc2FnZSB8fCBtZXNzYWdlLT5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkJhZCB2YWx1ZSIp
KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgKm1lc3NhZ2UpOworICAg
IH0KKworICAgIGlmIChlYyA9PSBTdGFja092ZXJmbG93RXJyb3IpCisgICAgICAgIHJldHVybiBj
cmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisKKyAgICAvLyBGSVhNRTogQWxsIGNhbGxl
cnMgdG8gY3JlYXRlRE9NRXhjZXB0aW9uIG5lZWQgdG8gcGFzcyBpbiB0aGUgY29ycmVjdCBnbG9i
YWwgb2JqZWN0LgorICAgIC8vIEZvciBub3csIHdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGUgbGV4
aWNhbEdsb2JhbE9iamVjdC4gV2hpY2ggaXMgd3JvbmcgaW4gY2FzZXMgbGlrZSB0aGlzOgorICAg
IC8vIGZyYW1lc1swXS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KG51bGwsIG51bGwpOyAvLyB0aHJv
d3MgYW4gZXhjZXB0aW9uIHdoaWNoIHNob3VsZCBoYXZlIHRoZSBzdWJmcmFtZSdzIHByb3RvdHlw
ZXMuCisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGRlcHJlY2F0ZWRHbG9i
YWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYyk7CisKKyAgICBFeGNlcHRpb25Db2RlRGVzY3JpcHRp
b24gZGVzY3JpcHRpb24oZWMpOworCisgICAgQ1N0cmluZyBtZXNzYWdlQ1N0cmluZzsKKyAgICBp
ZiAobWVzc2FnZSkKKyAgICAgICAgbWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlLT51dGY4KCk7Cisg
ICAgaWYgKG1lc3NhZ2UgJiYgIW1lc3NhZ2UtPmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJdCBp
cyBzYWZlIHRvIGRvIHRoaXMgYmVjYXVzZSB0aGUgY2hhciogY29udGVudHMgb2YgdGhlIENTdHJp
bmcgYXJlIGNvcGllZCBpbnRvIGEgbmV3IFdURjo6U3RyaW5nIGJlZm9yZSB0aGUgQ1N0cmluZyBp
cyBkZXN0cm95ZWQuCisgICAgICAgIGRlc2NyaXB0aW9uLmRlc2NyaXB0aW9uID0gbWVzc2FnZUNT
dHJpbmcuZGF0YSgpOworICAgIH0KKworICAgIEpTVmFsdWUgZXJyb3JPYmplY3Q7CisgICAgc3dp
dGNoIChkZXNjcmlwdGlvbi50eXBlKSB7CisgICAgY2FzZSBET01Db3JlRXhjZXB0aW9uVHlwZToK
KyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICBjYXNlIElEQkRhdGFiYXNlRXhjZXB0
aW9uVHlwZToKKyNlbmRpZgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBET01Db3JlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGaWxlRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJyb3JPYmplY3Qg
PSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgRmlsZUV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0
aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1FMRXhjZXB0aW9uVHlwZToKKyAgICAg
ICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1FMRXhjZXB0aW9uOjpj
cmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTVkdFeGNlcHRp
b25UeXBlOgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBT
VkdFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFhQYXRoRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgWFBhdGhFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKGVycm9yT2JqZWN0KTsKKyAgICBh
ZGRFcnJvckluZm8oZXhlYywgYXNPYmplY3QoZXJyb3JPYmplY3QpLCB0cnVlKTsKKyAgICByZXR1
cm4gZXJyb3JPYmplY3Q7Cit9CisKK0pTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgRXhjZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IHJldHVybiBjcmVhdGVET01FeGNlcHRpb24oZXhlYywgZWMsICZtZXNzYWdlKTsKK30KKworSlNW
YWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uJiYgZXhj
ZXB0aW9uKQoreworICAgIHJldHVybiBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBleGNlcHRp
b24uY29kZSgpLCBleGNlcHRpb24ucmVsZWFzZU1lc3NhZ2UoKSk7Cit9CisKK3ZvaWQgcHJvcGFn
YXRlRXhjZXB0aW9uU2xvd1BhdGgoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoIXRo
cm93U2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKHN0YXRlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpKTsKK30K
KworYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gSlNDOjph
c09iamVjdCh2YWx1ZSk7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2Fs
bFR5cGU7CisgICAgSlNWYWx1ZSBhcHBseU1ldGhvZCA9IG9iamVjdC0+Z2V0TWV0aG9kKCZzdGF0
ZSwgY2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwg
QVNDSUlMaXRlcmFsKCJTeW1ib2wuaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNhbGxhYmxl
IikpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKKworICAgIHJldHVy
biAhYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShFeGVjU3RhdGUmIHN0YXRlLCBGcmFtZSYgZnJhbWUs
IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxv
d0FjY2Vzc1RvRnJhbWUoJnN0YXRlLCAmZnJhbWUsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIG1lc3NhZ2UgPSBmcmFtZS5kb2N1bWVudCgpLT5k
b21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93
KCZzdGF0ZSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coRXhlY1N0YXRlJiBzdGF0ZSwgRE9NV2luZG93
JiBnbG9iYWxPYmplY3QsIFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBE
b05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBtZXNz
YWdlID0gZ2xvYmFsT2JqZWN0LmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURP
TVdpbmRvdygmc3RhdGUpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgcHJpbnRFcnJv
ck1lc3NhZ2VGb3JGcmFtZShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sK
KyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgZnJhbWUtPmRvY3VtZW50KCkt
PmRvbVdpbmRvdygpLT5wcmludEVycm9yTWVzc2FnZShtZXNzYWdlKTsKK30KKworU3RydWN0dXJl
KiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCit7CisgICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0
cnVjdHVyZXMgPSBnbG9iYWxPYmplY3Quc3RydWN0dXJlcyhOb0xvY2tpbmdOZWNlc3NhcnkpOwor
ICAgIHJldHVybiBzdHJ1Y3R1cmVzLmdldChjbGFzc0luZm8pLmdldCgpOworfQorCitTdHJ1Y3R1
cmUqIGNhY2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKGdsb2JhbE9iamVjdC52bSgpLmhlYXAsIGds
b2JhbE9iamVjdC5nY0xvY2soKSk7CisgICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMg
PSBnbG9iYWxPYmplY3Quc3RydWN0dXJlcyhsb2NrZXIpOworICAgIEFTU0VSVCghc3RydWN0dXJl
cy5jb250YWlucyhjbGFzc0luZm8pKTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJ
bmZvLCBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPihnbG9iYWxPYmplY3Qudm0oKSwgJmdsb2JhbE9i
amVjdCwgc3RydWN0dXJlKSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworfQorCitzdGF0aWMgY29u
c3QgaW50MzJfdCBrTWF4SW50MzIgPSAweDdmZmZmZmZmOworc3RhdGljIGNvbnN0IGludDMyX3Qg
a01pbkludDMyID0gLWtNYXhJbnQzMiAtIDE7CitzdGF0aWMgY29uc3QgdWludDMyX3Qga01heFVJ
bnQzMiA9IDB4ZmZmZmZmZmZVOworc3RhdGljIGNvbnN0IGludDY0X3Qga0pTTWF4SW50ZWdlciA9
IDB4MjAwMDAwMDAwMDAwMDBMTCAtIDE7IC8vIDJeNTMgLSAxLCBsYXJnZXN0IGludGVnZXIgZXhh
Y3RseSByZXByZXNlbnRhYmxlIGluIEVDTUFTY3JpcHQuCisKK3N0YXRpYyBTdHJpbmcgcmFuZ2VF
cnJvclN0cmluZyhkb3VibGUgdmFsdWUsIGRvdWJsZSBtaW4sIGRvdWJsZSBtYXgpCit7CisgICAg
cmV0dXJuIG1ha2VTdHJpbmcoIlZhbHVlICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2Ny
aXB0KHZhbHVlKSwgIiBpcyBvdXRzaWRlIHRoZSByYW5nZSBbIiwgU3RyaW5nOjpudW1iZXJUb1N0
cmluZ0VDTUFTY3JpcHQobWluKSwgIiwgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3Jp
cHQobWF4KSwgIl0iKTsKK30KKworc3RhdGljIGRvdWJsZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRl
JiBzdGF0ZSwgZG91YmxlIHgsIGRvdWJsZSBtaW5pbXVtLCBkb3VibGUgbWF4aW11bSkKK3sKKyAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkpIHsKKyAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBt
aW5pbXVtLCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB4ID0gdHJ1
bmMoeCk7CisgICAgaWYgKHggPCBtaW5pbXVtIHx8IHggPiBtYXhpbXVtKSB7CisgICAgICAgIHRo
cm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwg
bWF4aW11bSkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHg7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEludFR5cGVMaW1pdHMgeworfTsKKwordGVt
cGxhdGUgPD4KK3N0cnVjdCBJbnRUeXBlTGltaXRzPGludDhfdD4geworICAgIHN0YXRpYyBjb25z
dCBpbnQ4X3QgbWluVmFsdWUgPSAtMTI4OworICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWF4VmFs
dWUgPSAxMjc7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2
OyAvLyAyXjgKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50OF90
PiB7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7CisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKK307CisKK3RlbXBs
YXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czxpbnQxNl90PiB7CisgICAgc3RhdGljIGNvbnN0
IHNob3J0IG1pblZhbHVlID0gLTMyNzY4OworICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtYXhWYWx1
ZSA9IDMyNzY3OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1
NTM2OyAvLyAyXjE2Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVMaW1pdHM8dWlu
dDE2X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbWF4VmFsdWUgPSA2NTUz
NTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8g
Ml4xNgorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIFQgdG9TbWFs
bGVySW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3NpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6
dmFsdWUsICJTaG91bGQgb25seSBiZSB1c2VkIGZvciBzaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsK
KworICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFpdDsKKyAgICAvLyBGYXN0
IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgaW4g
dGhlIHJpZ2h0IHJhbmdlLgorICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpIHsKKyAgICAgICAgaW50
MzJfdCBkID0gdmFsdWUuYXNJbnQzMigpOworICAgICAgICBpZiAoZCA+PSBMaW1pdHNUcmFpdDo6
bWluVmFsdWUgJiYgZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewor
ICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gZCA8IExpbWl0c1Ry
YWl0OjptaW5WYWx1ZSA/IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA6IExpbWl0c1RyYWl0OjptYXhW
YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBkICU9IExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVl
czsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQgPiBMaW1pdHNUcmFpdDo6bWF4VmFs
dWUgPyBkIC0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzIDogZCk7CisgICAgfQorCisgICAg
ZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIDApOworCisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAg
ICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgTGltaXRzVHJhaXQ6Om1pblZhbHVl
LCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xh
bXBUbzxUPih4KTsKKyAgICB9CisKKyAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5m
KHgpIHx8ICF4KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHggPSB4IDwgMCA/IC1mbG9vcihm
YWJzKHgpKSA6IGZsb29yKGZhYnMoeCkpOworICAgIHggPSBmbW9kKHgsIExpbWl0c1RyYWl0Ojpu
dW1iZXJPZlZhbHVlcyk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oeCA+IExpbWl0c1Ry
YWl0OjptYXhWYWx1ZSA/IHggLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiB4KTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb24gY29uZmlndXJhdGlvbikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc191bnNpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUs
ICJTaG91bGQgb25seSBiZSB1c2VkIGZvciB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOworCisg
ICAgdHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OworICAgIC8vIEZhc3QgcGF0
aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRo
ZSByaWdodCByYW5nZS4KKyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkgeworICAgICAgICB1aW50
MzJfdCBkID0gdmFsdWUuYXNVSW50MzIoKTsKKyAgICAgICAgaWYgKGQgPD0gTGltaXRzVHJhaXQ6
Om1heFZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOworICAgICAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
PihkKTsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9y
Y2VSYW5nZToKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisKKyAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRl
LCB4LCAwLCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAw
IDogY2xhbXBUbzxUPih4KTsKKyAgICB9CisKKyAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6
OmlzaW5mKHgpIHx8ICF4KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHggPSB4IDwgMCA/IC1m
bG9vcihmYWJzKHgpKSA6IGZsb29yKGZhYnMoeCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
PihmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcykpOworfQorCitpbnQ4X3QgdG9J
bnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisKK3VpbnQ4X3QgdG9VSW50
OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisKK2ludDhfdCB0b0ludDhD
bGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJu
IHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKK3VpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1
aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xh
bXApOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWJ5dGUKK2ludDhf
dCB0b0ludDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
dG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8j
ZXMtb2N0ZXQKK3VpbnQ4X3QgdG9VSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQorCitpbnQxNl90IHRvSW50
MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOworfQorCit1aW50MTZfdCB0b1VJbnQxNkVu
Zm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVy
biB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKK30KKworaW50MTZfdCB0b0ludDE2Q2xhbXAo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVy
SW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcCk7Cit9CisKK3VpbnQxNl90IHRvVUludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3Rh
dGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKwor
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1zaG9ydAoraW50MTZfdCB0b0ludDE2
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxl
ckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNp
Z25lZC1zaG9ydAordWludDE2X3QgdG9VSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6
Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtbG9uZworaW50MzJfdCB0b0ludDMyRW5mb3JjZVJh
bmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwor
CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIGtN
aW5JbnQzMiwga01heEludDMyKTsKK30KKworaW50MzJfdCB0b0ludDMyQ2xhbXAoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAg
ICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88aW50
MzJfdD4oeCk7Cit9CisKK3VpbnQzMl90IHRvVUludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0
dXJuIHZhbHVlLmFzVUludDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzx1aW50MzJfdD4o
eCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9u
ZwordWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQorICAg
ICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICBy
ZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrTWF4VUludDMyKTsKK30KKworaW50NjRf
dCB0b0ludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3Jj
ZVJhbmdlKHN0YXRlLCB4LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50ZWdlcik7Cit9CisKK3Vp
bnQ2NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4g
ZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrSlNNYXhJbnRlZ2VyKTsKK30KKworaW50NjRfdCB0
b0ludDY0Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAg
IGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25h
bih4KSA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4
PGRvdWJsZT4oeCwgLWtKU01heEludGVnZXIpLCBrSlNNYXhJbnRlZ2VyKSk7Cit9CisKK3VpbnQ2
NF90IHRvVUludDY0Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQor
eworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3Rk
Ojppc25hbih4KSA/IDAgOiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihz
dGQ6Om1heDxkb3VibGU+KHgsIDApLCBrSlNNYXhJbnRlZ2VyKSk7Cit9CisKKy8vIGh0dHA6Ly93
d3cudzMub3JnL1RSL1dlYklETC8jZXMtbG9uZy1sb25nCitpbnQ2NF90IHRvSW50NjQoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7CisKKyAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29u
dmVydCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBu
OworICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsKKyAgICByZXR1cm4gbjsKK30KKworLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nLWxvbmcKK3VpbnQ2NF90
IHRvVUludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworCisgICAgLy8gTWFwIE5hTnMgYW5kICsvLUlu
ZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KKyAgICB1bnNp
Z25lZCBsb25nIGxvbmcgbjsKKyAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7CisgICAgcmV0dXJu
IG47Cit9CisKK2NsYXNzIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgeworcHVibGljOgor
ICAgIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBTdGFj
a1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSkgeworICAgICAgICAg
ICAgbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gU3Rh
Y2tWaXNpdG9yOjpDb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRvKiBjb2Rl
QmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKSkKKyAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0
ID0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBBU1NFUlQodmlzaXRvci0+Y2FsbGVlKCkpOworICAgICAgICAgICAgLy8gRklYTUU6IENhbGxl
ZSBpcyBub3QgYW4gb2JqZWN0IGlmIHRoZSBjYWxsZXIgaXMgV2ViIEFzc2VtYmx5LgorICAgICAg
ICAgICAgLy8gRmlndXJlIG91dCB3aGF0IHRvIGRvIGhlcmUuIFdlIGNhbiBwcm9iYWJseSBnZXQg
dGhlIGdsb2JhbCBvYmplY3QKKyAgICAgICAgICAgIC8vIGZyb20gdGhlIHRvcC1tb3N0IFdhc20g
SW5zdGFuY2UuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MjEK
KyAgICAgICAgICAgIGlmICh2aXNpdG9yLT5jYWxsZWUoKS0+aXNPYmplY3QoKSkKKyAgICAgICAg
ICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxl
ZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0YWNrVmlz
aXRvcjo6RG9uZTsKKyAgICB9CisKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3Q7IH0KKworcHJpdmF0ZToKKyAgICBtdXRhYmxl
IGJvb2wgbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSB7IGZhbHNlIH07CisgICAgbXV0YWJsZSBKU0ds
b2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3QgeyBudWxscHRyIH07Cit9OworCitET01XaW5kb3cm
IGNhbGxlckRPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgR2V0Q2FsbGVyR2xvYmFs
T2JqZWN0RnVuY3RvciBpdGVyOworICAgIGV4ZWMtPml0ZXJhdGUoaXRlcik7CisgICAgcmV0dXJu
IGl0ZXIuZ2xvYmFsT2JqZWN0KCkgPyBhc0pTRE9NV2luZG93KGl0ZXIuZ2xvYmFsT2JqZWN0KCkp
LT53cmFwcGVkKCkgOiBmaXJzdERPTVdpbmRvdyhleGVjKTsKK30KKworRE9NV2luZG93JiBhY3Rp
dmVET01XaW5kb3coRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBhc0pTRE9NV2luZG93
KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKTsKK30KKworRE9NV2luZG93
JiBmaXJzdERPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGFzSlNET01X
aW5kb3coZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgY2FuQWNjZXNzRG9jdW1lbnQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBE
b2N1bWVudCogdGFyZ2V0RG9jdW1lbnQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGlu
Z09wdGlvbikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIXRhcmdldERvY3VtZW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBET01XaW5kb3cmIGFjdGl2ZSA9IGFjdGl2ZURPTVdp
bmRvdyhzdGF0ZSk7CisKKyAgICBpZiAoYWN0aXZlLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2lu
KCkuY2FuQWNjZXNzKHRhcmdldERvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBzd2l0Y2ggKHJlcG9ydGluZ09wdGlvbikgeworICAgIGNhc2Ug
VGhyb3dTZWN1cml0eUVycm9yOgorICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKnN0YXRlLCBz
Y29wZSwgdGFyZ2V0RG9jdW1lbnQtPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9y
TWVzc2FnZShhY3RpdmUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMb2dTZWN1cml0eUVy
cm9yOgorICAgICAgICBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKHRhcmdldERvY3VtZW50LT5m
cmFtZSgpLCB0YXJnZXREb2N1bWVudC0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJy
b3JNZXNzYWdlKGFjdGl2ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERvTm90UmVwb3J0
U2VjdXJpdHlFcnJvcjoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRv
dyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERPTVdpbmRvdyYgdGFyZ2V0LCBTZWN1cml0eVJlcG9y
dGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCit7CisgICAgcmV0dXJuIGNhbkFjY2Vzc0RvY3Vt
ZW50KHN0YXRlLCB0YXJnZXQuZG9jdW1lbnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKK30KKworYm9v
bCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEZyYW1lKiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGlu
Z09wdGlvbikKK3sKKyAgICByZXR1cm4gdGFyZ2V0ICYmIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRl
LCB0YXJnZXQtPmRvY3VtZW50KCksIHJlcG9ydGluZ09wdGlvbik7Cit9CisKK2Jvb2wgQmluZGlu
Z1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IE5vZGUqIHRhcmdldCkKK3sKKyAgICByZXR1cm4gIXRhcmdldCB8fCBjYW5BY2Nlc3NEb2N1bWVu
dCgmc3RhdGUsICZ0YXJnZXQtPmRvY3VtZW50KCksIExvZ1NlY3VyaXR5RXJyb3IpOworfQorICAg
IAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIHRocm93VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
Cit7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgZXJyb3JNZXNz
YWdlKTsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kQXJndW1lbnRNdXN0QmUoU3RyaW5nQnVpbGRl
ciYgYnVpbGRlciwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnRO
YW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUp
Cit7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJBcmd1bWVudCAiKTsKKyAgICBidWlsZGVy
LmFwcGVuZE51bWJlcihhcmd1bWVudEluZGV4ICsgMSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIgKCciKTsKKyAgICBidWlsZGVyLmFwcGVuZChhcmd1bWVudE5hbWUpOworICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiJykgdG8gIik7CisgICAgaWYgKCFmdW5jdGlvbk5hbWUpIHsKKyAg
ICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ0aGUgIik7CisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKGludGVyZmFjZU5hbWUpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBjb25z
dHJ1Y3RvciIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFj
ZU5hbWUpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgnLicpOworICAgICAgICBidWlsZGVyLmFw
cGVuZChmdW5jdGlvbk5hbWUpOworICAgIH0KKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBt
dXN0IGJlICIpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0
ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgYXV0byYgY29udGV4dCA9ICpqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRl
ZCBhdHRlbXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBu
b24tIiwgaW50ZXJmYWNlTmFtZSwgIiBvYmplY3QuIikpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisgICAgCit2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0
ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgYXV0byYgY29udGV4dCA9ICpqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRl
ZCBhdHRlbXB0IHRvIHNldCBwcm9wZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24t
IiwgaW50ZXJmYWNlTmFtZSwgIiBvYmplY3QuIikpOworfQorCit2b2lkIHRocm93Tm90U3VwcG9y
dGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQor
eworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZz
dGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJS
KSk7Cit9CisKK3ZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAg
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVz
c2FnZSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0
aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIsICZtZXNzYWdlU3RyaW5nKSk7Cit9CisKK3Zv
aWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7CisgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7CisgICAg
dGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwg
SU5WQUxJRF9TVEFURV9FUlIsICZtZXNzYWdlU3RyaW5nKSk7Cit9CisKK3ZvaWQgdGhyb3dTZWN1
cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigm
c3RhdGUsIFNFQ1VSSVRZX0VSUiwgbWVzc2FnZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVl
IHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBh
cmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFZhbHVlcykKK3sKKyAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJn
dW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9u
TmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJvbmUgb2Y6ICIpOworICAgIGJ1aWxk
ZXIuYXBwZW5kKGV4cGVjdGVkVmFsdWVzKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigm
c3RhdGUsIHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOworfQorCitKU0M6OkVuY29kZWRKU1Zh
bHVlIHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3Qg
Y2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGFwcGVu
ZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgaW50
ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImEg
ZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBi
dWlsZGVyLnRvU3RyaW5nKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1l
bnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0
IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwor
ICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50
TmFtZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOworICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiYW4gaW5zdGFuY2Ugb2YgIik7CisgICAgYnVpbGRlci5hcHBlbmQoZXhw
ZWN0ZWRUeXBlKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBi
dWlsZGVyLnRvU3RyaW5nKCkpOworfQorCit2b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICB0
aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBBcnJheSBl
bGVtZW50IHR5cGUiKSk7Cit9CisKK3ZvaWQgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3Rl
ZFR5cGUpCit7CisgICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJU
aGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGF0dHJpYnV0ZSBtdXN0
IGJlIGFuIGluc3RhbmNlIG9mICIsIGV4cGVjdGVkVHlwZSkpOworfQorCitKU0M6OkVuY29kZWRK
U1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBj
aGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQoreworICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIk1lbWJlciAi
KTsKKyAgICBidWlsZGVyLmFwcGVuZChkaWN0aW9uYXJ5TmFtZSk7CisgICAgYnVpbGRlci5hcHBl
bmQoJy4nKTsKKyAgICBidWlsZGVyLmFwcGVuZChtZW1iZXJOYW1lKTsKKyAgICBidWlsZGVyLmFw
cGVuZExpdGVyYWwoIiBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiKTsK
KyAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFR5cGUpOworICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Cit9CisKK0pTQzo6RW5j
b2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWls
YWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSkKK3sKKyAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZz
dGF0ZSwgc2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKCZzdGF0ZSwgbWFrZVN0cmluZyhpbnRl
cmZhY2VOYW1lLCAiIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMg
dW5hdmFpbGFibGUiKSkpOworfQorCit2b2lkIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIHRocm93VHlw
ZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJWYWx1ZSBpcyBub3QgYSBzZXF1ZW5j
ZSIpKTsKK30KKwordm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiVGhlIHByb3ZpZGVkIHZhbHVlIGlzIG5vbi1maW5pdGUiKSk7
Cit9CisKK1N0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQoreworICAgIHJldHVybiBtYWtl
U3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGdldHRl
ciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKK30K
KworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgcmV0dXJuIHRocm93Vk1UeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNl
TmFtZSwgYXR0cmlidXRlTmFtZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFBy
b21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKK3sKKyAgICByZXR1
cm4gY3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZUdldHRlclR5
cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgYXR0cmlidXRlTmFtZSkpOworfQorCitib29s
IHRocm93U2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmli
dXRlTmFtZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmco
IlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgc2V0dGVyIGNhbiBv
bmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK1N0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIHJldHVy
biBtYWtlU3RyaW5nKCJDYW4gb25seSBjYWxsICIsIGludGVyZmFjZU5hbWUsICcuJywgZnVuY3Rp
b25OYW1lLCAiIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKK30KKworRW5jb2Rl
ZEpTVmFsdWUgdGhyb3dUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lKQoreworICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUs
IG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpKTsK
K30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3Io
RGVmZXJyZWRQcm9taXNlJiBwcm9taXNlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBtZXRob2ROYW1lKQoreworICAgIHByb21pc2UucmVqZWN0KFR5cGVFcnJvciwgbWFr
ZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitKU0M6OkVuY29kZWRK
U1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCit7
CisgICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1h
a2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7Cit9CisK
K3ZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9u
KQoreworICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7CisgICAgSlNDOjpDYWxsVHlwZSBjYWxs
VHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoJmZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgQVNTRVJU
KGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKKworICAgIEpTQzo6TWFya2VkQXJndW1lbnRC
dWZmZXIgYXJndW1lbnRzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5hcmd1
bWVudENvdW50KCk7ICsraSkKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChzdGF0ZS51bmNoZWNr
ZWRBcmd1bWVudChpKSk7CisgICAgSlNDOjpjYWxsKCZzdGF0ZSwgJmZ1bmN0aW9uLCBjYWxsVHlw
ZSwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVudHMpOworfQorCit2b2lkIERPTUNvbnN0
cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiBjZWxsLCBK
U0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX2luaXRpYWxpemVGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ29uc3Ry
dWN0b3IgcmVxdWlyZXMgJ25ldycgb3BlcmF0b3IiKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSk7Cit9CisKK0NhbGxUeXBlIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpnZXRD
YWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0
aXZlLmZ1bmN0aW9uID0gY2FsbFRocm93VHlwZUVycm9yOworICAgIHJldHVybiBDYWxsVHlwZTo6
SG9zdDsKK30KKwordm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlv
bigpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRp
b24oJnN0YXRlLCBTWU5UQVhfRVJSKSk7Cit9CisKK3ZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgREFUQV9DTE9ORV9FUlIpKTsKK30KKwordm9p
ZCB0aHJvd0luZGV4U2l6ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTkRF
WF9TSVpFX0VSUikpOworfQorCit2b2lkIHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0
ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFRZUEVfTUlTTUFUQ0hfRVJSKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQoj
IyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
c3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw5NTkgKzIwLDE3IEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUg
IkpTRE9NQ29uc3RydWN0b3IuaCIKIAotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1
ZGUgIkNvbW1vblZNLmgiCi0jaW5jbHVkZSAiRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCIK
LSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2Ny
aXB0aW9uLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uSGVhZGVycy5oIgotI2luY2x1ZGUgIkV4Y2Vw
dGlvbkludGVyZmFjZXMuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxQYXJz
ZXJJZGlvbXMuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUg
IkpTRE9NQ29udmVydC5oIgotI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgotI2luY2x1ZGUgIkpT
RE9NV2luZG93Q3VzdG9tLmgiCi0jaW5jbHVkZSAiSlNFeGNlcHRpb25CYXNlLmgiCi0jaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlIDxieXRlY29kZS9Db2RlQmxvY2suaD4KLSNp
bmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4KLSNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5j
ZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9y
SGFuZGxpbmdTY29wZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5oPgotI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25I
ZWxwZXJzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8c3Rk
YXJnLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9DaGFyYWN0ZXJOYW1lcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGluZXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
LXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1RB
VElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yT2JqZWN0
KTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3Rv
cldpdGhEb2N1bWVudCk7Ci0KLXZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShw
cm9wZXJ0eU5hbWUpOwotfQotCi1KU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgaWYgKHMuaXNOdWxsKCkpCi0gICAgICAg
IHJldHVybiBqc051bGwoKTsKLSAgICByZXR1cm4ganNPd25lZFN0cmluZyhleGVjLCBzKTsKLX0K
LQotSlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3Ry
aW5nJiBzKQotewotICAgIGlmIChzLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcyk7Ci19Ci0KLUpTVmFs
dWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKLXsKLSAgICByZXR1
cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdXJsLnN0cmluZygpKTsKLX0KLQotSlNWYWx1ZSBq
c1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCi17Ci0g
ICAgaWYgKHVybC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
cmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlLCBTdHJpbmcmJiBzdHJpbmcpCi17Ci0gICAgaWYgKCFzdHJpbmcu
Y29udGFpbnNPbmx5TGF0aW4xKCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBz
Y29wZSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0cmluZzsK
LX0KLQotU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIFN0cmluZyBz
dHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOwotICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJp
bmcoc3RhdGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOwotfQotCi1TdHJpbmcgdmFsdWVUb0J5
dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0g
PSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LQotICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICByZXR1cm4gc3RyaW5nVG9CeXRl
U3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotc3RhdGljIGlubGlu
ZSBib29sIGhhc1VucGFpcmVkU3Vycm9nYXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQotewotICAgIC8v
IEZhc3QgcGF0aCBmb3IgOC1iaXQgc3RyaW5nczsgdGhleSBjYW4ndCBoYXZlIGFueSBzdXJyb2dh
dGVzLgotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBmb3IgKGF1dG8gY29kZVBvaW50IDogc3RyaW5nLmNvZGVQb2ludHMoKSkgewotICAgICAgICBp
ZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmlu
Z1RvVVNWU3RyaW5nKFN0cmluZyYmIHN0cmluZykKLXsKLSAgICAvLyBGYXN0IHBhdGggZm9yIHRo
ZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBubyB1bnBhaXJlZCBzdXJyb2dhdGVzLgotICAgIGlmICgh
aGFzVW5wYWlyZWRTdXJyb2dhdGUoc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIHN0cmluZzsKLQot
ICAgIC8vIFNsb3cgcGF0aDogaHR0cDovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tb2J0
YWluLXVuaWNvZGUKLSAgICAvLyBSZXBsYWNlcyB1bnBhaXJlZCBzdXJyb2dhdGVzIHdpdGggdGhl
IHJlcGxhY2VtZW50IGNoYXJhY3Rlci4KLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICBy
ZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nVmlldyB2
aWV3IHsgc3RyaW5nIH07Ci0gICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHZpZXcuY29kZVBvaW50
cygpKSB7Ci0gICAgICAgIGlmIChVX0lTX1NVUlJPR0FURShjb2RlUG9pbnQpKQotICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVudENoYXJhY3Rlcik7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29kZVBvaW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJl
c3VsdC50b1N0cmluZygpOwotfQotCi1TdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEV4ZWNT
dGF0ZSYsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCi17Ci0gICAgU3RyaW5nIHN0cmlu
ZyA9IGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdU
Rk1vdmUoc3RyaW5nKSk7Ci19Ci0KLVN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBTdHJpbmcgc3RyaW5n
ID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOwotCi0gICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5n
KSk7Ci19Ci0KLUpTVmFsdWUganNEYXRlKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlKQot
ewotICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOwotfQotCi1kb3VibGUg
dmFsdWVUb0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2
YWx1ZS5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNOdW1iZXIoKTsKLSAgICBp
ZiAoIXZhbHVlLmluaGVyaXRzKGV4ZWMtPnZtKCksIERhdGVJbnN0YW5jZTo6aW5mbygpKSkKLSAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHZhbHVlLnRvT2JqZWN0KGV4ZWMp
KS0+aW50ZXJuYWxOdW1iZXIoKTsKLX0KLQotdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlw
dCkKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1
cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpz
RHluYW1pY0Rvd25jYXN0PEpTQzo6RXhjZXB0aW9uKj4odm0sIGV4Y2VwdGlvblZhbHVlKTsKLSAg
ICBpZiAoIWV4Y2VwdGlvbikgewotICAgICAgICBleGNlcHRpb24gPSB2bS5sYXN0RXhjZXB0aW9u
KCk7Ci0gICAgICAgIGlmICghZXhjZXB0aW9uKQotICAgICAgICAgICAgZXhjZXB0aW9uID0gSlND
OjpFeGNlcHRpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGNlcHRpb25WYWx1ZSwgSlNDOjpFeGNl
cHRpb246OkRvTm90Q2FwdHVyZVN0YWNrKTsKLSAgICB9Ci0KLSAgICByZXBvcnRFeGNlcHRpb24o
ZXhlYywgZXhjZXB0aW9uLCBjYWNoZWRTY3JpcHQpOwotfQotCi1TdHJpbmcgcmV0cmlldmVFcnJv
ck1lc3NhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgVk0mIHZtLCBKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2F0
Y2hTY29wZSYgY2F0Y2hTY29wZSkKLXsKLSAgICBpZiAoYXV0byogZXhjZXB0aW9uQmFzZSA9IHRv
RXhjZXB0aW9uQmFzZSh2bSwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkJh
c2UtPnRvU3RyaW5nKCk7Ci0KLSAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE1
MDg3PiBXZWIgSW5zcGVjdG9yOiBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24gc2hvdWxkIG5vdCBl
dmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKLSAgICAvLyBJZiB0aGlzIGlz
IGEgY3VzdG9tIGV4Y2VwdGlvbiBvYmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5IGFu
ZCBnZXQgYSBuaWNlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4KLSAg
ICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlmIChhdXRvKiBlcnJvciA9IGpzRHluYW1pY0Rv
d25jYXN0PEVycm9ySW5zdGFuY2UqPih2bSwgZXhjZXB0aW9uKSkKLSAgICAgICAgZXJyb3JNZXNz
YWdlID0gZXJyb3ItPnNhbml0aXplZFRvU3RyaW5nKCZzdGF0ZSk7Ci0gICAgZWxzZQotICAgICAg
ICBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb24udG9XVEZTdHJpbmcoJnN0YXRlKTsKLQotICAgIC8v
IFdlIG5lZWQgdG8gY2xlYXIgYW55IG5ldyBleGNlcHRpb24gdGhhdCBtYXkgYmUgdGhyb3duIGlu
IHRoZSB0b1N0cmluZygpIGNhbGwgYWJvdmUuCi0gICAgLy8gcmVwb3J0RXhjZXB0aW9uKCkgaXMg
bm90IHN1cHBvc2VkIHRvIGJlIG1ha2luZyBuZXcgZXhjZXB0aW9ucy4KLSAgICBjYXRjaFNjb3Bl
LmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgdm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7Ci0gICAgcmV0
dXJuIGVycm9yTWVzc2FnZTsKLX0KLQotdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBl
eGVjLCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlw
dCwgRXhjZXB0aW9uRGV0YWlscyogZXhjZXB0aW9uRGV0YWlscykKLXsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQot
ICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwot
ICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24odm0sIGV4Y2VwdGlvbikpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4ZWMt
PnZtKCkpOwotCi0gICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNj
cmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBTY3JpcHRDYWxsU3Rh
Y2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUpKTsKLSAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOwotICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOwotCi0gICAgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSk7Ci0gICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cgPSBqc0R5bmFt
aWNEb3duY2FzdDxKU0RPTVdpbmRvdyo+KHZtLCBnbG9iYWxPYmplY3QpKSB7Ci0gICAgICAgIGlm
ICghd2luZG93LT53cmFwcGVkKCkuaXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAgIGlu
dCBjb2x1bW5OdW1iZXIgPSAwOwotICAgIFN0cmluZyBleGNlcHRpb25Tb3VyY2VVUkw7Ci0gICAg
aWYgKGNvbnN0IFNjcmlwdENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbFN0YWNrLT5maXJzdE5v
bk5hdGl2ZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIGxpbmVOdW1iZXIgPSBjYWxsRnJhbWUtPmxp
bmVOdW1iZXIoKTsKLSAgICAgICAgY29sdW1uTnVtYmVyID0gY2FsbEZyYW1lLT5jb2x1bW5OdW1i
ZXIoKTsKLSAgICAgICAgZXhjZXB0aW9uU291cmNlVVJMID0gY2FsbEZyYW1lLT5zb3VyY2VVUkwo
KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gcmV0cmlldmVFcnJvck1lc3Nh
Z2UoKmV4ZWMsIHZtLCBleGNlcHRpb24tPnZhbHVlKCksIHNjb3BlKTsKLSAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cmVwb3J0
RXhjZXB0aW9uKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBleGNlcHRp
b25Tb3VyY2VVUkwsIGV4Y2VwdGlvbiwgY2FsbFN0YWNrLT5zaXplKCkgPyBjYWxsU3RhY2sgOiBu
dWxscHRyLCBjYWNoZWRTY3JpcHQpOwotCi0gICAgaWYgKGV4Y2VwdGlvbkRldGFpbHMpIHsKLSAg
ICAgICAgZXhjZXB0aW9uRGV0YWlscy0+bWVzc2FnZSA9IGVycm9yTWVzc2FnZTsKLSAgICAgICAg
ZXhjZXB0aW9uRGV0YWlscy0+bGluZU51bWJlciA9IGxpbmVOdW1iZXI7Ci0gICAgICAgIGV4Y2Vw
dGlvbkRldGFpbHMtPmNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJlcjsKLSAgICAgICAgZXhjZXB0
aW9uRGV0YWlscy0+c291cmNlVVJMID0gZXhjZXB0aW9uU291cmNlVVJMOwotICAgIH0KLX0KLQot
dm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZt
KTsKLSAgICBhdXRvKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKLSAgICBzY29wZS5j
bGVhckV4Y2VwdGlvbigpOwotICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwot
fQotCi1zdGF0aWMgSlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBF
eGNlcHRpb25Db2RlIGVjLCBjb25zdCBTdHJpbmcqIG1lc3NhZ2UgPSBudWxscHRyKQotewotICAg
IGlmICghZWMgfHwgZWMgPT0gRXhpc3RpbmdFeGNlcHRpb25FcnJvcikKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBGSVhNRTogSGFuZGxlIG90aGVyIFdlYklETCBleGNl
cHRpb24gdHlwZXMuCi0gICAgaWYgKGVjID09IFR5cGVFcnJvcikgewotICAgICAgICBpZiAoIW1l
c3NhZ2UgfHwgbWVzc2FnZS0+aXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVR5
cGVFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAqbWVz
c2FnZSk7Ci0gICAgfQotCi0gICAgaWYgKGVjID09IFJhbmdlRXJyb3IpIHsKLSAgICAgICAgaWYg
KCFtZXNzYWdlIHx8IG1lc3NhZ2UtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBjcmVh
dGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQmFkIHZhbHVlIikpOwotICAgICAgICBy
ZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAqbWVzc2FnZSk7Ci0gICAgfQotCi0gICAgaWYg
KGVjID09IFN0YWNrT3ZlcmZsb3dFcnJvcikKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YWNrT3Zl
cmZsb3dFcnJvcihleGVjKTsKLQotICAgIC8vIEZJWE1FOiBBbGwgY2FsbGVycyB0byBjcmVhdGVE
T01FeGNlcHRpb24gbmVlZCB0byBwYXNzIGluIHRoZSBjb3JyZWN0IGdsb2JhbCBvYmplY3QuCi0g
ICAgLy8gRm9yIG5vdywgd2UncmUgZ29pbmcgdG8gYXNzdW1lIHRoZSBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LiBXaGljaCBpcyB3cm9uZyBpbiBjYXNlcyBsaWtlIHRoaXM6Ci0gICAgLy8gZnJhbWVzWzBd
LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobnVsbCwgbnVsbCk7IC8vIHRocm93cyBhbiBleGNlcHRp
b24gd2hpY2ggc2hvdWxkIGhhdmUgdGhlIHN1YmZyYW1lJ3MgcHJvdG90eXBlcy4KLSAgICBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclBy
b3RvdHlwZShleGVjKTsKLQotICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlv
bihlYyk7Ci0KLSAgICBDU3RyaW5nIG1lc3NhZ2VDU3RyaW5nOwotICAgIGlmIChtZXNzYWdlKQot
ICAgICAgICBtZXNzYWdlQ1N0cmluZyA9IG1lc3NhZ2UtPnV0ZjgoKTsKLSAgICBpZiAobWVzc2Fn
ZSAmJiAhbWVzc2FnZS0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEl0IGlzIHNhZmUgdG8gZG8g
dGhpcyBiZWNhdXNlIHRoZSBjaGFyKiBjb250ZW50cyBvZiB0aGUgQ1N0cmluZyBhcmUgY29waWVk
IGludG8gYSBuZXcgV1RGOjpTdHJpbmcgYmVmb3JlIHRoZSBDU3RyaW5nIGlzIGRlc3Ryb3llZC4K
LSAgICAgICAgZGVzY3JpcHRpb24uZGVzY3JpcHRpb24gPSBtZXNzYWdlQ1N0cmluZy5kYXRhKCk7
Ci0gICAgfQotCi0gICAgSlNWYWx1ZSBlcnJvck9iamVjdDsKLSAgICBzd2l0Y2ggKGRlc2NyaXB0
aW9uLnR5cGUpIHsKLSAgICBjYXNlIERPTUNvcmVFeGNlcHRpb25UeXBlOgotI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotICAgIGNhc2UgSURCRGF0YWJhc2VFeGNlcHRpb25UeXBlOgotI2Vu
ZGlmCi0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIERPTUNv
cmVFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEZpbGVFeGNlcHRpb25UeXBlOgotICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCBGaWxlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBTUUxFeGNlcHRpb25UeXBlOgotICAgICAgICBlcnJvck9iamVj
dCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTUUxFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlw
dGlvbikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR0V4Y2VwdGlvblR5cGU6Ci0gICAg
ICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFNWR0V4Y2VwdGlvbjo6
Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgWFBhdGhFeGNl
cHRpb25UeXBlOgotICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBYUGF0aEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KICAgICAKLSAgICBBU1NFUlQoZXJyb3JPYmplY3QpOwotICAgIGFkZEVycm9ySW5mbyhl
eGVjLCBhc09iamVjdChlcnJvck9iamVjdCksIHRydWUpOwotICAgIHJldHVybiBlcnJvck9iamVj
dDsKLX0KLQotSlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNl
cHRpb25Db2RlIGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIGNyZWF0
ZURPTUV4Y2VwdGlvbihleGVjLCBlYywgJm1lc3NhZ2UpOwotfQotCi1KU1ZhbHVlIGNyZWF0ZURP
TUV4Y2VwdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCi17Ci0g
ICAgcmV0dXJuIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIGV4Y2VwdGlvbi5jb2RlKCksIGV4
Y2VwdGlvbi5yZWxlYXNlTWVzc2FnZSgpKTsKLX0KLQotdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25T
bG93UGF0aChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29w
ZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQotewotICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNl
cHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVE
T01FeGNlcHRpb24oc3RhdGUsIFdURk1vdmUoZXhjZXB0aW9uKSkpOwotfQotCi1ib29sIGhhc0l0
ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ewotICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVl
KTsKLSAgICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZTsKLSAgICBK
U1ZhbHVlIGFwcGx5TWV0aG9kID0gb2JqZWN0LT5nZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwg
Y2FsbFR5cGUsIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBBU0NJSUxpdGVyYWwo
IlN5bWJvbC5pdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotCi0gICAgcmV0dXJuICFhcHBseU1ldGhv
ZC5pc1VuZGVmaW5lZCgpOwotfQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb0ZyYW1lKEV4ZWNTdGF0ZSYgc3RhdGUsIEZyYW1lJiBmcmFtZSwgU3RyaW5nJiBtZXNz
YWdlKQotewotICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFt
ZSgmc3RhdGUsICZmcmFtZSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgbWVzc2FnZSA9IGZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5j
cm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb0RPTVdpbmRvdyhFeGVjU3RhdGUmIHN0YXRlLCBET01XaW5kb3cmIGdsb2JhbE9iamVj
dCwgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRlLCBnbG9iYWxPYmplY3QsIERvTm90UmVwb3J0U2Vj
dXJpdHlFcnJvcikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIG1lc3NhZ2UgPSBnbG9iYWxP
YmplY3QuY3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZzdGF0
ZSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZy
YW1lKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICghZnJh
bWUpCi0gICAgICAgIHJldHVybjsKLSAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkt
PnByaW50RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOwotfQotCi1TdHJ1Y3R1cmUqIGdldENhY2hlZERP
TVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBDbGFzc0lu
Zm8qIGNsYXNzSW5mbykKLXsKLSAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGds
b2JhbE9iamVjdC5zdHJ1Y3R1cmVzKE5vTG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgcmV0dXJuIHN0
cnVjdHVyZXMuZ2V0KGNsYXNzSW5mbykuZ2V0KCk7Ci19Ci0KLVN0cnVjdHVyZSogY2FjaGVET01T
dHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQotewotICAgIGF1dG8gbG9ja2VyID0g
bG9ja0R1cmluZ01hcmtpbmcoZ2xvYmFsT2JqZWN0LnZtKCkuaGVhcCwgZ2xvYmFsT2JqZWN0Lmdj
TG9jaygpKTsKLSAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVj
dC5zdHJ1Y3R1cmVzKGxvY2tlcik7Ci0gICAgQVNTRVJUKCFzdHJ1Y3R1cmVzLmNvbnRhaW5zKGNs
YXNzSW5mbykpOwotICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChjbGFzc0luZm8sIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC52bSgpLCAmZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1
cmUpKS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBpbnQzMl90IGtN
YXhJbnQzMiA9IDB4N2ZmZmZmZmY7Ci1zdGF0aWMgY29uc3QgaW50MzJfdCBrTWluSW50MzIgPSAt
a01heEludDMyIC0gMTsKLXN0YXRpYyBjb25zdCB1aW50MzJfdCBrTWF4VUludDMyID0gMHhmZmZm
ZmZmZlU7Ci1zdGF0aWMgY29uc3QgaW50NjRfdCBrSlNNYXhJbnRlZ2VyID0gMHgyMDAwMDAwMDAw
MDAwMExMIC0gMTsgLy8gMl41MyAtIDEsIGxhcmdlc3QgaW50ZWdlciBleGFjdGx5IHJlcHJlc2Vu
dGFibGUgaW4gRUNNQVNjcmlwdC4KLQotc3RhdGljIFN0cmluZyByYW5nZUVycm9yU3RyaW5nKGRv
dWJsZSB2YWx1ZSwgZG91YmxlIG1pbiwgZG91YmxlIG1heCkKLXsKLSAgICByZXR1cm4gbWFrZVN0
cmluZygiVmFsdWUgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQodmFsdWUpLCAi
IGlzIG91dHNpZGUgdGhlIHJhbmdlIFsiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlw
dChtaW4pLCAiLCAiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtYXgpLCAiXSIp
OwotfQotCi1zdGF0aWMgZG91YmxlIGVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBkb3Vi
bGUgeCwgZG91YmxlIG1pbmltdW0sIGRvdWJsZSBtYXhpbXVtKQotewotICAgIFZNJiB2bSA9IHN0
YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0g
ICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSkgewotICAgICAgICB0aHJvd1R5
cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5nZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1heGlt
dW0pKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHggPSB0cnVuYyh4KTsKLSAgICBp
ZiAoeCA8IG1pbmltdW0gfHwgeCA+IG1heGltdW0pIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4geDsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0cyB7Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3Ry
dWN0IEludFR5cGVMaW1pdHM8aW50OF90PiB7Ci0gICAgc3RhdGljIGNvbnN0IGludDhfdCBtaW5W
YWx1ZSA9IC0xMjg7Ci0gICAgc3RhdGljIGNvbnN0IGludDhfdCBtYXhWYWx1ZSA9IDEyNzsKLSAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAotfTsK
LQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQ4X3Q+IHsKLSAgICBzdGF0
aWMgY29uc3QgdWludDhfdCBtYXhWYWx1ZSA9IDI1NTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVj
dCBJbnRUeXBlTGltaXRzPGludDE2X3Q+IHsKLSAgICBzdGF0aWMgY29uc3Qgc2hvcnQgbWluVmFs
dWUgPSAtMzI3Njg7Ci0gICAgc3RhdGljIGNvbnN0IHNob3J0IG1heFZhbHVlID0gMzI3Njc7Ci0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gNjU1MzY7IC8vIDJeMTYK
LX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50MTZfdD4gewotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtYXhWYWx1ZSA9IDY1NTM1OwotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Ci19OwotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJJbnQoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3Vs
ZCBvbmx5IGJlIHVzZWQgZm9yIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOwotCi0gICAgdHlwZWRl
ZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OwotICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUg
dmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFu
Z2UuCi0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkgewotICAgICAgICBpbnQzMl90IGQgPSB2YWx1
ZS5hc0ludDMyKCk7Ci0gICAgICAgIGlmIChkID49IExpbWl0c1RyYWl0OjptaW5WYWx1ZSAmJiBk
IDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPihkKTsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZToKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiBkIDwgTGltaXRzVHJhaXQ6Om1pblZhbHVl
ID8gTGltaXRzVHJhaXQ6Om1pblZhbHVlIDogTGltaXRzVHJhaXQ6Om1heFZhbHVlOwotICAgICAg
ICB9Ci0gICAgICAgIGQgJT0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzOwotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/IGQgLSBMaW1p
dHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiBkKTsKLSAgICB9Ci0KLSAgICBkb3VibGUgeCA9IHZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7
Ci0KLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICByZXR1cm4g
ZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBMaW1pdHNUcmFpdDo6bWluVmFsdWUsIExpbWl0c1RyYWl0
OjptYXhWYWx1ZSk7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wOgotICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOwot
ICAgIH0KLQotICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxv
b3IoZmFicyh4KSk7Ci0gICAgeCA9IGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVz
KTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih4ID4gTGltaXRzVHJhaXQ6Om1heFZhbHVl
ID8geCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyA6IHgpOwotfQotCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50KEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1
cmF0aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2ln
bmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5
IGJlIHVzZWQgZm9yIHVuc2lnbmVkIGludGVncmFsIHR5cGVzIik7Ci0KLSAgICB0eXBlZGVmIElu
dFR5cGVMaW1pdHM8VD4gTGltaXRzVHJhaXQ7Ci0gICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1
ZSBpcyBhbHJlYWR5IGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdl
LgotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKSB7Ci0gICAgICAgIHVpbnQzMl90IGQgPSB2YWx1
ZS5hc1VJbnQzMigpOwotICAgICAgICBpZiAoZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCi0g
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7Ci0gICAgICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsOgotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwotICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1w
OgotICAgICAgICAgICAgcmV0dXJuIExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLQotICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
ewotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZv
cmNlUmFuZ2U6Ci0gICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIExpbWl0
c1RyYWl0OjptYXhWYWx1ZSk7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wOgotICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+
KHgpOwotICAgIH0KLQotICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwg
IXgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkp
IDogZmxvb3IoZmFicyh4KSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGZtb2QoeCwgTGlt
aXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKSk7Ci19Ci0KLWludDhfdCB0b0ludDhFbmZvcmNlUmFu
Z2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0
b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotdWludDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9T
bWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotaW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50
PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wKTsKLX0KLQotdWludDhfdCB0b1VJbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRl
LCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Ci19Ci0KLS8v
IGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtYnl0ZQotaW50OF90IHRvSW50OChFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8
aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1vY3RldAotdWlu
dDhfdCB0b1VJbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0
dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLWludDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5n
ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxs
ZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLXVpbnQxNl90IHRvVUludDE2RW5mb3JjZVJhbmdlKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJ
bnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2UpOwotfQotCi1pbnQxNl90IHRvSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4o
c3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKLX0K
LQotdWludDE2X3QgdG9VSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi0vLyBodHRwOi8vd3d3
LnczLm9yZy9UUi9XZWJJREwvI2VzLXNob3J0Ci1pbnQxNl90IHRvSW50MTYoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+
KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwot
fQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLXNob3J0Ci11
aW50MTZfdCB0b1VJbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAg
IHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvV2ViSURMLyNlcy1sb25nCi1pbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmICh2YWx1ZS5p
c0ludDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICBkb3VibGUg
eCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgMCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwga01pbkludDMyLCBrTWF4
SW50MzIpOwotfQotCi1pbnQzMl90IHRvSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiB2
YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
Ci0gICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxpbnQzMl90Pih4KTsKLX0K
LQotdWludDMyX3QgdG9VSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQotewotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNV
SW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBy
ZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPHVpbnQzMl90Pih4KTsKLX0KLQotLy8g
aHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nCi11aW50MzJfdCB0
b1VJbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgIHJldHVybiB2
YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVybiBlbmZvcmNl
UmFuZ2Uoc3RhdGUsIHgsIDAsIGtNYXhVSW50MzIpOwotfQotCi1pbnQ2NF90IHRvSW50NjRFbmZv
cmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUs
IHgsIC1rSlNNYXhJbnRlZ2VyLCBrSlNNYXhJbnRlZ2VyKTsKLX0KLQotdWludDY0X3QgdG9VSW50
NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewot
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uo
c3RhdGUsIHgsIDAsIGtKU01heEludGVnZXIpOwotfQotCi1pbnQ2NF90IHRvSW50NjRDbGFtcChF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2
YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0
YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAt
a0pTTWF4SW50ZWdlciksIGtKU01heEludGVnZXIpKTsKLX0KLQotdWludDY0X3QgdG9VSW50NjRD
bGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8g
MCA6IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJs
ZT4oeCwgMCksIGtKU01heEludGVnZXIpKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIv
V2ViSURMLyNlcy1sb25nLWxvbmcKLWludDY0X3QgdG9JbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsK
LQotICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2
YWx1ZXMgbW9kdWxvIDJeNjQuCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIG47Ci0gICAgZG91Ymxl
VG9JbnRlZ2VyKHgsIG4pOwotICAgIHJldHVybiBuOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9y
Zy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmctbG9uZwotdWludDY0X3QgdG9VSW50NjQoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7Ci0KLSAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsg
Y29udmVydCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0LgotICAgIHVuc2lnbmVkIGxvbmcgbG9u
ZyBuOwotICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsKLSAgICByZXR1cm4gbjsKLX0KLQotY2xh
c3MgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvciB7Ci1wdWJsaWM6Ci0gICAgR2V0Q2FsbGVy
R2xvYmFsT2JqZWN0RnVuY3RvcigpID0gZGVmYXVsdDsKLQotICAgIFN0YWNrVmlzaXRvcjo6U3Rh
dHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAg
ICAgaWYgKCFtX2hhc1NraXBwZWRGaXJzdEZyYW1lKSB7Ci0gICAgICAgICAgICBtX2hhc1NraXBw
ZWRGaXJzdEZyYW1lID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNv
bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF1dG8qIGNvZGVCbG9jayA9IHZpc2l0
b3ItPmNvZGVCbG9jaygpKQotICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBjb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh2aXNp
dG9yLT5jYWxsZWUoKSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQ2FsbGVlIGlzIG5vdCBhbiBv
YmplY3QgaWYgdGhlIGNhbGxlciBpcyBXZWIgQXNzZW1ibHkuCi0gICAgICAgICAgICAvLyBGaWd1
cmUgb3V0IHdoYXQgdG8gZG8gaGVyZS4gV2UgY2FuIHByb2JhYmx5IGdldCB0aGUgZ2xvYmFsIG9i
amVjdAotICAgICAgICAgICAgLy8gZnJvbSB0aGUgdG9wLW1vc3QgV2FzbSBJbnN0YW5jZS4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcyMQotICAgICAgICAgICAg
aWYgKHZpc2l0b3ItPmNhbGxlZSgpLT5pc09iamVjdCgpKQotICAgICAgICAgICAgICAgIG1fZ2xv
YmFsT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkpLT5nbG9iYWxP
YmplY3QoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwot
ICAgIH0KLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVy
biBtX2dsb2JhbE9iamVjdDsgfQotCi1wcml2YXRlOgotICAgIG11dGFibGUgYm9vbCBtX2hhc1Nr
aXBwZWRGaXJzdEZyYW1lIHsgZmFsc2UgfTsKLSAgICBtdXRhYmxlIEpTR2xvYmFsT2JqZWN0KiBt
X2dsb2JhbE9iamVjdCB7IG51bGxwdHIgfTsKLX07Ci0KLURPTVdpbmRvdyYgY2FsbGVyRE9NV2lu
ZG93KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9y
IGl0ZXI7Ci0gICAgZXhlYy0+aXRlcmF0ZShpdGVyKTsKLSAgICByZXR1cm4gaXRlci5nbG9iYWxP
YmplY3QoKSA/IGFzSlNET01XaW5kb3coaXRlci5nbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKSA6
IGZpcnN0RE9NV2luZG93KGV4ZWMpOwotfQotCi1ET01XaW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOwotfQotCi1ET01XaW5kb3cmIGZpcnN0RE9NV2lu
ZG93KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT52
bUVudHJ5R2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v
bCBjYW5BY2Nlc3NEb2N1bWVudChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERvY3VtZW50KiB0YXJn
ZXREb2N1bWVudCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQotewot
ICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgIGlmICghdGFyZ2V0RG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIERPTVdpbmRvdyYgYWN0aXZlID0gYWN0aXZlRE9NV2luZG93KHN0YXRlKTsK
LQotICAgIGlmIChhY3RpdmUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5jYW5BY2Nlc3Mo
dGFyZ2V0RG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIHN3aXRjaCAocmVwb3J0aW5nT3B0aW9uKSB7Ci0gICAgY2FzZSBUaHJvd1NlY3VyaXR5
RXJyb3I6Ci0gICAgICAgIHRocm93U2VjdXJpdHlFcnJvcigqc3RhdGUsIHNjb3BlLCB0YXJnZXRE
b2N1bWVudC0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2
ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExvZ1NlY3VyaXR5RXJyb3I6Ci0gICAgICAg
IHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUodGFyZ2V0RG9jdW1lbnQtPmZyYW1lKCksIHRhcmdl
dERvY3VtZW50LT5kb21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0
aXZlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9y
OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
QmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgRE9NV2luZG93JiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJl
cG9ydGluZ09wdGlvbikKLXsKLSAgICByZXR1cm4gY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRh
cmdldC5kb2N1bWVudCgpLCByZXBvcnRpbmdPcHRpb24pOwotfQotCi1ib29sIEJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRnJh
bWUqIHRhcmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQotewot
ICAgIHJldHVybiB0YXJnZXQgJiYgY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC0+ZG9j
dW1lbnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9Ob2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgTm9kZSogdGFyZ2V0
KQotewotICAgIHJldHVybiAhdGFyZ2V0IHx8IGNhbkFjY2Vzc0RvY3VtZW50KCZzdGF0ZSwgJnRh
cmdldC0+ZG9jdW1lbnQoKSwgTG9nU2VjdXJpdHlFcnJvcik7Ci19Ci0gICAgCi1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgdGhyb3dUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICByZXR1
cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwotfQotCi1z
dGF0aWMgdm9pZCBhcHBlbmRBcmd1bWVudE11c3RCZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCB1
bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIkFyZ3VtZW50ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVy
KGFyZ3VtZW50SW5kZXggKyAxKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAoJyIpOwot
ICAgIGJ1aWxkZXIuYXBwZW5kKGFyZ3VtZW50TmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCInKSB0byAiKTsKLSAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgewotICAgICAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoInRoZSAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNl
TmFtZSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGNvbnN0cnVjdG9yIik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7Ci0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZ1bmN0aW9u
TmFtZSk7Ci0gICAgfQotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG11c3QgYmUgIik7Ci19
Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSkKLXsKLSAgICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKLSAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpT
LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8g
YWNjZXNzIHByb3BlcnR5ICciLCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZh
Y2VOYW1lLCAiIG9iamVjdC4iKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLX0KLSAgICAKLXZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSkKLXsKLSAgICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKLSAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpT
LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8g
c2V0IHByb3BlcnR5ICciLCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VO
YW1lLCAiIG9iamVjdC4iKSk7Ci19Ci0KLXZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwg
Y3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpKTsKLX0KLQotdm9p
ZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBBU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKLSAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKLSAgICB0
aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBO
T1RfU1VQUE9SVEVEX0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsKLX0KLQotdm9pZCB0aHJvd0ludmFs
aWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsKLSAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKLSAgICB0aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTlZBTElEX1NUQVRF
X0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsKLX0KLQotdm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU0VDVVJJ
VFlfRVJSLCBtZXNzYWdlKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVu
dE11c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwg
Y29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVzKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlcjsKLSAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBh
cmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKLSAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIm9uZSBvZjogIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoZXhw
ZWN0ZWRWYWx1ZXMpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUs
IGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1
bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVu
dE5hbWUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBwZW5kQXJndW1lbnRNdXN0
QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBpbnRlcmZhY2VOYW1lLCBm
dW5jdGlvbk5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYSBmdW5jdGlvbiIpOwot
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJp
bmcoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFy
Z3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rp
b25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4
cGVjdGVkVHlwZSkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBwZW5kQXJn
dW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBmdW5jdGlv
bkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJhbiBpbnN0YW5jZSBvZiAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFR5cGUpOwot
ICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJp
bmcoKSk7Ci19Ci0KLXZvaWQgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIHRocm93VHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIEFycmF5IGVsZW1lbnQgdHlwZSIp
KTsKLX0KLQotdm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKLXsKLSAg
ICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZh
Y2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgYXR0cmlidXRlIG11c3QgYmUgYW4gaW5zdGFu
Y2Ugb2YgIiwgZXhwZWN0ZWRUeXBlKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dS
ZXF1aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25h
cnlOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiTWVtYmVyICIpOwotICAgIGJ1aWxk
ZXIuYXBwZW5kKGRpY3Rpb25hcnlOYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnLicpOwotICAg
IGJ1aWxkZXIuYXBwZW5kKG1lbWJlck5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
IGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICIpOwotICAgIGJ1aWxkZXIu
YXBwZW5kKGV4cGVjdGVkVHlwZSk7Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0
aHJvd0NvbnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBp
bnRlcmZhY2VOYW1lKQotewotICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoJnN0YXRlLCBzY29wZSwg
Y3JlYXRlUmVmZXJlbmNlRXJyb3IoJnN0YXRlLCBtYWtlU3RyaW5nKGludGVyZmFjZU5hbWUsICIg
Y29uc3RydWN0b3IgYXNzb2NpYXRlZCBleGVjdXRpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIp
KSk7Ci19Ci0KLXZvaWQgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUs
IHNjb3BlLCBBU0NJSUxpdGVyYWwoIlZhbHVlIGlzIG5vdCBhIHNlcXVlbmNlIikpOwotfQotCi12
b2lkIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpCi17Ci0gICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgQVNDSUlM
aXRlcmFsKCJUaGUgcHJvdmlkZWQgdmFsdWUgaXMgbm9uLWZpbml0ZSIpKTsKLX0KLQotU3RyaW5n
IG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIlRoZSAi
LCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgZ2V0dGVyIGNhbiBvbmx5IGJl
IHVzZWQgb24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpOwotfQotCi1KU0M6OkVuY29k
ZWRKU1ZhbHVlIHRocm93R2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUs
IHNjb3BlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1
dGVOYW1lKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0
ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewotICAgIHJldHVybiBjcmVhdGVSZWpl
Y3RlZFByb21pc2VXaXRoVHlwZUVycm9yKHN0YXRlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2Fn
ZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7Ci19Ci0KLWJvb2wgdGhyb3dTZXR0ZXJU
eXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewot
ICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhlICIsIGludGVy
ZmFjZU5hbWUsICcuJywgYXR0cmlidXRlTmFtZSwgIiBzZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBv
biBpbnN0YW5jZXMgb2YgIiwgaW50ZXJmYWNlTmFtZSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotU3RyaW5nIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmco
IkNhbiBvbmx5IGNhbGwgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBmdW5jdGlvbk5hbWUsICIgb24g
aW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSB0aHJv
d1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUp
Ci17Ci0gICAgcmV0dXJuIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVRoaXNUeXBl
RXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSkpOwotfQotCi1KU0M6OkVu
Y29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21p
c2UmIHByb21pc2UsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhv
ZE5hbWUpCi17Ci0gICAgcHJvbWlzZS5yZWplY3QoVHlwZUVycm9yLCBtYWtlVGhpc1R5cGVFcnJv
ck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgbWV0aG9kTmFtZSkpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0
UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKLXsKLSAgICByZXR1cm4g
Y3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZVRoaXNUeXBlRXJy
b3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKLX0KLQogdm9pZCBjYWxsRnVu
Y3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNP
YmplY3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYgZnVuY3Rpb24pCiB7CiAgICAgSlND
OjpDYWxsRGF0YSBjYWxsRGF0YTsKQEAgLTEwMDcsMjggKzY1LDQgQEAgQ2FsbFR5cGUgRE9NQ29u
c3RydWN0b3JPYmplY3Q6OmdldENhbGxEYQogICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsKIH0K
IAotdm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAg
ICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRl
LCBTWU5UQVhfRVJSKSk7Ci19Ci0KLXZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRl
RE9NRXhjZXB0aW9uKCZzdGF0ZSwgREFUQV9DTE9ORV9FUlIpKTsKLX0KLQotdm9pZCB0aHJvd0lu
ZGV4U2l6ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTkRFWF9TSVpFX0VS
UikpOwotfQotCi12b2lkIHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2Vw
dGlvbigmc3RhdGUsIFRZUEVfTUlTTUFUQ0hfRVJSKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVj
dG9yLmgJKHJldmlzaW9uIDIxMTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTksMTEgKzE5LDY0IEBACiAKICNw
cmFnbWEgb25jZQogCi0jaW5jbHVkZSAiRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCIKLSNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEJhc2UgY2xhc3MgZm9yIGFsbCBjb25zdHJ1
Y3RvciBvYmplY3RzIGluIHRoZSBKU0MgYmluZGluZ3MuCitjbGFzcyBET01Db25zdHJ1Y3Rvck9i
amVjdCA6IHB1YmxpYyBKU0RPTU9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0RPTU9i
amVjdCBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6Oklt
cGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UgfCBKU0M6OlR5cGVPZlNob3VsZENhbGxHZXRDYWxs
RGF0YTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZN
JiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNWYWx1ZSk7CisKK3Byb3RlY3RlZDoKKyAg
ICBET01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0
Jik7CisKKyAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOworICAg
IHN0YXRpYyBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIEpTQzo6Q2FsbERhdGEm
KTsKK307CisKKy8vIENvbnN0cnVjdG9ycyB1c2luZyB0aGlzIGJhc2UgY2xhc3MgZGVwZW5kIG9u
IGJlaW5nIGluIGEgRG9jdW1lbnQgYW5kCisvLyBjYW4gbmV2ZXIgYmUgdXNlZCBmcm9tIGEgV29y
a2VyR2xvYmFsU2NvcGUuCitjbGFzcyBET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCA6IHB1Ymxp
YyBET01Db25zdHJ1Y3Rvck9iamVjdCB7CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVj
dCBCYXNlOworcHVibGljOgorICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQo
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCkKKyAgICAgICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVj
dCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsT2JqZWN0LnZtKCkpOworICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0LnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKTsKKyAgICB9Cit9OworCitjbGFzcyBET01D
b25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworCitwcm90
ZWN0ZWQ6CisgICAgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QoSlNDOjpTdHJ1Y3R1cmUq
LCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
OjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisKKyAgICBKU0M6OkpTRnVuY3Rpb24qIGlu
aXRpYWxpemVGdW5jdGlvbigpOworICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6
Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKKworcHJpdmF0ZToKKyAgICBKU0M6OldyaXRlQmFycmll
cjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6ZUZ1bmN0aW9uOworfTsKKwogdGVtcGxhdGU8
dHlwZW5hbWUgSlNDbGFzcz4gY2xhc3MgSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUg
OiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgRE9N
Q29uc3RydWN0b3JPYmplY3QgQmFzZTsKQEAgLTEzMSw2ICsxODQsMzcgQEAgcHJpdmF0ZToKICAg
ICBKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZSogaW5pdGlhbGl6ZUV4ZWN1dGFibGUoSlNDOjpWTSYp
OwogfTsKIAoraW5saW5lIEpTQzo6U3RydWN0dXJlKiBET01Db25zdHJ1Y3Rvck9iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitpbmxpbmUgRE9NQ29u
c3RydWN0b3JPYmplY3Q6OkRPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgOiBKU0RPTU9iamVj
dChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3sKK30KKworaW5saW5lIFN0cmluZyBET01Db25z
dHJ1Y3Rvck9iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KikKK3sKKyAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJGdW5jdGlvbiIpOworfQorCitpbmxpbmUgRE9NQ29uc3RydWN0b3JKU0J1
aWx0aW5PYmplY3Q6OkRPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgOiBET01D
b25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3sKK30KKworaW5saW5l
IEpTQzo6SlNGdW5jdGlvbiogRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OmluaXRpYWxp
emVGdW5jdGlvbigpCit7CisgICAgcmV0dXJuIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLmdldCgpOwor
fQorCitpbmxpbmUgdm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6c2V0SW5pdGlh
bGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mIHZtLCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQorewor
ICAgIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLnNldCh2bSwgdGhpcywgJmZ1bmN0aW9uKTsKK30KKwor
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNET01Db25zdHJ1Y3Rvck5vdENv
bnN0cnVjdGFibGU8SlNDbGFzcz4qIEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpT
Q2xhc3M+OjpjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgSlNET01Db25zdHJ1Y3Rvck5v
dENvbnN0cnVjdGFibGUqIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRl
Q2VsbDxKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZT4odm0uaGVhcCkpIEpTRE9NQ29u
c3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKQEAgLTIy
MCw2ICszMDQsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgdm9pZCBKCiAg
ICAgaW5pdGlhbGl6ZVByb3BlcnRpZXModm0sIGdsb2JhbE9iamVjdCk7CiB9CiAKK3ZvaWQgY2Fs
bEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2Jq
ZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mKTsKKwogdGVtcGxhdGU8dHlwZW5hbWUg
SlNDbGFzcz4gaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNCdWlsdGluQ29uc3RydWN0b3I8
SlNDbGFzcz46OmNhbGxDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNP
YmplY3QmIG9iamVjdCkKIHsKICAgICBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhz
dGF0ZSwgb2JqZWN0LCAqaW5pdGlhbGl6ZUZ1bmN0aW9uKCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0LmgJKHJldmlzaW9uIDIxMTM5MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUg
IklETFR5cGVzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01F
eGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxp
bmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3Bw
CShyZXZpc2lvbiAyMTEzNTMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
QmluZGluZy5jcHA6MjExMzUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01F
eGNlcHRpb25IYW5kbGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDM0IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5v
cmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTEsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2Vpbmln
IDxzYW1Ad2Via2l0Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgTWljaGFlbCBQcnVldHQg
PG1pY2hhZWxANjhrLm9yZz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKworI2luY2x1ZGUgIkNh
Y2hlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCisjaW5jbHVkZSAiRE9NQ29uc3Ry
dWN0b3JXaXRoRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uSGVhZGVy
cy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4
Y2VwdGlvbi5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgIkpTRE9NUHJv
bWlzZS5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCisjaW5jbHVkZSAiSlNFeGNl
cHRpb25CYXNlLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDxieXRl
Y29kZS9Db2RlQmxvY2suaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+
CisjaW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNp
bmNsdWRlIDxydW50aW1lL0Vycm9ySGFuZGxpbmdTY29wZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUv
RXJyb3JJbnN0YW5jZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0
aW9uLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKK3VzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU1RBVElDX0FTU0VSVF9J
U19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yT2JqZWN0KTsKK1NUQVRJQ19B
U1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVu
dCk7CisKK3ZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0
eU5hbWUpCit7CisgICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUp
OworfQorCitKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBTdHJpbmcmIHMpCit7CisgICAgaWYgKHMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc051
bGwoKTsKKyAgICByZXR1cm4ganNPd25lZFN0cmluZyhleGVjLCBzKTsKK30KKworSlNWYWx1ZSBq
c1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQorewor
ICAgIGlmIChzLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBy
ZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcyk7Cit9CisKK0pTVmFsdWUganNTdHJpbmco
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICByZXR1cm4ganNTdHJpbmdX
aXRoQ2FjaGUoZXhlYywgdXJsLnN0cmluZygpKTsKK30KKworSlNWYWx1ZSBqc1N0cmluZ09yVW5k
ZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCit7CisgICAgaWYgKHVybC5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzU3Ry
aW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3Ry
aW5nIHN0cmluZ1RvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlLCBTdHJpbmcmJiBzdHJpbmcpCit7CisgICAgaWYgKCFzdHJpbmcuY29udGFpbnNPbmx5
TGF0aW4xKCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KKworU3RyaW5n
IGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnRpZmllcikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSBpZGVu
dGlmaWVyLnN0cmluZygpOworICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3RhdGUsIHNj
b3BlLCBXVEZNb3ZlKHN0cmluZykpOworfQorCitTdHJpbmcgdmFsdWVUb0J5dGVTdHJpbmcoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmlu
ZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICByZXR1cm4gc3RyaW5nVG9CeXRlU3RyaW5nKHN0YXRl
LCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGhhc1Vu
cGFpcmVkU3Vycm9nYXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQoreworICAgIC8vIEZhc3QgcGF0aCBm
b3IgOC1iaXQgc3RyaW5nczsgdGhleSBjYW4ndCBoYXZlIGFueSBzdXJyb2dhdGVzLgorICAgIGlm
IChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGF1dG8g
Y29kZVBvaW50IDogc3RyaW5nLmNvZGVQb2ludHMoKSkgeworICAgICAgICBpZiAoVV9JU19TVVJS
T0dBVEUoY29kZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvVVNWU3RyaW5n
KFN0cmluZyYmIHN0cmluZykKK3sKKyAgICAvLyBGYXN0IHBhdGggZm9yIHRoZSBjYXNlIHdoZXJl
IHRoZXJlIGFyZSBubyB1bnBhaXJlZCBzdXJyb2dhdGVzLgorICAgIGlmICghaGFzVW5wYWlyZWRT
dXJyb2dhdGUoc3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIHN0cmluZzsKKworICAgIC8vIFNsb3cg
cGF0aDogaHR0cDovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tb2J0YWluLXVuaWNvZGUK
KyAgICAvLyBSZXBsYWNlcyB1bnBhaXJlZCBzdXJyb2dhdGVzIHdpdGggdGhlIHJlcGxhY2VtZW50
IGNoYXJhY3Rlci4KKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2
ZUNhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSk7CisgICAgU3RyaW5nVmlldyB2aWV3IHsgc3RyaW5n
IH07CisgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHZpZXcuY29kZVBvaW50cygpKSB7CisgICAg
ICAgIGlmIChVX0lTX1NVUlJPR0FURShjb2RlUG9pbnQpKQorICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChyZXBsYWNlbWVudENoYXJhY3Rlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoY29kZVBvaW50KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmlu
ZygpOworfQorCitTdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgU3RyaW5nIHN0cmluZyA9IGlkZW50aWZp
ZXIuc3RyaW5nKCk7CisgICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5n
KSk7Cit9CisKK1N0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9X
VEZTdHJpbmcoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
CisgICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK0pT
VmFsdWUganNEYXRlKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlKQoreworICAgIHJldHVy
biBEYXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOworfQorCitkb3VibGUgdmFsdWVUb0RhdGUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc051bWJl
cigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNOdW1iZXIoKTsKKyAgICBpZiAoIXZhbHVlLmlu
aGVyaXRzKGV4ZWMtPnZtKCksIERhdGVJbnN0YW5jZTo6aW5mbygpKSkKKyAgICAgICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHZhbHVlLnRvT2JqZWN0KGV4ZWMpKS0+aW50ZXJuYWxO
dW1iZXIoKTsKK30KKwordm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGV4Y2VwdGlvblZhbHVlLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJ
c0hvbGRpbmdBUElMb2NrKCkpOworICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTQzo6RXhjZXB0aW9uKj4odm0sIGV4Y2VwdGlvblZhbHVlKTsKKyAgICBpZiAoIWV4Y2Vw
dGlvbikgeworICAgICAgICBleGNlcHRpb24gPSB2bS5sYXN0RXhjZXB0aW9uKCk7CisgICAgICAg
IGlmICghZXhjZXB0aW9uKQorICAgICAgICAgICAgZXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246
OmNyZWF0ZShleGVjLT52bSgpLCBleGNlcHRpb25WYWx1ZSwgSlNDOjpFeGNlcHRpb246OkRvTm90
Q2FwdHVyZVN0YWNrKTsKKyAgICB9CisKKyAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0
aW9uLCBjYWNoZWRTY3JpcHQpOworfQorCitTdHJpbmcgcmV0cmlldmVFcnJvck1lc3NhZ2UoRXhl
Y1N0YXRlJiBzdGF0ZSwgVk0mIHZtLCBKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2F0Y2hTY29wZSYgY2F0
Y2hTY29wZSkKK3sKKyAgICBpZiAoYXV0byogZXhjZXB0aW9uQmFzZSA9IHRvRXhjZXB0aW9uQmFz
ZSh2bSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkJhc2UtPnRvU3RyaW5n
KCk7CisKKyAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE1MDg3PiBXZWIgSW5z
cGVjdG9yOiBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24gc2hvdWxkIG5vdCBldmFsdWF0ZSBKYXZh
U2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKKyAgICAvLyBJZiB0aGlzIGlzIGEgY3VzdG9tIGV4
Y2VwdGlvbiBvYmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5IGFuZCBnZXQgYSBuaWNl
IHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4KKyAgICBTdHJpbmcgZXJy
b3JNZXNzYWdlOworICAgIGlmIChhdXRvKiBlcnJvciA9IGpzRHluYW1pY0Rvd25jYXN0PEVycm9y
SW5zdGFuY2UqPih2bSwgZXhjZXB0aW9uKSkKKyAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3It
PnNhbml0aXplZFRvU3RyaW5nKCZzdGF0ZSk7CisgICAgZWxzZQorICAgICAgICBlcnJvck1lc3Nh
Z2UgPSBleGNlcHRpb24udG9XVEZTdHJpbmcoJnN0YXRlKTsKKworICAgIC8vIFdlIG5lZWQgdG8g
Y2xlYXIgYW55IG5ldyBleGNlcHRpb24gdGhhdCBtYXkgYmUgdGhyb3duIGluIHRoZSB0b1N0cmlu
ZygpIGNhbGwgYWJvdmUuCisgICAgLy8gcmVwb3J0RXhjZXB0aW9uKCkgaXMgbm90IHN1cHBvc2Vk
IHRvIGJlIG1ha2luZyBuZXcgZXhjZXB0aW9ucy4KKyAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0
aW9uKCk7CisgICAgdm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIGVycm9yTWVz
c2FnZTsKK30KKwordm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0M6OkV4
Y2VwdGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCwgRXhjZXB0aW9u
RGV0YWlscyogZXhjZXB0aW9uRGV0YWlscykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgIFJFTEVBU0Vf
QVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGlmIChpc1Rl
cm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24odm0sIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVy
bjsKKworICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkpOworCisg
ICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFj
a0Zyb21FeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxT
dGFja1NpemVUb0NhcHR1cmUpKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgIHZt
LmNsZWFyTGFzdEV4Y2VwdGlvbigpOworCisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKSk7CisgICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cgPSBqc0R5bmFtaWNEb3duY2FzdDxK
U0RPTVdpbmRvdyo+KHZtLCBnbG9iYWxPYmplY3QpKSB7CisgICAgICAgIGlmICghd2luZG93LT53
cmFwcGVkKCkuaXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaW50IGxpbmVOdW1iZXIgPSAwOworICAgIGludCBjb2x1bW5OdW1i
ZXIgPSAwOworICAgIFN0cmluZyBleGNlcHRpb25Tb3VyY2VVUkw7CisgICAgaWYgKGNvbnN0IFNj
cmlwdENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbFN0YWNrLT5maXJzdE5vbk5hdGl2ZUNhbGxG
cmFtZSgpKSB7CisgICAgICAgIGxpbmVOdW1iZXIgPSBjYWxsRnJhbWUtPmxpbmVOdW1iZXIoKTsK
KyAgICAgICAgY29sdW1uTnVtYmVyID0gY2FsbEZyYW1lLT5jb2x1bW5OdW1iZXIoKTsKKyAgICAg
ICAgZXhjZXB0aW9uU291cmNlVVJMID0gY2FsbEZyYW1lLT5zb3VyY2VVUkwoKTsKKyAgICB9CisK
KyAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gcmV0cmlldmVFcnJvck1lc3NhZ2UoKmV4ZWMsIHZt
LCBleGNlcHRpb24tPnZhbHVlKCksIHNjb3BlKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKGVy
cm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBleGNlcHRpb25Tb3VyY2VVUkws
IGV4Y2VwdGlvbiwgY2FsbFN0YWNrLT5zaXplKCkgPyBjYWxsU3RhY2sgOiBudWxscHRyLCBjYWNo
ZWRTY3JpcHQpOworCisgICAgaWYgKGV4Y2VwdGlvbkRldGFpbHMpIHsKKyAgICAgICAgZXhjZXB0
aW9uRGV0YWlscy0+bWVzc2FnZSA9IGVycm9yTWVzc2FnZTsKKyAgICAgICAgZXhjZXB0aW9uRGV0
YWlscy0+bGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIGV4Y2VwdGlvbkRldGFpbHMt
PmNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJlcjsKKyAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+
c291cmNlVVJMID0gZXhjZXB0aW9uU291cmNlVVJMOworICAgIH0KK30KKwordm9pZCByZXBvcnRD
dXJyZW50RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBhdXRv
KiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlv
bigpOworICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOworfQorCitzdGF0aWMg
SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2Rl
IGVjLCBjb25zdCBTdHJpbmcqIG1lc3NhZ2UgPSBudWxscHRyKQoreworICAgIGlmICghZWMgfHwg
ZWMgPT0gRXhpc3RpbmdFeGNlcHRpb25FcnJvcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisKKyAgICAvLyBGSVhNRTogSGFuZGxlIG90aGVyIFdlYklETCBleGNlcHRpb24gdHlwZXMu
CisgICAgaWYgKGVjID09IFR5cGVFcnJvcikgeworICAgICAgICBpZiAoIW1lc3NhZ2UgfHwgbWVz
c2FnZS0+aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVj
KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAqbWVzc2FnZSk7CisgICAg
fQorCisgICAgaWYgKGVjID09IFJhbmdlRXJyb3IpIHsKKyAgICAgICAgaWYgKCFtZXNzYWdlIHx8
IG1lc3NhZ2UtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQmFkIHZhbHVlIikpOworICAgICAgICByZXR1cm4gY3JlYXRl
UmFuZ2VFcnJvcihleGVjLCAqbWVzc2FnZSk7CisgICAgfQorCisgICAgaWYgKGVjID09IFN0YWNr
T3ZlcmZsb3dFcnJvcikKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihl
eGVjKTsKKworICAgIC8vIEZJWE1FOiBBbGwgY2FsbGVycyB0byBjcmVhdGVET01FeGNlcHRpb24g
bmVlZCB0byBwYXNzIGluIHRoZSBjb3JyZWN0IGdsb2JhbCBvYmplY3QuCisgICAgLy8gRm9yIG5v
dywgd2UncmUgZ29pbmcgdG8gYXNzdW1lIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LiBXaGljaCBp
cyB3cm9uZyBpbiBjYXNlcyBsaWtlIHRoaXM6CisgICAgLy8gZnJhbWVzWzBdLmRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQobnVsbCwgbnVsbCk7IC8vIHRocm93cyBhbiBleGNlcHRpb24gd2hpY2ggc2hv
dWxkIGhhdmUgdGhlIHN1YmZyYW1lJ3MgcHJvdG90eXBlcy4KKyAgICBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVj
KTsKKworICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisKKyAg
ICBDU3RyaW5nIG1lc3NhZ2VDU3RyaW5nOworICAgIGlmIChtZXNzYWdlKQorICAgICAgICBtZXNz
YWdlQ1N0cmluZyA9IG1lc3NhZ2UtPnV0ZjgoKTsKKyAgICBpZiAobWVzc2FnZSAmJiAhbWVzc2Fn
ZS0+aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEl0IGlzIHNhZmUgdG8gZG8gdGhpcyBiZWNhdXNl
IHRoZSBjaGFyKiBjb250ZW50cyBvZiB0aGUgQ1N0cmluZyBhcmUgY29waWVkIGludG8gYSBuZXcg
V1RGOjpTdHJpbmcgYmVmb3JlIHRoZSBDU3RyaW5nIGlzIGRlc3Ryb3llZC4KKyAgICAgICAgZGVz
Y3JpcHRpb24uZGVzY3JpcHRpb24gPSBtZXNzYWdlQ1N0cmluZy5kYXRhKCk7CisgICAgfQorCisg
ICAgSlNWYWx1ZSBlcnJvck9iamVjdDsKKyAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLnR5cGUpIHsK
KyAgICBjYXNlIERPTUNvcmVFeGNlcHRpb25UeXBlOgorI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorICAgIGNhc2UgSURCRGF0YWJhc2VFeGNlcHRpb25UeXBlOgorI2VuZGlmCisgICAgICAg
IGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIERPTUNvcmVFeGNlcHRpb246
OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVFeGNl
cHRpb25UeXBlOgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBGaWxlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTUUxFeGNlcHRpb25UeXBlOgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBTUUxFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFNWR0V4Y2VwdGlvblR5cGU6CisgICAgICAgIGVycm9yT2Jq
ZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFNWR0V4Y2VwdGlvbjo6Y3JlYXRlKGRlc2Ny
aXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWFBhdGhFeGNlcHRpb25UeXBlOgor
ICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBYUGF0aEV4Y2Vw
dGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAK
KyAgICBBU1NFUlQoZXJyb3JPYmplY3QpOworICAgIGFkZEVycm9ySW5mbyhleGVjLCBhc09iamVj
dChlcnJvck9iamVjdCksIHRydWUpOworICAgIHJldHVybiBlcnJvck9iamVjdDsKK30KKworSlNW
YWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVj
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgcmV0dXJuIGNyZWF0ZURPTUV4Y2VwdGlv
bihleGVjLCBlYywgJm1lc3NhZ2UpOworfQorCitKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihF
eGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCit7CisgICAgcmV0dXJuIGNy
ZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIGV4Y2VwdGlvbi5jb2RlKCksIGV4Y2VwdGlvbi5yZWxl
YXNlTWVzc2FnZSgpKTsKK30KKwordm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9u
JiYgZXhjZXB0aW9uKQoreworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7Cisg
ICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVET01FeGNlcHRpb24o
c3RhdGUsIFdURk1vdmUoZXhjZXB0aW9uKSkpOworfQorCitib29sIGhhc0l0ZXJhdG9yTWV0aG9k
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8m
IHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBKU1ZhbHVlIGFwcGx5
TWV0aG9kID0gb2JqZWN0LT5nZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZt
LnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC5pdGVy
YXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgY2FsbGFibGUiKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgZmFsc2UpOworCisgICAgcmV0dXJuICFhcHBseU1ldGhvZC5pc1VuZGVmaW5l
ZCgpOworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1l
KEV4ZWNTdGF0ZSYgc3RhdGUsIEZyYW1lJiBmcmFtZSwgU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsICZm
cmFtZSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgbWVzc2FnZSA9IGZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFj
Y2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdp
bmRvdyhFeGVjU3RhdGUmIHN0YXRlLCBET01XaW5kb3cmIGdsb2JhbE9iamVjdCwgU3RyaW5nJiBt
ZXNzYWdlKQoreworICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9E
T01XaW5kb3coJnN0YXRlLCBnbG9iYWxPYmplY3QsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIG1lc3NhZ2UgPSBnbG9iYWxPYmplY3QuY3Jvc3NE
b21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSkpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiBm
cmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghZnJhbWUpCisgICAgICAg
IHJldHVybjsKKyAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPnByaW50RXJyb3JN
ZXNzYWdlKG1lc3NhZ2UpOworfQorCitTdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5m
bykKK3sKKyAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5z
dHJ1Y3R1cmVzKE5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgcmV0dXJuIHN0cnVjdHVyZXMuZ2V0
KGNsYXNzSW5mbykuZ2V0KCk7Cit9CisKK1N0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IENsYXNzSW5mbyogY2xhc3NJbmZvKQoreworICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01h
cmtpbmcoZ2xvYmFsT2JqZWN0LnZtKCkuaGVhcCwgZ2xvYmFsT2JqZWN0LmdjTG9jaygpKTsKKyAg
ICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5zdHJ1Y3R1cmVz
KGxvY2tlcik7CisgICAgQVNTRVJUKCFzdHJ1Y3R1cmVzLmNvbnRhaW5zKGNsYXNzSW5mbykpOwor
ICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChjbGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1
cmU+KGdsb2JhbE9iamVjdC52bSgpLCAmZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKS5pdGVyYXRv
ci0+dmFsdWUuZ2V0KCk7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQzMl90IGtNYXhJbnQzMiA9IDB4
N2ZmZmZmZmY7CitzdGF0aWMgY29uc3QgaW50MzJfdCBrTWluSW50MzIgPSAta01heEludDMyIC0g
MTsKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBrTWF4VUludDMyID0gMHhmZmZmZmZmZlU7CitzdGF0
aWMgY29uc3QgaW50NjRfdCBrSlNNYXhJbnRlZ2VyID0gMHgyMDAwMDAwMDAwMDAwMExMIC0gMTsg
Ly8gMl41MyAtIDEsIGxhcmdlc3QgaW50ZWdlciBleGFjdGx5IHJlcHJlc2VudGFibGUgaW4gRUNN
QVNjcmlwdC4KKworc3RhdGljIFN0cmluZyByYW5nZUVycm9yU3RyaW5nKGRvdWJsZSB2YWx1ZSwg
ZG91YmxlIG1pbiwgZG91YmxlIG1heCkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiVmFsdWUg
IiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQodmFsdWUpLCAiIGlzIG91dHNpZGUg
dGhlIHJhbmdlIFsiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtaW4pLCAiLCAi
LCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtYXgpLCAiXSIpOworfQorCitzdGF0
aWMgZG91YmxlIGVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgeCwgZG91Ymxl
IG1pbmltdW0sIGRvdWJsZSBtYXhpbXVtKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHN0ZDo6
aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3Rh
dGUsIHNjb3BlLCByYW5nZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIHggPSB0cnVuYyh4KTsKKyAgICBpZiAoeCA8IG1pbmlt
dW0gfHwgeCA+IG1heGltdW0pIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICByZXR1cm4geDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citz
dHJ1Y3QgSW50VHlwZUxpbWl0cyB7Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVM
aW1pdHM8aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0IGludDhfdCBtaW5WYWx1ZSA9IC0xMjg7
CisgICAgc3RhdGljIGNvbnN0IGludDhfdCBtYXhWYWx1ZSA9IDEyNzsKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAorfTsKKwordGVtcGxhdGUg
PD4KK3N0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgdWlu
dDhfdCBtYXhWYWx1ZSA9IDI1NTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZW
YWx1ZXMgPSAyNTY7IC8vIDJeOAorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBJbnRUeXBlTGlt
aXRzPGludDE2X3Q+IHsKKyAgICBzdGF0aWMgY29uc3Qgc2hvcnQgbWluVmFsdWUgPSAtMzI3Njg7
CisgICAgc3RhdGljIGNvbnN0IHNob3J0IG1heFZhbHVlID0gMzI3Njc7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKK307CisKK3RlbXBs
YXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50MTZfdD4geworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBzaG9ydCBtYXhWYWx1ZSA9IDY1NTM1OworICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Cit9OworCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KK3N0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJJbnQoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRp
b24pCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2lnbmVkPFQ+
Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVz
ZWQgZm9yIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOworCisgICAgdHlwZWRlZiBJbnRUeXBlTGlt
aXRzPFQ+IExpbWl0c1RyYWl0OworICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxy
ZWFkeSBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCisgICAgaWYg
KHZhbHVlLmlzSW50MzIoKSkgeworICAgICAgICBpbnQzMl90IGQgPSB2YWx1ZS5hc0ludDMyKCk7
CisgICAgICAgIGlmIChkID49IExpbWl0c1RyYWl0OjptaW5WYWx1ZSAmJiBkIDw9IExpbWl0c1Ry
YWl0OjptYXhWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKKyAg
ICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
KyAgICAgICAgICAgIHJldHVybiBkIDwgTGltaXRzVHJhaXQ6Om1pblZhbHVlID8gTGltaXRzVHJh
aXQ6Om1pblZhbHVlIDogTGltaXRzVHJhaXQ6Om1heFZhbHVlOworICAgICAgICB9CisgICAgICAg
IGQgJT0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VD4oZCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/IGQgLSBMaW1pdHNUcmFpdDo6bnVt
YmVyT2ZWYWx1ZXMgOiBkKTsKKyAgICB9CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisKKyAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdl
KHN0YXRlLCB4LCBMaW1pdHNUcmFpdDo6bWluVmFsdWUsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7
CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAg
ICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOworICAgIH0KKworICAg
IGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCisgICAgICAgIHJldHVy
biAwOworCisgICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7
CisgICAgeCA9IGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKTsKKworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUPih4ID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8geCAtIExpbWl0
c1RyYWl0OjpudW1iZXJPZlZhbHVlcyA6IHgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K3N0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQorewor
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1
ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9y
IHVuc2lnbmVkIGludGVncmFsIHR5cGVzIik7CisKKyAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8
VD4gTGltaXRzVHJhaXQ7CisgICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5
IGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgorICAgIGlmICh2
YWx1ZS5pc1VJbnQzMigpKSB7CisgICAgICAgIHVpbnQzMl90IGQgPSB2YWx1ZS5hc1VJbnQzMigp
OworICAgICAgICBpZiAoZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikg
eworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOworICAgICAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAg
ICAgcmV0dXJuIExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCAwKTsKKworICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgIGNhc2Ug
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Cisg
ICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIExpbWl0c1RyYWl0OjptYXhW
YWx1ZSk7CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgor
ICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOworICAgIH0K
KworICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCisgICAgICAg
IHJldHVybiAwOworCisgICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFi
cyh4KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51
bWJlck9mVmFsdWVzKSk7Cit9CisKK2ludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8
aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlKTsKK30KKwordWludDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1
aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlKTsKK30KKworaW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3Rh
dGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKwor
dWludDhfdCB0b1VJbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKKy8vIGh0dHA6Ly93d3cu
dzMub3JnL1RSL1dlYklETC8jZXMtYnl0ZQoraW50OF90IHRvSW50OChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0
ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKK30KKwor
Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1vY3RldAordWludDhfdCB0b1VJbnQ4
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxl
clVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCk7Cit9CisKK2ludDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZf
dD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VS
YW5nZSk7Cit9CisKK3VpbnQxNl90IHRvVUludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+
KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2UpOworfQorCitpbnQxNl90IHRvSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKwordWludDE2X3Qg
dG9VSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJl
dHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9X
ZWJJREwvI2VzLXNob3J0CitpbnQxNl90IHRvSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQorCisvLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLXNob3J0Cit1aW50MTZfdCB0b1VJ
bnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1Nt
YWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6Tm9ybWFsKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNl
cy1sb25nCitpbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisg
ICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisgICAg
cmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwga01pbkludDMyLCBrTWF4SW50MzIpOworfQor
CitpbnQzMl90IHRvSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMy
KCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgcmV0dXJu
IHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxpbnQzMl90Pih4KTsKK30KKwordWludDMyX3Qg
dG9VSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKwor
ICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjpp
c25hbih4KSA/IDAgOiBjbGFtcFRvPHVpbnQzMl90Pih4KTsKK30KKworLy8gaHR0cDovL3d3dy53
My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nCit1aW50MzJfdCB0b1VJbnQzMkVuZm9y
Y2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQz
MigpOworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUs
IHgsIDAsIGtNYXhVSW50MzIpOworfQorCitpbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
ZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIC1rSlNNYXhJ
bnRlZ2VyLCBrSlNNYXhJbnRlZ2VyKTsKK30KKwordWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFu
Z2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAs
IGtKU01heEludGVnZXIpOworfQorCitpbnQ2NF90IHRvSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PGlu
dDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAta0pTTWF4SW50ZWdl
ciksIGtKU01heEludGVnZXIpKTsKK30KKwordWludDY0X3QgdG9VSW50NjRDbGFtcChFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50
b051bWJlcigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgMCksIGtK
U01heEludGVnZXIpKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1s
b25nLWxvbmcKK2ludDY0X3QgdG9JbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKworICAgIC8vIE1h
cCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1ZXMgbW9kdWxv
IDJeNjQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG47CisgICAgZG91YmxlVG9JbnRlZ2VyKHgs
IG4pOworICAgIHJldHVybiBuOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwv
I2VzLXVuc2lnbmVkLWxvbmctbG9uZwordWludDY0X3QgdG9VSW50NjQoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7CisKKyAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5p
dGUgdmFsdWVzIG1vZHVsbyAyXjY0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOworICAgIGRv
dWJsZVRvSW50ZWdlcih4LCBuKTsKKyAgICByZXR1cm4gbjsKK30KKworY2xhc3MgR2V0Q2FsbGVy
R2xvYmFsT2JqZWN0RnVuY3RvciB7CitwdWJsaWM6CisgICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0
RnVuY3RvcigpID0gZGVmYXVsdDsKKworICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9y
KCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2hh
c1NraXBwZWRGaXJzdEZyYW1lKSB7CisgICAgICAgICAgICBtX2hhc1NraXBwZWRGaXJzdEZyYW1l
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGF1dG8qIGNvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9j
aygpKQorICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdG9yLT5jYWxsZWUo
KSk7CisgICAgICAgICAgICAvLyBGSVhNRTogQ2FsbGVlIGlzIG5vdCBhbiBvYmplY3QgaWYgdGhl
IGNhbGxlciBpcyBXZWIgQXNzZW1ibHkuCisgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQg
dG8gZG8gaGVyZS4gV2UgY2FuIHByb2JhYmx5IGdldCB0aGUgZ2xvYmFsIG9iamVjdAorICAgICAg
ICAgICAgLy8gZnJvbSB0aGUgdG9wLW1vc3QgV2FzbSBJbnN0YW5jZS4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcyMQorICAgICAgICAgICAgaWYgKHZpc2l0b3It
PmNhbGxlZSgpLT5pc09iamVjdCgpKQorICAgICAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0g
anNDYXN0PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOworICAgIH0KKworICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9i
amVjdDsgfQorCitwcml2YXRlOgorICAgIG11dGFibGUgYm9vbCBtX2hhc1NraXBwZWRGaXJzdEZy
YW1lIHsgZmFsc2UgfTsKKyAgICBtdXRhYmxlIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVj
dCB7IG51bGxwdHIgfTsKK307CisKK0RPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yIGl0ZXI7CisgICAg
ZXhlYy0+aXRlcmF0ZShpdGVyKTsKKyAgICByZXR1cm4gaXRlci5nbG9iYWxPYmplY3QoKSA/IGFz
SlNET01XaW5kb3coaXRlci5nbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKSA6IGZpcnN0RE9NV2lu
ZG93KGV4ZWMpOworfQorCitET01XaW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhFeGVjU3RhdGUqIGV4
ZWMpCit7CisgICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKS0+d3JhcHBlZCgpOworfQorCitET01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT52bUVudHJ5R2xvYmFs
T2JqZWN0KCkpLT53cmFwcGVkKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjYW5BY2Nlc3NE
b2N1bWVudChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERvY3VtZW50KiB0YXJnZXREb2N1bWVudCwg
U2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQoreworICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIGlmICghdGFyZ2V0RG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IERPTVdpbmRvdyYgYWN0aXZlID0gYWN0aXZlRE9NV2luZG93KHN0YXRlKTsKKworICAgIGlmIChh
Y3RpdmUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5jYW5BY2Nlc3ModGFyZ2V0RG9jdW1l
bnQtPnNlY3VyaXR5T3JpZ2luKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHN3aXRj
aCAocmVwb3J0aW5nT3B0aW9uKSB7CisgICAgY2FzZSBUaHJvd1NlY3VyaXR5RXJyb3I6CisgICAg
ICAgIHRocm93U2VjdXJpdHlFcnJvcigqc3RhdGUsIHNjb3BlLCB0YXJnZXREb2N1bWVudC0+ZG9t
V2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIExvZ1NlY3VyaXR5RXJyb3I6CisgICAgICAgIHByaW50RXJyb3JN
ZXNzYWdlRm9yRnJhbWUodGFyZ2V0RG9jdW1lbnQtPmZyYW1lKCksIHRhcmdldERvY3VtZW50LT5k
b21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yOgorICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
RE9NV2luZG93JiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlv
bikKK3sKKyAgICByZXR1cm4gY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC5kb2N1bWVu
dCgpLCByZXBvcnRpbmdPcHRpb24pOworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxk
QWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRnJhbWUqIHRhcmdldCwg
U2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQoreworICAgIHJldHVybiB0
YXJnZXQgJiYgY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC0+ZG9jdW1lbnQoKSwgcmVw
b3J0aW5nT3B0aW9uKTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9Ob2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgTm9kZSogdGFyZ2V0KQoreworICAgIHJl
dHVybiAhdGFyZ2V0IHx8IGNhbkFjY2Vzc0RvY3VtZW50KCZzdGF0ZSwgJnRhcmdldC0+ZG9jdW1l
bnQoKSwgTG9nU2VjdXJpdHlFcnJvcik7Cit9CisgICAgCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
dGhyb3dUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZCBh
cHBlbmRBcmd1bWVudE11c3RCZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCB1bnNpZ25lZCBhcmd1
bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGludGVyZmFj
ZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIkFyZ3VtZW50ICIpOworICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGFyZ3VtZW50SW5k
ZXggKyAxKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAoJyIpOworICAgIGJ1aWxkZXIu
YXBwZW5kKGFyZ3VtZW50TmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCInKSB0byAi
KTsKKyAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgeworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoInRoZSAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7CisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGNvbnN0cnVjdG9yIik7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCcuJyk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZ1bmN0aW9uTmFtZSk7CisgICAg
fQorICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG11c3QgYmUgIik7Cit9CisKK0pTQzo6RW5j
b2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFt
ZSkKK3sKKyAgICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0
YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2
ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3Bl
cnR5ICciLCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VOYW1lLCAiIG9i
amVjdC4iKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30K
KyAgICAKK3ZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFt
ZSkKK3sKKyAgICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0
YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAg
ICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2
ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gc2V0IHByb3BlcnR5
ICciLCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VOYW1lLCAiIG9iamVj
dC4iKSk7Cit9CisKK3ZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhj
ZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpKTsKK30KKwordm9pZCB0aHJvd05vdFN1
cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsKKyAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKKyAgICB0aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVE
X0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsKK30KKwordm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hh
ciogbWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBTdHJp
bmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNj
b3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTlZBTElEX1NUQVRFX0VSUiwgJm1lc3Nh
Z2VTdHJpbmcpKTsKK30KKwordm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7
CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0
YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU0VDVVJJVFlfRVJSLCBtZXNz
YWdlKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1F
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2ln
bmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciog
ZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNo
YXIqIGV4cGVjdGVkVmFsdWVzKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBh
cHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUs
IGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKKyAgICBidWlsZGVyLmFwcGVu
ZExpdGVyYWwoIm9uZSBvZjogIik7CisgICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRWYWx1ZXMp
OworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9T
dHJpbmcoKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1
bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwg
YXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUp
OworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYSBmdW5jdGlvbiIpOworICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Cit9CisK
K0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgs
IGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkK
K3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYXBwZW5kQXJndW1lbnRNdXN0QmUo
YnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5h
bWUsIGZ1bmN0aW9uTmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJhbiBpbnN0YW5j
ZSBvZiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFR5cGUpOworICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Cit9CisK
K3ZvaWQgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIEFycmF5IGVsZW1lbnQgdHlwZSIpKTsKK30KKwordm9p
ZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKK3sKKyAgICB0aHJvd1R5cGVF
cnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLics
IGF0dHJpYnV0ZU5hbWUsICIgYXR0cmlidXRlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIiwgZXhw
ZWN0ZWRUeXBlKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJl
clR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUs
IGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25z
dCBjaGFyKiBleHBlY3RlZFR5cGUpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiTWVtYmVyICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGRp
Y3Rpb25hcnlOYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnLicpOworICAgIGJ1aWxkZXIuYXBw
ZW5kKG1lbWJlck5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGlzIHJlcXVpcmVk
IGFuZCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVj
dGVkVHlwZSk7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVp
bGRlci50b1N0cmluZygpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVj
dG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1l
KQoreworICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoJnN0YXRlLCBzY29wZSwgY3JlYXRlUmVmZXJl
bmNlRXJyb3IoJnN0YXRlLCBtYWtlU3RyaW5nKGludGVyZmFjZU5hbWUsICIgY29uc3RydWN0b3Ig
YXNzb2NpYXRlZCBleGVjdXRpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpKSk7Cit9CisKK3Zv
aWQgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpCit7CisgICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIlZhbHVlIGlzIG5vdCBhIHNlcXVlbmNlIikpOworfQorCit2b2lkIHRocm93Tm9u
RmluaXRlVHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
Cit7CisgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJUaGUg
cHJvdmlkZWQgdmFsdWUgaXMgbm9uLWZpbml0ZSIpKTsKK30KKworU3RyaW5nIG1ha2VHZXR0ZXJU
eXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUpCit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VO
YW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgZ2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5z
dGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRo
cm93R2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRl
TmFtZSkKK3sKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBtYWtl
R2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7Cit9
CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3Io
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBhdHRyaWJ1dGVOYW1lKQoreworICAgIHJldHVybiBjcmVhdGVSZWplY3RlZFByb21pc2VX
aXRoVHlwZUVycm9yKHN0YXRlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VO
YW1lLCBhdHRyaWJ1dGVOYW1lKSk7Cit9CisKK2Jvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBp
bnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQoreworICAgIHRocm93VHlw
ZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcu
JywgYXR0cmlidXRlTmFtZSwgIiBzZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBpbnN0YW5jZXMg
b2YgIiwgaW50ZXJmYWNlTmFtZSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIG1h
a2VUaGlzVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUpCit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNhbiBvbmx5IGNh
bGwgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBmdW5jdGlvbk5hbWUsICIgb24gaW5zdGFuY2VzIG9m
ICIsIGludGVyZmFjZU5hbWUpOworfQorCitFbmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7CisgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdl
KGludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVl
IHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmIHByb21pc2Us
IGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCit7Cisg
ICAgcHJvbWlzZS5yZWplY3QoVHlwZUVycm9yLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50
ZXJmYWNlTmFtZSwgbWV0aG9kTmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhU
aGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlUmVqZWN0
ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGlu
dGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKK30KKwordm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3Vy
cmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QmIHRoaXNP
YmplY3QsIEpTQzo6SlNGdW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAgSlNDOjpDYWxsRGF0YSBj
YWxsRGF0YTsKKyAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YSgm
ZnVuY3Rpb24sIGNhbGxEYXRhKTsKKyAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5v
bmUpOworCisgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICBKU0M6
OmNhbGwoJnN0YXRlLCAmZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJnRoaXNPYmplY3Qs
IGFyZ3VtZW50cyk7Cit9CisKK3ZvaWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnZp
c2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxET01Db25zdHJ1Y3RvckpTQnVpbHRp
bk9iamVjdCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsK
K30KKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFRocm93VHlwZUVy
cm9yKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyBvcGVy
YXRvciIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKK30KKworQ2Fs
bFR5cGUgRE9NQ29uc3RydWN0b3JPYmplY3Q6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRh
JiBjYWxsRGF0YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsVGhyb3dU
eXBlRXJyb3I7CisgICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0OworfQorCit2b2lkIHRocm93RE9N
U3ludGF4RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
KQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9u
KCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNZTlRBWF9FUlIpKTsK
K30KKwordm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
KyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0
YXRlLCBEQVRBX0NMT05FX0VSUikpOworfQorCit2b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VS
VCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUs
IGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElOREVYX1NJWkVfRVJSKSk7Cit9CisKK3ZvaWQg
dGhyb3dUeXBlTWlzbWF0Y2hFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhy
b3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgVFlQ
RV9NSVNNQVRDSF9FUlIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcAkocmV2aXNpb24gMjEx
MzUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDE3MCArMjAsMzIgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01F
eGNlcHRpb25IYW5kbGluZy5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0jaW5jbHVk
ZSAiQ29tbW9uVk0uaCIKLSNpbmNsdWRlICJET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oIgot
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWFk
ZXJzLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uSW50ZXJmYWNlcy5oIgotI2luY2x1ZGUgIkZyYW1l
LmgiCi0jaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNl
RXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSAiSlNET01Q
cm9taXNlLmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKKyNpbmNsdWRlICJKU0RP
TVdpbmRvdy5oIgorI2luY2x1ZGUgIkpTRHluYW1pY0Rvd25jYXN0LmgiCiAjaW5jbHVkZSAiSlNF
eGNlcHRpb25CYXNlLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlIDxi
eXRlY29kZS9Db2RlQmxvY2suaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNr
Lmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4KLSNpbmNs
dWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4K
ICNpbmNsdWRlIDxydW50aW1lL0Vycm9ySGFuZGxpbmdTY29wZS5oPgotI2luY2x1ZGUgPHJ1bnRp
bWUvRXJyb3JJbnN0YW5jZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+CiAjaW5j
bHVkZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0Z1
bmN0aW9uLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAorI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQor
I2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVj
dG9yT2JqZWN0KTsKLVNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01D
b25zdHJ1Y3RvcldpdGhEb2N1bWVudCk7Ci0KLXZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3Qg
QXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQ
cm9wZXJ0eShwcm9wZXJ0eU5hbWUpOwotfQotCi1KU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgaWYgKHMuaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICByZXR1cm4ganNPd25lZFN0cmluZyhleGVj
LCBzKTsKLX0KLQotSlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgU3RyaW5nJiBzKQotewotICAgIGlmIChzLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcyk7Ci19
Ci0KLUpTVmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKLXsK
LSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdXJsLnN0cmluZygpKTsKLX0KLQot
SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1
cmwpCi17Ci0gICAgaWYgKHVybC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBTdHJpbmcmJiBzdHJpbmcpCi17Ci0gICAgaWYg
KCFzdHJpbmcuY29udGFpbnNPbmx5TGF0aW4xKCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJu
IHN0cmluZzsKLX0KLQotU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKLXsKLSAgICBWTSYgdm0gPSBzdGF0
ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAg
IFN0cmluZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOwotICAgIHJldHVybiBzdHJpbmdU
b0J5dGVTdHJpbmcoc3RhdGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOwotfQotCi1TdHJpbmcg
dmFsdWVUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLQotICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICByZXR1cm4gc3Ry
aW5nVG9CeXRlU3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotc3Rh
dGljIGlubGluZSBib29sIGhhc1VucGFpcmVkU3Vycm9nYXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQot
ewotICAgIC8vIEZhc3QgcGF0aCBmb3IgOC1iaXQgc3RyaW5nczsgdGhleSBjYW4ndCBoYXZlIGFu
eSBzdXJyb2dhdGVzLgotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogc3RyaW5nLmNvZGVQb2ludHMoKSkgewot
ICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3Ry
aW5nIHN0cmluZ1RvVVNWU3RyaW5nKFN0cmluZyYmIHN0cmluZykKLXsKLSAgICAvLyBGYXN0IHBh
dGggZm9yIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBubyB1bnBhaXJlZCBzdXJyb2dhdGVzLgot
ICAgIGlmICghaGFzVW5wYWlyZWRTdXJyb2dhdGUoc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIHN0
cmluZzsKLQotICAgIC8vIFNsb3cgcGF0aDogaHR0cDovL2hleWNhbS5naXRodWIuaW8vd2ViaWRs
LyNkZm4tb2J0YWluLXVuaWNvZGUKLSAgICAvLyBSZXBsYWNlcyB1bnBhaXJlZCBzdXJyb2dhdGVz
IHdpdGggdGhlIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4KLSAgICBTdHJpbmdCdWlsZGVyIHJlc3Vs
dDsKLSAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgU3Ry
aW5nVmlldyB2aWV3IHsgc3RyaW5nIH07Ci0gICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHZpZXcu
Y29kZVBvaW50cygpKSB7Ci0gICAgICAgIGlmIChVX0lTX1NVUlJPR0FURShjb2RlUG9pbnQpKQot
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVudENoYXJhY3Rlcik7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29kZVBvaW50KTsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotfQotCi1TdHJpbmcgaWRlbnRpZmllclRvVVNWU3Ry
aW5nKEV4ZWNTdGF0ZSYsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCi17Ci0gICAgU3Ry
aW5nIHN0cmluZyA9IGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgcmV0dXJuIHN0cmluZ1RvVVNW
U3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7Ci19Ci0KLVN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBTdHJp
bmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1v
dmUoc3RyaW5nKSk7Ci19Ci0KLUpTVmFsdWUganNEYXRlKEV4ZWNTdGF0ZSogZXhlYywgZG91Ymxl
IHZhbHVlKQotewotICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLT52bSgpLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOwotfQot
Ci1kb3VibGUgdmFsdWVUb0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNOdW1iZXIo
KTsKLSAgICBpZiAoIXZhbHVlLmluaGVyaXRzKGV4ZWMtPnZtKCksIERhdGVJbnN0YW5jZTo6aW5m
bygpKSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRf
TmFOKCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHZhbHVlLnRvT2Jq
ZWN0KGV4ZWMpKS0+aW50ZXJuYWxOdW1iZXIoKTsKLX0KLQogdm9pZCByZXBvcnRFeGNlcHRpb24o
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBDYWNoZWRTY3JpcHQqIGNh
Y2hlZFNjcmlwdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpAQCAtMjI5LDEyICs5MSwx
MiBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAKICAgICBFcnJv
ckhhbmRsaW5nU2NvcGUgZXJyb3JTY29wZShleGVjLT52bSgpKTsKIAotICAgIFJlZlB0cjxTY3Jp
cHRDYWxsU3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9u
KGV4ZWMsIGV4Y2VwdGlvbiwgU2NyaXB0Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tTaXplVG9DYXB0
dXJlKSk7CisgICAgYXV0byBjYWxsU3RhY2sgPSBJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdENhbGxT
dGFja0Zyb21FeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBJbnNwZWN0b3I6OlNjcmlwdENhbGxT
dGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVyZSk7CiAgICAgc2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKICAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKIAotICAgIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpOwotICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0ganNEeW5h
bWljRG93bmNhc3Q8SlNET01XaW5kb3cqPih2bSwgZ2xvYmFsT2JqZWN0KSkgeworICAgIGF1dG8q
IGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSk7CisgICAgaWYgKGF1dG8qIHdpbmRvdyA9IGpzRHluYW1pY0Rvd25jYXN0
PEpTRE9NV2luZG93Kj4odm0sIGdsb2JhbE9iamVjdCkpIHsKICAgICAgICAgaWYgKCF3aW5kb3ct
PndyYXBwZWQoKS5pc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0yNDIsMTUgKzEwNCwxNCBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIEpTCiAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwogICAgIGludCBjb2x1
bW5OdW1iZXIgPSAwOwogICAgIFN0cmluZyBleGNlcHRpb25Tb3VyY2VVUkw7Ci0gICAgaWYgKGNv
bnN0IFNjcmlwdENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbFN0YWNrLT5maXJzdE5vbk5hdGl2
ZUNhbGxGcmFtZSgpKSB7CisgICAgaWYgKGF1dG8qIGNhbGxGcmFtZSA9IGNhbGxTdGFjay0+Zmly
c3ROb25OYXRpdmVDYWxsRnJhbWUoKSkgewogICAgICAgICBsaW5lTnVtYmVyID0gY2FsbEZyYW1l
LT5saW5lTnVtYmVyKCk7CiAgICAgICAgIGNvbHVtbk51bWJlciA9IGNhbGxGcmFtZS0+Y29sdW1u
TnVtYmVyKCk7CiAgICAgICAgIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGNhbGxGcmFtZS0+c291cmNl
VVJMKCk7CiAgICAgfQogCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHJldHJpZXZlRXJyb3JN
ZXNzYWdlKCpleGVjLCB2bSwgZXhjZXB0aW9uLT52YWx1ZSgpLCBzY29wZSk7Ci0gICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdsb2JhbE9iamVjdC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnJl
cG9ydEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgZXhj
ZXB0aW9uU291cmNlVVJMLCBleGNlcHRpb24sIGNhbGxTdGFjay0+c2l6ZSgpID8gY2FsbFN0YWNr
IDogbnVsbHB0ciwgY2FjaGVkU2NyaXB0KTsKKyAgICBhdXRvIGVycm9yTWVzc2FnZSA9IHJldHJp
ZXZlRXJyb3JNZXNzYWdlKCpleGVjLCB2bSwgZXhjZXB0aW9uLT52YWx1ZSgpLCBzY29wZSk7Cisg
ICAgZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnJlcG9ydEV4Y2VwdGlv
bihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgZXhjZXB0aW9uU291cmNl
VVJMLCBleGNlcHRpb24sIGNhbGxTdGFjay0+c2l6ZSgpID8gY2FsbFN0YWNrLnB0cigpIDogbnVs
bHB0ciwgY2FjaGVkU2NyaXB0KTsKIAogICAgIGlmIChleGNlcHRpb25EZXRhaWxzKSB7CiAgICAg
ICAgIGV4Y2VwdGlvbkRldGFpbHMtPm1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7CkBAIC0zNDcsNDYz
ICsyMDgsNiBAQCB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKEpTQzo6RXhlCiAgICAg
QVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKICAgICB0aHJvd0V4Y2VwdGlvbigmc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbihzdGF0ZSwgV1RGTW92ZShleGNlcHRp
b24pKSk7CiB9Ci0KLWJvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmICghdmFsdWUu
aXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNPYmplY3QqIG9iamVj
dCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENh
bGxUeXBlIGNhbGxUeXBlOwotICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBvYmplY3QtPmdldE1l
dGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0
b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBi
ZSBjYWxsYWJsZSIpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0K
LSAgICByZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5kZWZpbmVkKCk7Ci19Ci0KLWJvb2wgQmluZGlu
Z1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoRXhlY1N0YXRlJiBzdGF0ZSwgRnJh
bWUmIGZyYW1lLCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6
c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKCZzdGF0ZSwgJmZyYW1lLCBEb05vdFJlcG9ydFNlY3Vy
aXR5RXJyb3IpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBtZXNzYWdlID0gZnJhbWUuZG9j
dW1lbnQoKS0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2
ZURPTVdpbmRvdygmc3RhdGUpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQmluZGlu
Z1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEV4ZWNTdGF0ZSYgc3RhdGUs
IERPTVdpbmRvdyYgZ2xvYmFsT2JqZWN0LCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKEJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIGdsb2Jh
bE9iamVjdCwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgbWVzc2FnZSA9IGdsb2JhbE9iamVjdC5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2Fn
ZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCi17Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZyYW1lLT5k
b2N1bWVudCgpLT5kb21XaW5kb3coKS0+cHJpbnRFcnJvck1lc3NhZ2UobWVzc2FnZSk7Ci19Ci0K
LVN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQotewotICAgIEpTRE9NU3RydWN0
dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LnN0cnVjdHVyZXMoTm9Mb2NraW5nTmVj
ZXNzYXJ5KTsKLSAgICByZXR1cm4gc3RydWN0dXJlcy5nZXQoY2xhc3NJbmZvKS5nZXQoKTsKLX0K
LQotU3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8p
Ci17Ci0gICAgYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFya2luZyhnbG9iYWxPYmplY3Qudm0o
KS5oZWFwLCBnbG9iYWxPYmplY3QuZ2NMb2NrKCkpOwotICAgIEpTRE9NU3RydWN0dXJlTWFwJiBz
dHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LnN0cnVjdHVyZXMobG9ja2VyKTsKLSAgICBBU1NFUlQo
IXN0cnVjdHVyZXMuY29udGFpbnMoY2xhc3NJbmZvKSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZXMu
c2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4oZ2xvYmFsT2JqZWN0LnZtKCks
ICZnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQot
c3RhdGljIGNvbnN0IGludDMyX3Qga01heEludDMyID0gMHg3ZmZmZmZmZjsKLXN0YXRpYyBjb25z
dCBpbnQzMl90IGtNaW5JbnQzMiA9IC1rTWF4SW50MzIgLSAxOwotc3RhdGljIGNvbnN0IHVpbnQz
Ml90IGtNYXhVSW50MzIgPSAweGZmZmZmZmZmVTsKLXN0YXRpYyBjb25zdCBpbnQ2NF90IGtKU01h
eEludGVnZXIgPSAweDIwMDAwMDAwMDAwMDAwTEwgLSAxOyAvLyAyXjUzIC0gMSwgbGFyZ2VzdCBp
bnRlZ2VyIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBpbiBFQ01BU2NyaXB0LgotCi1zdGF0aWMgU3Ry
aW5nIHJhbmdlRXJyb3JTdHJpbmcoZG91YmxlIHZhbHVlLCBkb3VibGUgbWluLCBkb3VibGUgbWF4
KQotewotICAgIHJldHVybiBtYWtlU3RyaW5nKCJWYWx1ZSAiLCBTdHJpbmc6Om51bWJlclRvU3Ry
aW5nRUNNQVNjcmlwdCh2YWx1ZSksICIgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWyIsIFN0cmluZzo6
bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1pbiksICIsICIsIFN0cmluZzo6bnVtYmVyVG9TdHJp
bmdFQ01BU2NyaXB0KG1heCksICJdIik7Ci19Ci0KLXN0YXRpYyBkb3VibGUgZW5mb3JjZVJhbmdl
KEV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB4LCBkb3VibGUgbWluaW11bSwgZG91YmxlIG1heGlt
dW0pCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5m
KHgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JT
dHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0g
ICAgeCA9IHRydW5jKHgpOwotICAgIGlmICh4IDwgbWluaW11bSB8fCB4ID4gbWF4aW11bSkgewot
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5nZUVycm9yU3RyaW5nKHgs
IG1pbmltdW0sIG1heGltdW0pKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVy
biB4OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzIHsK
LX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czxpbnQ4X3Q+IHsKLSAgICBz
dGF0aWMgY29uc3QgaW50OF90IG1pblZhbHVlID0gLTEyODsKLSAgICBzdGF0aWMgY29uc3QgaW50
OF90IG1heFZhbHVlID0gMTI3OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZh
bHVlcyA9IDI1NjsgLy8gMl44Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1p
dHM8dWludDhfdD4gewotICAgIHN0YXRpYyBjb25zdCB1aW50OF90IG1heFZhbHVlID0gMjU1Owot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDI1NjsgLy8gMl44Ci19
OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8aW50MTZfdD4gewotICAgIHN0
YXRpYyBjb25zdCBzaG9ydCBtaW5WYWx1ZSA9IC0zMjc2ODsKLSAgICBzdGF0aWMgY29uc3Qgc2hv
cnQgbWF4VmFsdWUgPSAzMjc2NzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZW
YWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBl
TGltaXRzPHVpbnQxNl90PiB7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1heFZh
bHVlID0gNjU1MzU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0g
NjU1MzY7IC8vIDJeMTYKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIGlubGlu
ZSBUIHRvU21hbGxlckludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zaWduZWQ8VD46OnZhbHVlICYmIHN0ZDo6aXNfaW50
ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Igc2lnbmVkIGludGVncmFs
IHR5cGVzIik7Ci0KLSAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4gTGltaXRzVHJhaXQ7Ci0g
ICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0IHNpZ25lZCBp
bnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KLSAgICBpZiAodmFsdWUuaXNJbnQzMigpKSB7Ci0g
ICAgICAgIGludDMyX3QgZCA9IHZhbHVlLmFzSW50MzIoKTsKLSAgICAgICAgaWYgKGQgPj0gTGlt
aXRzVHJhaXQ6Om1pblZhbHVlICYmIGQgPD0gTGltaXRzVHJhaXQ6Om1heFZhbHVlKQotICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3Vy
YXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIGQg
PCBMaW1pdHNUcmFpdDo6bWluVmFsdWUgPyBMaW1pdHNUcmFpdDo6bWluVmFsdWUgOiBMaW1pdHNU
cmFpdDo6bWF4VmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgZCAlPSBMaW1pdHNUcmFpdDo6bnVt
YmVyT2ZWYWx1ZXM7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkID4gTGltaXRzVHJh
aXQ6Om1heFZhbHVlID8gZCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyA6IGQpOwotICAg
IH0KLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLQotICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewot
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNl
UmFuZ2U6Ci0gICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIExpbWl0c1RyYWl0
OjptaW5WYWx1ZSwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKLSAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKHgp
ID8gMCA6IGNsYW1wVG88VD4oeCk7Ci0gICAgfQotCi0gICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwg
c3RkOjppc2luZih4KSB8fCAheCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB4ID0geCA8IDAg
PyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsKLSAgICB4ID0gZm1vZCh4LCBMaW1p
dHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHgg
PiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyB4IC0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVz
IDogeCk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBUIHRvU21h
bGxlclVJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZhbHVlICYmIHN0ZDo6aXNfaW50ZWdyYWw8
VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdW5zaWduZWQgaW50ZWdyYWwgdHlw
ZXMiKTsKLQotICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFpdDsKLSAgICAv
LyBGYXN0IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgdW5zaWduZWQgaW50
ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCi0gICAgaWYgKHZhbHVlLmlzVUludDMyKCkpIHsKLSAg
ICAgICAgdWludDMyX3QgZCA9IHZhbHVlLmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChkIDw9IExp
bWl0c1RyYWl0OjptYXhWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihk
KTsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VD4oZCk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gTGltaXRzVHJhaXQ6
Om1heFZhbHVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotCi0gICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJuIGVuZm9yY2VS
YW5nZShzdGF0ZSwgeCwgMCwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKLSAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgIHJldHVybiBzdGQ6Omlz
bmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7Ci0gICAgfQotCi0gICAgaWYgKHN0ZDo6aXNuYW4o
eCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB4ID0g
eCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VD4oZm1vZCh4LCBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMpKTsKLX0KLQot
aW50OF90IHRvSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi11aW50
OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi1pbnQ4
X3QgdG9JbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi11aW50OF90IHRvVUludDhDbGFtcChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21h
bGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1i
eXRlCi1pbnQ4X3QgdG9JbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9U
Ui9XZWJJREwvI2VzLW9jdGV0Ci11aW50OF90IHRvVUludDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotaW50
MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotdWludDE2X3Qg
dG9VSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLWludDE2X3QgdG9J
bnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi11aW50MTZfdCB0b1VJbnQxNkNsYW1wKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWlu
dDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtc2hvcnQKLWludDE2
X3QgdG9JbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVy
biB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklE
TC8jZXMtdW5zaWduZWQtc2hvcnQKLXVpbnQxNl90IHRvVUludDE2KEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0
YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQot
Ci0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmcKLWludDMyX3QgdG9JbnQz
MkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFz
SW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0
YXRlLCB4LCBrTWluSW50MzIsIGtNYXhJbnQzMik7Ci19Ci0KLWludDMyX3QgdG9JbnQzMkNsYW1w
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzSW50
MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0g
dmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBj
bGFtcFRvPGludDMyX3Q+KHgpOwotfQotCi11aW50MzJfdCB0b1VJbnQzMkNsYW1wKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0g
ICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50
b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88
dWludDMyX3Q+KHgpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVu
c2lnbmVkLWxvbmcKLXVpbnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAodmFsdWUuaXNVSW50
MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9
IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
MCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga01heFVJbnQzMik7Ci19
Ci0KLWludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0gICAgcmV0
dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgLWtKU01heEludGVnZXIsIGtKU01heEludGVnZXIp
OwotfQotCi11aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVl
LnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0g
ICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga0pTTWF4SW50ZWdlcik7Ci19Ci0K
LWludDY0X3QgdG9JbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgcmV0dXJu
IHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjptaW48ZG91Ymxl
PihzdGQ6Om1heDxkb3VibGU+KHgsIC1rSlNNYXhJbnRlZ2VyKSwga0pTTWF4SW50ZWdlcikpOwot
fQotCi11aW50NjRfdCB0b1VJbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAg
cmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bWlu
PGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAwKSwga0pTTWF4SW50ZWdlcikpOwotfQotCi0v
LyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmctbG9uZwotaW50NjRfdCB0b0lu
dDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2
YWx1ZS50b051bWJlcigmc3RhdGUpOwotCi0gICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5
IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KLSAgICB1bnNpZ25lZCBs
b25nIGxvbmcgbjsKLSAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7Ci0gICAgcmV0dXJuIG47Ci19
Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9uZy1sb25n
Ci11aW50NjRfdCB0b1VJbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLQotICAgIC8vIE1hcCBOYU5z
IGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQu
Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIG47Ci0gICAgZG91YmxlVG9JbnRlZ2VyKHgsIG4pOwot
ICAgIHJldHVybiBuOwotfQotCi1jbGFzcyBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yIHsK
LXB1YmxpYzoKLSAgICBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yKCkgPSBkZWZhdWx0Owot
Ci0gICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0
b3IpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW1faGFzU2tpcHBlZEZpcnN0RnJhbWUpIHsK
LSAgICAgICAgICAgIG1faGFzU2tpcHBlZEZpcnN0RnJhbWUgPSB0cnVlOwotICAgICAgICAgICAg
cmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
YXV0byogY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCkpCi0gICAgICAgICAgICBtX2ds
b2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKHZpc2l0b3ItPmNhbGxlZSgpKTsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBDYWxsZWUgaXMgbm90IGFuIG9iamVjdCBpZiB0aGUgY2FsbGVyIGlzIFdlYiBBc3NlbWJs
eS4KLSAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyBoZXJlLiBXZSBjYW4gcHJv
YmFibHkgZ2V0IHRoZSBnbG9iYWwgb2JqZWN0Ci0gICAgICAgICAgICAvLyBmcm9tIHRoZSB0b3At
bW9zdCBXYXNtIEluc3RhbmNlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY1NzIxCi0gICAgICAgICAgICBpZiAodmlzaXRvci0+Y2FsbGVlKCktPmlzT2JqZWN0KCkp
Ci0gICAgICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPih2aXNp
dG9yLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBTdGFja1Zpc2l0b3I6OkRvbmU7Ci0gICAgfQotCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0OyB9Ci0KLXByaXZhdGU6Ci0g
ICAgbXV0YWJsZSBib29sIG1faGFzU2tpcHBlZEZpcnN0RnJhbWUgeyBmYWxzZSB9OwotICAgIG11
dGFibGUgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0IHsgbnVsbHB0ciB9OwotfTsKLQot
RE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coRXhlY1N0YXRlKiBleGVjKQotewotICAgIEdldENh
bGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgaXRlcjsKLSAgICBleGVjLT5pdGVyYXRlKGl0ZXIpOwot
ICAgIHJldHVybiBpdGVyLmdsb2JhbE9iamVjdCgpID8gYXNKU0RPTVdpbmRvdyhpdGVyLmdsb2Jh
bE9iamVjdCgpKS0+d3JhcHBlZCgpIDogZmlyc3RET01XaW5kb3coZXhlYyk7Ci19Ci0KLURPTVdp
bmRvdyYgYWN0aXZlRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gYXNK
U0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCk7Ci19Ci0K
LURPTVdpbmRvdyYgZmlyc3RET01XaW5kb3coRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVy
biBhc0pTRE9NV2luZG93KGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKTsK
LX0KLQotc3RhdGljIGlubGluZSBib29sIGNhbkFjY2Vzc0RvY3VtZW50KEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgRG9jdW1lbnQqIHRhcmdldERvY3VtZW50LCBTZWN1cml0eVJlcG9ydGluZ09wdGlv
biByZXBvcnRpbmdPcHRpb24pCi17Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKCF0YXJnZXREb2N1
bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRE9NV2luZG93JiBhY3RpdmUgPSBh
Y3RpdmVET01XaW5kb3coc3RhdGUpOwotCi0gICAgaWYgKGFjdGl2ZS5kb2N1bWVudCgpLT5zZWN1
cml0eU9yaWdpbigpLmNhbkFjY2Vzcyh0YXJnZXREb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgc3dpdGNoIChyZXBvcnRpbmdPcHRpb24pIHsK
LSAgICBjYXNlIFRocm93U2VjdXJpdHlFcnJvcjoKLSAgICAgICAgdGhyb3dTZWN1cml0eUVycm9y
KCpzdGF0ZSwgc2NvcGUsIHRhcmdldERvY3VtZW50LT5kb21XaW5kb3coKS0+Y3Jvc3NEb21haW5B
Y2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTG9n
U2VjdXJpdHlFcnJvcjoKLSAgICAgICAgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZSh0YXJnZXRE
b2N1bWVudC0+ZnJhbWUoKSwgdGFyZ2V0RG9jdW1lbnQtPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFp
bkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBE
b05vdFJlcG9ydFNlY3VyaXR5RXJyb3I6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNz
VG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBET01XaW5kb3cmIHRhcmdldCwgU2Vj
dXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQotewotICAgIHJldHVybiBjYW5B
Y2Nlc3NEb2N1bWVudChzdGF0ZSwgdGFyZ2V0LmRvY3VtZW50KCksIHJlcG9ydGluZ09wdGlvbik7
Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBGcmFtZSogdGFyZ2V0LCBTZWN1cml0eVJlcG9ydGluZ09wdGlv
biByZXBvcnRpbmdPcHRpb24pCi17Ci0gICAgcmV0dXJuIHRhcmdldCAmJiBjYW5BY2Nlc3NEb2N1
bWVudChzdGF0ZSwgdGFyZ2V0LT5kb2N1bWVudCgpLCByZXBvcnRpbmdPcHRpb24pOwotfQotCi1i
b29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBOb2RlKiB0YXJnZXQpCi17Ci0gICAgcmV0dXJuICF0YXJnZXQgfHwgY2FuQWNj
ZXNzRG9jdW1lbnQoJnN0YXRlLCAmdGFyZ2V0LT5kb2N1bWVudCgpLCBMb2dTZWN1cml0eUVycm9y
KTsKLX0KICAgICAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB0aHJvd1R5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlKQogewpAQCAtOTczLDQwICszNzcsNiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJl
amVjdFByb21pc2VXaXRoVGhpCiAgICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhU
eXBlRXJyb3Ioc3RhdGUsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBt
ZXRob2ROYW1lKSk7CiB9CiAKLXZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpT
RnVuY3Rpb24mIGZ1bmN0aW9uKQotewotICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7Ci0gICAg
SlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoJmZ1bmN0aW9uLCBjYWxs
RGF0YSk7Ci0gICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKLQotICAgIEpT
Qzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzdGF0ZS5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgYXJndW1lbnRzLmFw
cGVuZChzdGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgSlNDOjpjYWxsKCZzdGF0ZSwg
JmZ1bmN0aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVudHMpOwot
fQotCi12b2lkIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpT
Qzo6SlNDZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGF1dG8q
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QqPihjZWxs
KTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0g
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9y
LmFwcGVuZCh0aGlzT2JqZWN0LT5tX2luaXRpYWxpemVGdW5jdGlvbik7Ci19Ci0KLXN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0gICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldycgb3BlcmF0b3IiKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci19Ci0KLUNhbGxUeXBlIERPTUNvbnN0
cnVjdG9yT2JqZWN0OjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCi17
Ci0gICAgY2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbFRocm93VHlwZUVycm9yOwotICAg
IHJldHVybiBDYWxsVHlwZTo6SG9zdDsKLX0KLQogdm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKIHsKICAgICBBU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgJKHJldmlzaW9uIDIxMTM1MykJKGZy
b20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6MjExMzUzKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODI1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LTIwMDYsIDIwMDgtMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3Jn
PgorICogIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEzIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5v
cmc+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb25Pci5oIgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisj
aW5jbHVkZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNEeW5hbWljRG93bmNhc3QuaCIK
KyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKKyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGVJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCisjaW5j
bHVkZSA8Y3N0ZGRlZj4KKyNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CisjaW5jbHVkZSA8
aGVhcC9TbG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KKyNpbmNs
dWRlIDxoZWFwL1dlYWtJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9BdXhpbGlhcnlCYXJy
aWVySW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlND
SlNWYWx1ZUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ2VsbElubGluZXMuaD4KKyNp
bmNsdWRlIDxydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNU
eXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CisjaW5jbHVkZSA8cnVu
dGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5s
aW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRl
IDxydW50aW1lL1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGltZS9Xcml0ZUJhcnJpZXIu
aD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKy8v
IEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoaXMgZmlsZSBhIGxvdCBlYXNpZXIgdG8gcmVhZCBieSBw
dXR0aW5nIGFsbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXQgdGhlIHRvcCwKKy8vIGFuZCBmdW5j
dGlvbiBkZWZpbml0aW9ucyBiZWxvdywgZXZlbiBmb3IgdGVtcGxhdGUgYW5kIGlubGluZSBmdW5j
dGlvbnMuCisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgSlNGdW5jdGlvbjsKK30KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRTY3JpcHQ7CitjbGFzcyBEZWZlcnJlZFByb21p
c2U7CitjbGFzcyBET01XaW5kb3c7CitjbGFzcyBGcmFtZTsKK2NsYXNzIFVSTDsKK2NsYXNzIE5v
ZGU7CisKK3N0cnVjdCBFeGNlcHRpb25EZXRhaWxzIHsKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAg
ICBpbnQgbGluZU51bWJlciB7IDAgfTsKKyAgICBpbnQgY29sdW1uTnVtYmVyIHsgMCB9OworICAg
IFN0cmluZyBzb3VyY2VVUkw7Cit9OworCisvLyBCYXNlIGNsYXNzIGZvciBhbGwgY29uc3RydWN0
b3Igb2JqZWN0cyBpbiB0aGUgSlNDIGJpbmRpbmdzLgorY2xhc3MgRE9NQ29uc3RydWN0b3JPYmpl
Y3QgOiBwdWJsaWMgSlNET01PYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNET01PYmpl
Y3QgQmFzZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpJbXBs
ZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERh
dGE7CisgICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYs
IEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworCitwcm90ZWN0ZWQ6CisgICAg
RE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYp
OworCisgICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKKyAgICBz
dGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBKU0M6OkNhbGxEYXRhJik7
Cit9OworCitjbGFzcyBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCA6IHB1YmxpYyBET01D
b25zdHJ1Y3Rvck9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9i
amVjdCBCYXNlOworCitwcm90ZWN0ZWQ6CisgICAgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmpl
Y3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisKKyAgICBK
U0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOworICAgIHZvaWQgc2V0SW5pdGlh
bGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKKworcHJpdmF0ZToKKyAg
ICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6ZUZ1bmN0aW9u
OworfTsKKworRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKK0RP
TVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CitET01XaW5kb3cmIGZp
cnN0RE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5j
b2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitX
RUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUpOworCit2b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0
cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK1dFQkNPUkVfRVhQT1JUIGJv
b2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsK
Kwordm9pZCB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93RE9NU3ludGF4RXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmKTsgLy8gTm90IHRoZSBzYW1lIGFzIGEgSmF2YVNjcmlwdCBz
eW50YXggZXJyb3IuCit2b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworV0VCQ09SRV9F
WFBPUlQgdm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKK3ZvaWQg
dGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgdGhyb3dTZXF1ZW5jZVR5
cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd1R5
cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7CisKK1dF
QkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1F
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50
SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVk
VmFsdWVzKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9u
RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVu
dEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKK1dFQkNPUkVfRVhQT1JUIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFy
Z3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7CitXRUJDT1JFX0VYUE9S
VCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25z
dCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK0pTQzo6
RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2
YWlsYWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSk7CisKK1N0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKK1N0
cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgdGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dUaGlzVHlwZUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKKworV0VCQ09SRV9FWFBPUlQgSlND
OjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0
ZU5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNl
V2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiwgY29uc3QgY2hhciogaW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkVu
Y29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUp
OworCitXRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJl
KEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKK1dFQkNPUkVfRVhQ
T1JUIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYs
IEpTQzo6U3RydWN0dXJlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3RydWN0dXJlKEpTQzo6
Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNz
PiBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0
ZSopOwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTT2JqZWN0KiBnZXRE
T01Qcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKwordm9pZCBjYWxs
RnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNPYmpl
Y3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBK
U0NsYXNzPiBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVj
dCYpOworCitKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3Js
ZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKK3ZvaWQqIHdyYXBwZXJLZXkoSlNDOjpBcnJheUJ1ZmZl
ciopOworCitKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29y
bGQmLCB2b2lkKik7CitKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqKTsKK0pTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5s
aW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKik7CisK
K2Jvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNE
T01PYmplY3QqLCBKU0M6OldlYWtIYW5kbGVPd25lciopOworYm9vbCBzZXRJbmxpbmVDYWNoZWRX
cmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9NT2JqZWN0KiB3
cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKTsKK2Jvb2wgc2V0SW5s
aW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKiwgSlND
OjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93
bmVyKTsKKworYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwg
dm9pZCosIEpTRE9NT2JqZWN0Kik7Citib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01X
cmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3JhcHBlcik7Citi
b29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5
QnVmZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgRE9NQ2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiwgRE9NQ2xhc3MmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlND
OjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBSZWY8
RE9NQ2xhc3M+JiBvYmplY3QpIHsgcmV0dXJuIGdldENhY2hlZFdyYXBwZXIod29ybGQsIG9iamVj
dC5nZXQoKSk7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVy
Q2xhc3M+IHZvaWQgY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNzKiwgV3Jh
cHBlckNsYXNzKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBl
ckNsYXNzPiB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNzKiwg
V3JhcHBlckNsYXNzKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4g
YXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpIC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBl
bmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3Mq
Pjo6dHlwZTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBhdXRvIGNy
ZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlw
ZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNWYWx1ZSB3cmFwKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBET01DbGFzcyYpOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBKU0NsYXNzPiBKU0NsYXNzJiBjYXN0VGhpc1ZhbHVlKEpTQzo6RXhlY1N0YXRlJik7
CisKK3ZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJik7CisKK2NvbnN0
IEpTQzo6SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKEpTQzo6Vk0mLCBjb25z
dCBKU0M6Okhhc2hUYWJsZSYgc3RhdGljVGFibGUpOworCitTdHJpbmcgcmV0cmlldmVFcnJvck1l
c3NhZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiwg
SlNDOjpDYXRjaFNjb3BlJik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogPSBu
dWxscHRyKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFeGNlcHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0ciwgRXhjZXB0aW9u
RGV0YWlscyogPSBudWxscHRyKTsKK3ZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihKU0M6OkV4
ZWNTdGF0ZSopOworCitKU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpTQzo6RXhlY1N0
YXRlJiwgRXhjZXB0aW9uJiYpOworSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihKU0M6
OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUsIGNvbnN0IFN0cmluZyYpOworCisvLyBDb252ZXJ0
IGEgRE9NIGltcGxlbWVudGF0aW9uIGV4Y2VwdGlvbiBpbnRvIGEgSmF2YVNjcmlwdCBleGNlcHRp
b24gaW4gdGhlIGV4ZWN1dGlvbiBzdGF0ZS4KK3ZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOworV0VCQ09SRV9FWFBP
UlQgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKKworSlNDOjpKU1ZhbHVlIGpzU3RyaW5nKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgVVJMJik7IC8vIGVtcHR5IGlmIHRoZSBVUkwgaXMgbnVsbAorCitK
U0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0
cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCitKU0M6OkpTVmFsdWUg
anNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFVSTCYpOyAvLyB1bmRl
ZmluZWQgaWYgdGhlIFVSTCBpcyBudWxsCisKKy8vIFNlZSBKYXZhU2NyaXB0Q29yZSBmb3IgZXhw
bGFuYXRpb246IFNob3VsZCBiZSB1c2VkIGZvciBhbnkgc3RyaW5nIHRoYXQgaXMgYWxyZWFkeSBv
d25lZCBieSBhbm90aGVyCisvLyBvYmplY3QsIHRvIGxldCB0aGUgZW5naW5lIGtub3cgdGhhdCBj
b2xsZWN0aW5nIHRoZSBKU1N0cmluZyB3cmFwcGVyIGlzIHVubGlrZWx5IHRvIHNhdmUgbWVtb3J5
LgorSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpFeGVjU3RhdGUqLCBjb25z
dCBTdHJpbmcmKTsKKworU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlO
YW1lKTsKKworQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJv
cGVydHlOYW1lKTsKKworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVTdHJp
bmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK1dFQkNPUkVfRVhQ
T1JUIFN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEpTQzo6RXhl
Y1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
dmFsdWVUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK2ludDMy
X3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUsIEpTQzo6RXhlY1N0YXRlKiwgYm9vbCYg
b2theSk7CisKKy8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbnZlcnQgdmFsdWVzIHRvIGlu
dGVnZXJzIGFzIHBlciB0aGUgV2ViSURMIHNwZWNpZmljYXRpb24uCisvLyBUaGUgY29udmVyc2lv
biBmYWlscyBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIG51bWJlciBvciwg
aWYgRW5mb3JjZVJhbmdlIGlzIHNwZWNpZmllZCwKKy8vIHRoZSB2YWx1ZSBpcyBvdXRzaWRlIHRo
ZSByYW5nZSBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlciB0eXBlLgorCitXRUJDT1JFX0VYUE9S
VCBpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZFbmZv
cmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQg
dWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOworV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQzMl90IHRvVUludDMy
RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQ
T1JUIGludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK1dFQkNPUkVfRVhQT1JUIGludDhfdCB0b0lu
dDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1
aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJD
T1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkNsYW1wKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDMyX3QgdG9JbnQzMkNsYW1w
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQzMl90
IHRvVUludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9F
WFBPUlQgaW50NjRfdCB0b0ludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OworV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRDbGFtcChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7CisKK1dFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDgoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4KEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9J
bnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50
MTZfdCB0b1VJbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VY
UE9SVCBpbnQ2NF90IHRvSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VC
Q09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOworCitKU0M6OkpTVmFsdWUganNEYXRlKEpTQzo6RXhlY1N0YXRlKiwgZG91YmxlIHZhbHVl
KTsKKworLy8gTmFOIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gYSBkYXRlLgor
ZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKKworLy8g
VmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBlciBz
ZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCitKU0M6OkpTT2JqZWN0KiB0b0pTU2Vx
dWVuY2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpOwor
CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
SlNDOjpBcnJheUJ1ZmZlciYpOworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcmKTsKK0pTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVm
ZmVyKik7CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyopOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxU
PiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWZQdHI8VD4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgY29uc3QgVmVjdG9yPFQ+Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgVmVjdG9yPFJl
ZlB0cjxUPj4mKTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJik7CisKK0pTQzo6SlNWYWx1ZSB0b0pT
SXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1
ZSk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUJik7CitKU0M6OkpTVmFsdWUg
dG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJik7CisKK1JlZlB0cjxKU0M6OkFycmF5QnVm
ZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDhBcnJh
eShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvUG9z
c2libHlTaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpT
Qzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhB
cnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFy
cmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQxNkFy
cmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRv
UG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0
cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9Qb3NzaWJseVNo
YXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKworUmVmUHRyPEpTQzo6
QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mLCBKU0M6
OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVkSW50OEFycmF5KEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9VbnNoYXJl
ZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQzMkFy
cmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0
cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpT
VmFsdWUpOworUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5zaGFyZWRVaW50OENs
YW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQxNkFy
cmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQ
dHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6
OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVkRmxvYXQzMkFy
cmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0
b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1R5cGU+IFZlY3RvcjxSZWY8VD4+IHRvUmVmTmF0aXZl
QXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgYm9v
bCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK2Vu
dW0gU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IsIExv
Z1NlY3VyaXR5RXJyb3IsIFRocm93U2VjdXJpdHlFcnJvciB9OworbmFtZXNwYWNlIEJpbmRpbmdT
ZWN1cml0eSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hlY2tTZWN1cml0eUZvck5v
ZGUoSlNDOjpFeGVjU3RhdGUmLCBUJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hl
Y2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUKik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0
YXRlJiwgRXhjZXB0aW9uT3I8VCo+JiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEV4Y2Vw
dGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2VwdGlv
bk9yPFQmPiYmKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpF
eGVjU3RhdGUqLCBET01XaW5kb3cmLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9IExvZ1NlY3Vy
aXR5RXJyb3IpOworICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4
ZWNTdGF0ZSYsIERPTVdpbmRvdyYsIFN0cmluZyYgbWVzc2FnZSk7CisgICAgYm9vbCBzaG91bGRB
bGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSosIFNlY3VyaXR5UmVwb3J0
aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7CisgICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vz
c1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUmLCBGcmFtZSYsIFN0cmluZyYgbWVzc2FnZSk7CisgICAg
Ym9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIE5vZGUqKTsKK307
CisKK3ZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSk7CisKK1N0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFt
ZSk7CitBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0
eU5hbWUpOworCit0ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3RoPiBKU0M6
OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworCitlbnVt
IGNsYXNzIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHsgVGhyb3csIFJldHVybkVhcmx5LCBSZWpl
Y3RQcm9taXNlLCBBc3NlcnQgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4KK3N0cnVj
dCBCaW5kaW5nQ2FsbGVyIHsKKyAgICB1c2luZyBBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiA9IGJv
b2woSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlRocm93U2Nv
cGUmKTsKKyAgICB1c2luZyBBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiA9IEpTQzo6SlNWYWx1ZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICB1c2luZyBP
cGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNpbmcgUHJvbWlzZU9wZXJh
dGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSos
IEpTQ2xhc3MqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93U2NvcGUmKTsKKwor
ICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpFbmNvZGVkSlNWYWx1ZSk7CisgICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RGb3JPcGVyYXRpb24o
SlNDOjpFeGVjU3RhdGUmKTsKKworICAgIHRlbXBsYXRlPFByb21pc2VPcGVyYXRpb25DYWxsZXJG
dW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRo
cm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2U+CisgICAgc3RhdGlj
IEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbFByb21pc2VPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNvbnN0IGNoYXIqIG9wZXJh
dGlvbk5hbWUpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhdGUpOworICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0
byogdGhpc09iamVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsKKyAgICAgICAgaWYgKHNo
b3VsZFRocm93ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5MSUtFTFko
IXRoaXNPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoVGhpc1R5
cGVFcnJvcihwcm9taXNlLmdldCgpLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0
aW9uTmFtZSk7CisgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKKyAgICAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZvKCkpOworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2RlIHRv
IHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KKyAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhpc09iamVjdCwgV1RGTW92ZShwcm9taXNlKSwgdGhy
b3dTY29wZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8T3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24g
b3BlcmF0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBjYWxsT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgY2hhciogb3Bl
cmF0aW9uTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3RhdGUpOworICAgICAgICBpZiAo
c2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCAmJiBVTkxJS0VM
WSghdGhpc09iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93VGhp
c1R5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1l
LCBvcGVyYXRpb25OYW1lKTsKKyAgICAgICAgICAgIC8vIEZvciBjdXN0b20gcHJvbWlzZS1yZXR1
cm5pbmcgb3BlcmF0aW9ucworICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoVGhp
c1R5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25O
YW1lKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7CisgICAgICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygpKTsKKyAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5lcmF0ZWQg
Y29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNPYmplY3QuCisgICAgICAg
IHJldHVybiBvcGVyYXRpb25DYWxsZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9uIHNldHRlciwgQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6VGhyb3c+CisgICAgc3RhdGljIGJvb2wgc2V0QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHN0YXRlKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yQXR0
cmlidXRlKCpzdGF0ZSwgdGhpc1ZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2Jq
ZWN0KSkKKyAgICAgICAgICAgIHJldHVybiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OlRocm93KSA/IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpIDogZmFsc2U7Cisg
ICAgICAgIHJldHVybiBzZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgSlNDOjpKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgdGhyb3dTY29wZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
QXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBz
aG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0aWMg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBhdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6
OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvKiB0aGlzT2JqZWN0
ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7CisgICAgICAgIGlmIChVTkxJ
S0VMWSghdGhpc09iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFz
c05hbWUsIGF0dHJpYnV0ZU5hbWUpOworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlKQorICAgICAgICAgICAgICAgIHJl
dHVybiByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6Omlu
Zm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBKU0M6
OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzVW5kZWZpbmVkKCkpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwg
dGhyb3dTY29wZSkpOworICAgIH0KK307CisKKy8vIEV4Y2VwdGlvbk9yIGhhbmRsaW5nLgordm9p
ZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBF
eGNlcHRpb25Pcjx2b2lkPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUm
LCBFeGNlcHRpb25PcjxUPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0
b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6
OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKTsKKworLy8gSW5saW5lIGZ1bmN0
aW9ucyBhbmQgdGVtcGxhdGUgZGVmaW5pdGlvbnMuCisKK2lubGluZSBKU0M6OlN0cnVjdHVyZSog
RE9NQ29uc3RydWN0b3JPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQorewor
ICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5m
bygpKTsKK30KKworaW5saW5lIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpET01Db25zdHJ1Y3Rvck9i
amVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQorICAgIDogSlNET01PYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9
CisKK2lubGluZSBTdHJpbmcgRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBK
U09iamVjdCopCit7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRnVuY3Rpb24iKTsKK30KKwor
aW5saW5lIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0OjpET01Db25zdHJ1Y3RvckpTQnVp
bHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQorICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9i
YWxPYmplY3QpCit7Cit9CisKK2lubGluZSBKU0M6OkpTRnVuY3Rpb24qIERPTUNvbnN0cnVjdG9y
SlNCdWlsdGluT2JqZWN0Ojppbml0aWFsaXplRnVuY3Rpb24oKQoreworICAgIHJldHVybiBtX2lu
aXRpYWxpemVGdW5jdGlvbi5nZXQoKTsKK30KKworaW5saW5lIHZvaWQgRE9NQ29uc3RydWN0b3JK
U0J1aWx0aW5PYmplY3Q6OnNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiB2bSwgSlNDOjpK
U0Z1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBtX2luaXRpYWxpemVGdW5jdGlvbi5zZXQodm0s
IHRoaXMsICZmdW5jdGlvbik7Cit9CisKK2lubGluZSBKU0RPTUdsb2JhbE9iamVjdCogZGVwcmVj
YXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICAvLyBGSVhNRTogQ2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2luZyB0aGUg
Z2xvYmFsIG9iamVjdAorICAgIC8vIGZyb20gd2hpY2ggdGhlIG9iamVjdCBpcyBiZWluZyBjcmVh
dGVkLCBpbnN0ZWFkIG9mIGFzc3VtaW5nIHRoZSBsZXhpY2FsIG9uZS4KKyAgICAvLyBlLmcuIHN1
YmZyYW1lLmRvY3VtZW50LmJvZHkgc2hvdWxkIHVzZSB0aGUgc3ViZnJhbWUncyBnbG9iYWwgb2Jq
ZWN0LCBub3QgdGhlIGxleGljYWwgb25lLgorICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3RydWN0dXJlKiBnZXRET01TdHJ1
Y3R1cmUoSlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7Cisg
ICAgaWYgKEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYWNoZWRET01TdHJ1Y3R1cmUo
Z2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmluZm8oKSkpCisgICAgICAgIHJldHVybiBzdHJ1
Y3R1cmU7CisgICAgcmV0dXJuIGNhY2hlRE9NU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgV3JhcHBl
ckNsYXNzOjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFzczo6
Y3JlYXRlUHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSksIFdyYXBwZXJDbGFzczo6aW5mbygp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1
Y3R1cmUqIGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgd3JvbmcuIEl0IHVzZXMgdGhlIHdyb25n
IGdsb2JhbCBvYmplY3QgZm9yIGNyZWF0aW5nIHRoZSBwcm90b3R5cGUgc3RydWN0dXJlLgorICAg
IHJldHVybiBnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihleGVjLT52bSgpLCAqZGVwcmVj
YXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldERPTVByb3RvdHlwZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJl
dHVybiBKU0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oYXNPYmplY3QoZ2V0RE9NU3RydWN0dXJl
PFdyYXBwZXJDbGFzcz4odm0sICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2Jh
bE9iamVjdCkpLT5zdG9yZWRQcm90b3R5cGUoKSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBK
U0NsYXNzPiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0aW4oSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlvbiwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QgPSBKU0NsYXNzOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpTQ2xhc3M+KGdsb2JhbE9iamVj
dC52bSgpLCBnbG9iYWxPYmplY3QpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICBjYWxsRnVuY3Rpb25X
aXRoQ3VycmVudEFyZ3VtZW50cyhzdGF0ZSwgKm9iamVjdCwgaW5pdGlhbGl6ZUZ1bmN0aW9uKTsK
KyAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsKK30KKworaW5saW5lIEpT
Qzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwg
SlNDOjpBcnJheUJ1ZmZlciopCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlcio+KHdvcmxkLnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci5nZXQo
KSktPndyYXBwZXJPd25lcigpOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBlcktleShKU0M6OkFy
cmF5QnVmZmVyKiBkb21PYmplY3QpCit7CisgICAgcmV0dXJuIGRvbU9iamVjdDsKK30KKworaW5s
aW5lIEpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYs
IHZvaWQqKSB7IHJldHVybiBudWxscHRyOyB9CitpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRX
cmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCosIEpTQzo6V2Vha0hh
bmRsZU93bmVyKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIGNsZWFySW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqKSB7IHJldHVy
biBmYWxzZTsgfQorCitpbmxpbmUgSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIo
RE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QpCit7Cisg
ICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gZG9tT2JqZWN0LT53cmFwcGVyKCk7Cit9CisKK2lubGluZSBKU0M6OkpTQXJyYXlCdWZm
ZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpB
cnJheUJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGJ1ZmZlci0+bV93cmFwcGVyLmdldCgpOwor
fQorCitpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYg
d29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTU9iamVjdCogd3JhcHBlciwg
SlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcikKK3sKKyAgICBpZiAoIXdvcmxkLmlz
Tm9ybWFsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb21PYmplY3QtPnNldFdyYXBw
ZXIod3JhcHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQpOworICAgIHJldHVybiB0cnVlOworfQor
CitpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29y
bGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFw
cGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKQoreworICAgIGlmICghd29y
bGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvbU9iamVjdC0+bV93
cmFwcGVyID0gSlNDOjpXZWFrPEpTQzo6SlNBcnJheUJ1ZmZlcj4od3JhcHBlciwgd3JhcHBlck93
bmVyLCAmd29ybGQpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBjbGVhcklu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxl
KiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyKQoreworICAgIGlmICghd29ybGQuaXNO
b3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvbU9iamVjdC0+Y2xlYXJXcmFw
cGVyKHdyYXBwZXIpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBjbGVhcklu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZl
ciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIpCit7CisgICAgaWYgKCF3
b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgd2Vha0NsZWFyKGRv
bU9iamVjdC0+bV93cmFwcGVyLCB3cmFwcGVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRX
cmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzJiBkb21PYmplY3QpCit7Cisg
ICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCAmZG9t
T2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIHdvcmxkLm1fd3Jh
cHBlcnMuZ2V0KHdyYXBwZXJLZXkoJmRvbU9iamVjdCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCBjYWNoZVdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgV3JhcHBlckNs
YXNzKiB3cmFwcGVyKQoreworICAgIEpTQzo6V2Vha0hhbmRsZU93bmVyKiBvd25lciA9IHdyYXBw
ZXJPd25lcih3b3JsZCwgZG9tT2JqZWN0KTsKKyAgICBpZiAoc2V0SW5saW5lQ2FjaGVkV3JhcHBl
cih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyLCBvd25lcikpCisgICAgICAgIHJldHVybjsKKyAg
ICB3ZWFrQWRkKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwgSlNDOjpX
ZWFrPEpTQzo6SlNPYmplY3Q+KHdyYXBwZXIsIG93bmVyLCAmd29ybGQpKTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQg
dW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVj
dCwgV3JhcHBlckNsYXNzKiB3cmFwcGVyKQoreworICAgIGlmIChjbGVhcklubGluZUNhY2hlZFdy
YXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCisgICAgICAgIHJldHVybjsKKyAgICB3
ZWFrUmVtb3ZlKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwgd3JhcHBl
cik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBpbmxpbmUg
YXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxU
PiYmIGRvbU9iamVjdCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPERP
TUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxE
T01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCit7CisgICAgdXNpbmcgV3JhcHBlckNsYXNz
ID0gdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBl
ckNsYXNzOworCisgICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29y
bGQoKSwgZG9tT2JqZWN0KSk7CisgICAgYXV0byogZG9tT2JqZWN0UHRyID0gZG9tT2JqZWN0LnB0
cigpOworICAgIGF1dG8qIHdyYXBwZXIgPSBXcmFwcGVyQ2xhc3M6OmNyZWF0ZShnZXRET01TdHJ1
Y3R1cmU8V3JhcHBlckNsYXNzPihnbG9iYWxPYmplY3QtPnZtKCksICpnbG9iYWxPYmplY3QpLCBn
bG9iYWxPYmplY3QsIFdURk1vdmUoZG9tT2JqZWN0KSk7CisgICAgY2FjaGVXcmFwcGVyKGdsb2Jh
bE9iamVjdC0+d29ybGQoKSwgZG9tT2JqZWN0UHRyLCB3cmFwcGVyKTsKKyAgICByZXR1cm4gd3Jh
cHBlcjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlubGlu
ZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVm
PFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1l
PERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCit7CisgICAgcmV0dXJuIGNyZWF0ZVdy
YXBwZXI8RE9NQ2xhc3M+KGdsb2JhbE9iamVjdCwgc3RhdGljX3JlZmVyZW5jZV9jYXN0PERPTUNs
YXNzPihXVEZNb3ZlKGRvbU9iamVjdCkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xh
c3M+IGlubGluZSBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIERPTUNsYXNzJiBkb21PYmplY3QpCit7CisgICAg
aWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQo
KSwgZG9tT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIHRvSlNO
ZXdseUNyZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgUmVmPERPTUNsYXNzPihkb21PYmplY3Qp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQ2xhc3MmIGNhc3RU
aGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQoreworICAgIGF1dG8gdGhpc1ZhbHVlID0g
c3RhdGUudGhpc1ZhbHVlKCk7CisgICAgYXV0byBjYXN0ZWRUaGlzID0ganNEeW5hbWljRG93bmNh
c3Q8SlNDbGFzcyo+KHN0YXRlLnZtKCksIHRoaXNWYWx1ZSk7CisgICAgQVNTRVJUKGNhc3RlZFRo
aXMpOworICAgIHJldHVybiAqY2FzdGVkVGhpczsKK30KKworaW5saW5lIGludDMyX3QgZmluaXRl
SW50MzJWYWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBib29s
JiBva2F5KQoreworICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcihleGVjKTsKKyAg
ICBva2F5ID0gc3RkOjppc2Zpbml0ZShudW1iZXIpOworICAgIHJldHVybiBKU0M6OnRvSW50MzIo
bnVtYmVyKTsKK30KKworLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBz
ZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCitpbmxp
bmUgSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpCit7CisgICAgSlNDOjpWTSYgdm0gPSBl
eGVjLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0KCk7CisgICAgaWYgKCFv
YmplY3QpIHsKKyAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29wZSk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEpTQzo6SlNWYWx1ZSBsZW5ndGhW
YWx1ZSA9IG9iamVjdC0+Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAgaWYgKGxlbmd0
aFZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVF
cnJvcihleGVjLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IGxlbmd0aCA9IGxlbmd0aFZhbHVlLnRvVUludDMyKCZleGVjKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK2lubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICBpZiAo
YXV0byByZXN1bHQgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgYnVm
ZmVyKSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIC8vIFRoZSBKU0FycmF5QnVmZmVy
OjpjcmVhdGUgZnVuY3Rpb24gd2lsbCByZWdpc3RlciB0aGUgd3JhcHBlciBpbiBmaW5pc2hDcmVh
dGlvbi4KKyAgICByZXR1cm4gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUtPnZtKCks
IGdsb2JhbE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYnVmZmVyLnNoYXJpbmdNb2RlKCkp
LCAmYnVmZmVyKTsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVm
ZmVyVmlldyYgdmlldykKK3sKKyAgICByZXR1cm4gdmlldy53cmFwKHN0YXRlLCBnbG9iYWxPYmpl
Y3QpOworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyKiBidWZm
ZXIpCit7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwor
ICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICpidWZmZXIpOworfQorCitpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3KiB2aWV3KQoreworICAg
IGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgcmV0dXJuIHRv
SlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKnZpZXcpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIHB0cikKK3sKKyAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+JiYgcHRyKQoreworICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VD4mIHZlY3RvcikK
K3sKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0g
Y29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXJyYXktPnB1dERp
cmVjdEluZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0pKTsK
KyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAg
IH0KKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mIHZlY3RvcikKK3sKKyAgICBK
U0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0
RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKKyAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4
KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0uZ2V0KCkpKTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIH0K
KyAgICByZXR1cm4gYXJyYXk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1l
JiBwcml2YXRlTmFtZSkKK3sKKyAgICByZXR1cm4gSlNDOjpTeW1ib2w6OmNyZWF0ZShleGVjLT52
bSgpLCBwcml2YXRlTmFtZS51aWQoKSk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0
ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KCZz
dGF0ZSwgdmFsdWUsIGZhbHNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY3Jl
YXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVj
dCwgdmFsdWUpLCBmYWxzZSk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9y
RW5kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JS
ZXN1bHRPYmplY3QoJnN0YXRlLCBKU0M6OmpzVW5kZWZpbmVkKCksIHRydWUpOworfQorCitpbmxp
bmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZm
ZXJWaWV3KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byogd3Jh
cHBlciA9IGpzRHluYW1pY0Rvd25jYXN0PEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqPih2bSwgdmFs
dWUpOworICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0
dXJuIHdyYXBwZXItPnBvc3NpYmx5U2hhcmVkSW1wbCgpOworfQorCitpbmxpbmUgUmVmUHRyPEpT
Qzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mIHZt
LCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byByZXN1bHQgPSB0b1Bvc3NpYmx5U2hh
cmVkQXJyYXlCdWZmZXJWaWV3KHZtLCB2YWx1ZSk7CisgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0
LT5pc1NoYXJlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitpbmxpbmUgUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50
OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Q
b3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDhBZGFwdG9yPih2bSwgdmFsdWUp
OyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDE2
QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bv
c3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFwdG9yPih2bSwgdmFsdWUp
OyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMy
QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bv
c3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFwdG9yPih2bSwgdmFsdWUp
OyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4
QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bv
c3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwgdmFsdWUp
OyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlTaGFy
ZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENsYW1w
ZWRBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+
IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpV
aW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDMyQXJy
YXk+IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlND
OjpVaW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQz
MkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmll
dzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6
RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mIHZtLCBK
U0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5
cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9CisKK2lubGluZSBSZWZQ
dHI8SlNDOjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpT
Qzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQxNkFy
cmF5PiB0b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQxNkFkYXB0
b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Vuc2hh
cmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1
ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Vuc2hhcmVkVWludDhBcnJh
eShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFy
ZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGlu
ZSBSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xhbXBlZEFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNo
YXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7
IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNoYXJlZFVpbnQxNkFycmF5
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJl
ZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGlu
ZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5
cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8
SlNDOjpGbG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3
PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpG
bG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6
RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgSlNUPiBpbmxpbmUgVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNJiB2bSA9
IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIHRocm93U2VxdWVuY2VUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBW
ZWN0b3I8UmVmPFQ+PiByZXN1bHQ7CisgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCB2YWx1
ZSwgWyZyZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNW
YWx1ZSBqc1ZhbHVlKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgICAgICBpZiAoanNWYWx1ZS5pbmhlcml0cyh2bSwgSlNUOjppbmZvKCkpKSB7
CisgICAgICAgICAgICBhdXRvKiBvYmplY3QgPSBKU1Q6OnRvV3JhcHBlZCh2bSwganNWYWx1ZSk7
CisgICAgICAgICAgICBBU1NFUlQob2JqZWN0KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
Km9iamVjdCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhyb3dBcnJheUVsZW1lbnRU
eXBlRXJyb3IoKnN0YXRlLCBzY29wZSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworaW5saW5lIFN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCit7CisgICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSk7Cisg
ICAgcmV0dXJuIHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFtZS51aWQoKSA6IHByb3Bl
cnR5TmFtZS5wdWJsaWNOYW1lKCk7Cit9CisKK2lubGluZSBBdG9taWNTdHJpbmcgcHJvcGVydHlO
YW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAg
IHJldHVybiBBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVp
ZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Cit9CisKK3RlbXBsYXRlPEpTQzo6TmF0
aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFs
dWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0M6OkVuY29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7Cisg
ICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKGV4
ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9wZXJ0eU5h
bWUucHVibGljTmFtZSgpLCBuYXRpdmVGdW5jdGlvbikpOworfQorCitBTFdBWVNfSU5MSU5FIHZv
aWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCit7CisgICAgaWYgKHRocm93
U2NvcGUuZXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBwcm9wYWdhdGVFeGNlcHRp
b25TbG93UGF0aChzdGF0ZSwgdGhyb3dTY29wZSwgV1RGTW92ZShleGNlcHRpb24pKTsKK30KKwor
aW5saW5lIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25Pcjx2b2lkPiYmIHZhbHVlKQorewor
ICAgIGlmIChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpCisgICAgICAgIHByb3BhZ2F0
ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpU
aHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQoreworICAgIGlm
IChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhj
ZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKyAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxP
YmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3Bl
JiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VM
WSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0
YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9i
YWxPYmplY3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBUJiBub2RlKQoreworICAgIHJldHVybiBzaG91bGRBbGxv
d0FjY2Vzc1RvTm9kZShzdGF0ZSwgJm5vZGUpID8gJm5vZGUgOiBudWxscHRyOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5
Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQqIG5vZGUpCit7CisgICAgcmV0dXJuIHNo
b3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBub2RlKSA/IG5vZGUgOiBudWxscHRyOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1
cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRp
b25PcjxUKj4mJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCisgICAg
ICAgIHJldHVybiB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIGNoZWNrU2Vj
dXJpdHlGb3JOb2RlKHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5
OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9y
PFQmPiYmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gY2hlY2tTZWN1cml0
eUZvck5vZGUoc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQoj
IyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFu
ZGxpbmcuaAkocmV2aXNpb24gMjExMzUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01FeGNlcHRpb25IYW5kbGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw1NSArMjMsMTkg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKLSNpbmNsdWRl
ICJKU0RPTUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgotI2luY2x1
ZGUgIkpTRHluYW1pY0Rvd25jYXN0LmgiCi0jaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCi0j
aW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oIgotI2luY2x1ZGUgIldlYkNvcmVUeXBl
ZEFycmF5Q29udHJvbGxlci5oIgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8aGVhcC9I
ZWFwSW5saW5lcy5oPgotI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+Ci0jaW5j
bHVkZSA8aGVhcC9XZWFrLmg+Ci0jaW5jbHVkZSA8aGVhcC9XZWFrSW5saW5lcy5oPgotI2luY2x1
ZGUgPHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1l
L0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaD4KLSNpbmNs
dWRlIDxydW50aW1lL0pTQXJyYXkuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIu
aD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9KU0NlbGxJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdElubGluZXMu
aD4KLSNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KLSNpbmNsdWRlIDxydW50aW1l
L0xvb2t1cC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KLSNpbmNs
dWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1R5cGVk
QXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgotI2luY2x1
ZGUgPHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNp
bmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0vLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGZpbGUg
YSBsb3QgZWFzaWVyIHRvIHJlYWQgYnkgcHV0dGluZyBhbGwgZnVuY3Rpb24gZGVjbGFyYXRpb25z
IGF0IHRoZSB0b3AsCi0vLyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYmVsb3csIGV2ZW4gZm9y
IHRlbXBsYXRlIGFuZCBpbmxpbmUgZnVuY3Rpb25zLgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNz
IEpTRnVuY3Rpb247CitjbGFzcyBDYXRjaFNjb3BlOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENhY2hlZFNjcmlwdDsKIGNsYXNzIERlZmVycmVkUHJvbWlzZTsKLWNsYXNzIERP
TVdpbmRvdzsKLWNsYXNzIEZyYW1lOwotY2xhc3MgVVJMOwotY2xhc3MgTm9kZTsKK2NsYXNzIEpT
RE9NR2xvYmFsT2JqZWN0OwogCiBzdHJ1Y3QgRXhjZXB0aW9uRGV0YWlscyB7CiAgICAgU3RyaW5n
IG1lc3NhZ2U7CkBAIC04MCwzOSArNDQsNiBAQCBzdHJ1Y3QgRXhjZXB0aW9uRGV0YWlscyB7CiAg
ICAgU3RyaW5nIHNvdXJjZVVSTDsKIH07CiAKLS8vIEJhc2UgY2xhc3MgZm9yIGFsbCBjb25zdHJ1
Y3RvciBvYmplY3RzIGluIHRoZSBKU0MgYmluZGluZ3MuCi1jbGFzcyBET01Db25zdHJ1Y3Rvck9i
amVjdCA6IHB1YmxpYyBKU0RPTU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0RPTU9i
amVjdCBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6Oklt
cGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UgfCBKU0M6OlR5cGVPZlNob3VsZENhbGxHZXRDYWxs
RGF0YTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZN
JiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNWYWx1ZSk7Ci0KLXByb3RlY3RlZDoKLSAg
ICBET01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0
Jik7Ci0KLSAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwotICAg
IHN0YXRpYyBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIEpTQzo6Q2FsbERhdGEm
KTsKLX07Ci0KLWNsYXNzIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0IDogcHVibGljIERP
TUNvbnN0cnVjdG9yT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9y
T2JqZWN0IEJhc2U7Ci0KLXByb3RlY3RlZDoKLSAgICBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9i
amVjdChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgc3RhdGljIHZv
aWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKLQotICAg
IEpTQzo6SlNGdW5jdGlvbiogaW5pdGlhbGl6ZUZ1bmN0aW9uKCk7Ci0gICAgdm9pZCBzZXRJbml0
aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYsIEpTQzo6SlNGdW5jdGlvbiYpOwotCi1wcml2YXRlOgot
ICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNGdW5jdGlvbj4gbV9pbml0aWFsaXplRnVuY3Rp
b247Ci19OwotCi1ET01XaW5kb3cmIGNhbGxlckRPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwot
RE9NV2luZG93JiBhY3RpdmVET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKLURPTVdpbmRvdyYg
Zmlyc3RET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKLQogV0VCQ09SRV9FWFBPUlQgSlNDOjpF
bmNvZGVkSlNWYWx1ZSByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUm
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsK
IFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRl
TmFtZSk7CiAKQEAgLTE0Nyw0NyArNzgsNiBAQCBXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRK
U1ZhbHVlIHJlamVjCiBXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFBy
b21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKTsKIFdFQkNPUkVfRVhQT1JUIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9u
TmFtZSk7CiAKLVdFQkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJlKiBnZXRDYWNoZWRET01TdHJ1
Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwotV0VCQ09S
RV9FWFBPUlQgSlNDOjpTdHJ1Y3R1cmUqIGNhY2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2Jq
ZWN0JiwgSlNDOjpTdHJ1Y3R1cmUqLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6U3RydWN0dXJlKiBnZXRET01TdHJ1Y3R1cmUo
SlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVy
Q2xhc3M+IEpTQzo6U3RydWN0dXJlKiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlKEpTQzo6RXhl
Y1N0YXRlKik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNPYmplY3Qq
IGdldERPTVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotCi12b2lk
IGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U09iamVjdCYgdGhpc09iamVjdCwgSlNDOjpKU0Z1bmN0aW9uJik7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIEpTQ2xhc3M+IEpTQzo6RW5jb2RlZEpTVmFsdWUgY3JlYXRlSlNCdWlsdGluKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU0Z1bmN0aW9uJiBpbml0aWFsaXplRnVuY3Rpb24sIEpTRE9NR2xvYmFs
T2JqZWN0Jik7Ci0KLUpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBl
cldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciopOwotdm9pZCogd3JhcHBlcktleShKU0M6OkFycmF5
QnVmZmVyKik7Ci0KLUpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBw
ZXJXb3JsZCYsIHZvaWQqKTsKLUpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSopOwotSlNDOjpKU0FycmF5QnVmZmVyKiBn
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIq
KTsKLQotYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQq
LCBKU0RPTU9iamVjdCosIEpTQzo6V2Vha0hhbmRsZU93bmVyKik7Ci1ib29sIHNldElubGluZUNh
Y2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgU2NyaXB0V3JhcHBhYmxlKiwgSlNET01PYmpl
Y3QqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpOwotYm9vbCBz
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIq
LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFw
cGVyT3duZXIpOwotCi1ib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29y
bGQmLCB2b2lkKiwgSlNET01PYmplY3QqKTsKLWJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVy
KERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9NT2JqZWN0KiB3cmFwcGVy
KTsKLWJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6
QXJyYXlCdWZmZXIqLCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIpOwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBET01DbGFzcz4gSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQmLCBET01DbGFzcyYpOwotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGlu
ZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQs
IFJlZjxET01DbGFzcz4mIG9iamVjdCkgeyByZXR1cm4gZ2V0Q2FjaGVkV3JhcHBlcih3b3JsZCwg
b2JqZWN0LmdldCgpKTsgfQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdy
YXBwZXJDbGFzcz4gdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgRE9NQ2xhc3Mq
LCBXcmFwcGVyQ2xhc3MqKTsKLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBX
cmFwcGVyQ2xhc3M+IHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgRE9NQ2xh
c3MqLCBXcmFwcGVyQ2xhc3MqKTsKLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFt
ZSBUPiBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4g
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUs
IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJD
bGFzcyo+Ojp0eXBlOwotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGF1
dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUPiYmKSAtPiB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVu
YW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+
Ojp0eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gSlNDOjpKU1ZhbHVlIHdyYXAo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIERPTUNsYXNzJik7Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIEpTQ2xhc3M+IEpTQ2xhc3MmIGNhc3RUaGlzVmFsdWUoSlNDOjpFeGVjU3Rh
dGUmKTsKLQotdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmKTsKLQot
Y29uc3QgSlNDOjpIYXNoVGFibGUmIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoSlNDOjpWTSYs
IGNvbnN0IEpTQzo6SGFzaFRhYmxlJiBzdGF0aWNUYWJsZSk7Ci0KIFN0cmluZyByZXRyaWV2ZUVy
cm9yTWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUgZXhjZXB0
aW9uLCBKU0M6OkNhdGNoU2NvcGUmKTsKIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0
aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0
KiA9IG51bGxwdHIpOwogV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiosIENhY2hlZFNjcmlwdCogPSBudWxscHRyLCBFeGNl
cHRpb25EZXRhaWxzKiA9IG51bGxwdHIpOwpAQCAtMjAwLDU3MiArOTAsMTEgQEAgSlNDOjpKU1Zh
bHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZQogdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb24mJik7CiBXRUJDT1JF
X0VYUE9SVCB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOwogCi1KU0M6OkpTVmFsdWUganNTdHJpbmco
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBVUkwmKTsgLy8gZW1wdHkgaWYgdGhlIFVSTCBpcyBudWxs
Ci0KLUpTQzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhlY1N0YXRlKiwgY29u
c3QgU3RyaW5nJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgc3RyaW5nIGlzIG51bGwKLUpTQzo6SlNW
YWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgVVJMJik7IC8v
IHVuZGVmaW5lZCBpZiB0aGUgVVJMIGlzIG51bGwKLQotLy8gU2VlIEphdmFTY3JpcHRDb3JlIGZv
ciBleHBsYW5hdGlvbjogU2hvdWxkIGJlIHVzZWQgZm9yIGFueSBzdHJpbmcgdGhhdCBpcyBhbHJl
YWR5IG93bmVkIGJ5IGFub3RoZXIKLS8vIG9iamVjdCwgdG8gbGV0IHRoZSBlbmdpbmUga25vdyB0
aGF0IGNvbGxlY3RpbmcgdGhlIEpTU3RyaW5nIHdyYXBwZXIgaXMgdW5saWtlbHkgdG8gc2F2ZSBt
ZW1vcnkuCi1KU0M6OkpTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IFN0cmluZyYpOwotCi1TdHJpbmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotCi1BdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlND
OjpQcm9wZXJ0eU5hbWUpOwotCi1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvQnl0
ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwotV0VCQ09S
RV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9CeXRlU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoSlND
OjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLVdFQkNPUkVfRVhQT1JUIFN0
cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQot
aW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWYWx1ZSwgSlNDOjpFeGVjU3RhdGUqLCBi
b29sJiBva2F5KTsKLQotLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY29udmVydCB2YWx1ZXMg
dG8gaW50ZWdlcnMgYXMgcGVyIHRoZSBXZWJJREwgc3BlY2lmaWNhdGlvbi4KLS8vIFRoZSBjb252
ZXJzaW9uIGZhaWxzIGlmIHRoZSB2YWx1ZSBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgbnVtYmVy
IG9yLCBpZiBFbmZvcmNlUmFuZ2UgaXMgc3BlY2lmaWVkLAotLy8gdGhlIHZhbHVlIGlzIG91dHNp
ZGUgdGhlIHJhbmdlIG9mIHRoZSBkZXN0aW5hdGlvbiBpbnRlZ2VyIHR5cGUuCi0KLVdFQkNPUkVf
RVhQT1JUIGludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQx
NkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VY
UE9SVCB1aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgdG9V
SW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09S
RV9FWFBPUlQgaW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IHRvVUludDY0RW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotV0VCQ09SRV9FWFBPUlQgaW50OF90
IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQ
T1JUIHVpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
LVdFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2Q2xhbXAoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMy
Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWlu
dDMyX3QgdG9VSW50MzJDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJD
T1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjRDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NENsYW1wKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50OChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50OF90IHRvVUlu
dDgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MTZf
dCB0b0ludDE2KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JU
IHVpbnQxNl90IHRvVUludDE2KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNP
UkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci0KLUpTQzo6SlNWYWx1ZSBqc0RhdGUoSlNDOjpFeGVjU3RhdGUqLCBkb3VibGUg
dmFsdWUpOwotCi0vLyBOYU4gaWYgdGhlIHZhbHVlIGNhbid0IGJlIGNvbnZlcnRlZCB0byBhIGRh
dGUuCi1kb3VibGUgdmFsdWVUb0RhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOwot
Ci0vLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5cGUg
cGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KLUpTQzo6SlNPYmplY3QqIHRv
SlNTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgdW5zaWduZWQmIGxlbmd0
aCk7Ci0KLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCBKU0M6OkFycmF5QnVmZmVyJik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyYpOwotSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpTQzo6QXJy
YXlCdWZmZXIqKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0ds
b2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Kik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kiwg
UmVmPFQ+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZlB0cjxUPiYmKTsKLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxP
YmplY3QqLCBjb25zdCBWZWN0b3I8VD4mKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBWZWN0
b3I8UmVmUHRyPFQ+PiYpOwotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5hbWUmKTsKLQotSlNDOjpKU1ZhbHVl
IHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpK
U1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3Io
SlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIGNvbnN0IFQmKTsKLUpTQzo6SlNW
YWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUmKTsKLQotUmVmUHRyPEpTQzo6QXJy
YXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mLCBK
U0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50
OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50MTZBcnJheT4g
dG9Qb3NzaWJseVNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQ
dHI8SlNDOjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwg
SlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRV
aW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDhDbGFt
cGVkQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiwgSlND
OjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWlu
dDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MzJBcnJh
eT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwot
UmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b1Bvc3Np
Ymx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotCi1SZWZQdHI8
SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5zaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJy
YXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Vu
c2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6Oklu
dDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwot
UmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9VbnNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYsIEpT
Qzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNoYXJlZFVp
bnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWlu
dDE2QXJyYXk+IHRvVW5zaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsK
LVJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9h
dDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpGbG9hdDY0QXJy
YXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEpTVHlwZT4gVmVjdG9yPFJlZjxUPj4gdG9SZWZO
YXRpdmVBcnJheShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9S
VCBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
LQotZW51bSBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiB7IERvTm90UmVwb3J0U2VjdXJpdHlFcnJv
ciwgTG9nU2VjdXJpdHlFcnJvciwgVGhyb3dTZWN1cml0eUVycm9yIH07Ci1uYW1lc3BhY2UgQmlu
ZGluZ1NlY3VyaXR5IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBjaGVja1NlY3VyaXR5
Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIFQmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBU
KiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIFQqKTsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBFeGNlcHRpb25PcjxUKj4gY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpF
eGVjU3RhdGUmLCBFeGNlcHRpb25PcjxUKj4mJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
RXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgRXhj
ZXB0aW9uT3I8VCY+JiYpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhK
U0M6OkV4ZWNTdGF0ZSosIERPTVdpbmRvdyYsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uID0gTG9n
U2VjdXJpdHlFcnJvcik7Ci0gICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpT
Qzo6RXhlY1N0YXRlJiwgRE9NV2luZG93JiwgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICBib29sIHNo
b3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSosIEZyYW1lKiwgU2VjdXJpdHlS
ZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1cml0eUVycm9yKTsKLSAgICBib29sIHNob3VsZEFsbG93
QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSYsIEZyYW1lJiwgU3RyaW5nJiBtZXNzYWdlKTsK
LSAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKEpTQzo6RXhlY1N0YXRlJiwgTm9kZSop
OwotfTsKLQotdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKTsKLQotU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVy
dHlOYW1lKTsKLUF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlBy
b3BlcnR5TmFtZSk7Ci0KLXRlbXBsYXRlPEpTQzo6TmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+
IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotCi0K
LWVudW0gY2xhc3MgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3IgeyBUaHJvdywgUmV0dXJuRWFybHks
IFJlamVjdFByb21pc2UsIEFzc2VydCB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPgot
c3RydWN0IEJpbmRpbmdDYWxsZXIgewotICAgIHVzaW5nIEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9u
ID0gYm9vbChKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OkpTVmFsdWUsIEpTQzo6VGhy
b3dTY29wZSYpOwotICAgIHVzaW5nIEF0dHJpYnV0ZUdldHRlckZ1bmN0aW9uID0gSlNDOjpKU1Zh
bHVlKEpTQzo6RXhlY1N0YXRlJiwgSlNDbGFzcyYsIEpTQzo6VGhyb3dTY29wZSYpOwotICAgIHVz
aW5nIE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSosIEpTQ2xhc3MqLCBKU0M6OlRocm93U2NvcGUmKTsKLSAgICB1c2luZyBQcm9taXNl
T3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0
YXRlKiwgSlNDbGFzcyosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYp
OwotCi0gICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RGb3JBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLSAgICBzdGF0aWMgSlNDbGFzcyogY2FzdEZvck9wZXJh
dGlvbihKU0M6OkV4ZWNTdGF0ZSYpOwotCi0gICAgdGVtcGxhdGU8UHJvbWlzZU9wZXJhdGlvbkNh
bGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNhbGxlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hv
dWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmVqZWN0UHJvbWlzZT4KLSAgICBz
dGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxsUHJvbWlzZU9wZXJhdGlvbihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgY29uc3QgY2hhciog
b3BlcmF0aW9uTmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3RhdGUpOwotICAgICAgICBp
ZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCAmJiBVTkxJ
S0VMWSghdGhpc09iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhU
aGlzVHlwZUVycm9yKHByb21pc2UuZ2V0KCksIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBv
cGVyYXRpb25OYW1lKTsKLSAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QpOwotICAgICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIEpTQ2xhc3M6OmluZm8oKSk7Ci0gICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJhdGVkIGNv
ZGUgdG8gdXNlIHJlZmVyZW5jZXMgZm9yIHN0YXRlIGFuZCB0aGlzT2JqZWN0LgotICAgICAgICBy
ZXR1cm4gb3BlcmF0aW9uQ2FsbGVyKHN0YXRlLCB0aGlzT2JqZWN0LCBXVEZNb3ZlKHByb21pc2Up
LCB0aHJvd1Njb3BlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxPcGVyYXRpb25DYWxsZXJGdW5j
dGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93
ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgotICAgIHN0YXRpYyBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGNhbGxPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBjb25zdCBjaGFy
KiBvcGVyYXRpb25OYW1lKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAg
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yT3BlcmF0aW9uKCpzdGF0ZSk7Ci0gICAgICAg
IGlmIChzaG91bGRUaHJvdyAhPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0ICYmIFVO
TElLRUxZKCF0aGlzT2JqZWN0KSkgewotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENh
c3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhy
b3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFz
c05hbWUsIG9wZXJhdGlvbk5hbWUpOwotICAgICAgICAgICAgLy8gRm9yIGN1c3RvbSBwcm9taXNl
LXJldHVybmluZyBvcGVyYXRpb25zCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZVdp
dGhUaGlzVHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJh
dGlvbk5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKLSAgICAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZvKCkp
OwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVy
YXRlZCBjb2RlIHRvIHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KLSAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29w
ZSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8QXR0cmlidXRlU2V0dGVyRnVuY3Rpb24gc2V0dGVy
LCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJl
aGF2aW9yOjpUaHJvdz4KLSAgICBzdGF0aWMgYm9vbCBzZXRBdHRyaWJ1dGUoSlNDOjpFeGVjU3Rh
dGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi0gICAgewotICAg
ICAgICBBU1NFUlQoc3RhdGUpOwotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RG
b3JBdHRyaWJ1dGUoKnN0YXRlLCB0aGlzVmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXRo
aXNPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvcjo6VGhyb3cpID8gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSkgOiBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuIHNldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCBKU0M6OkpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0aHJvd1Njb3BlKTsKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTxBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiBnZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgotICAgIHN0
YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1l
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBjYXN0Rm9yQXR0cmlidXRlKCpzdGF0ZSwgdGhpc1ZhbHVlKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgewotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCkt
PmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSk7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cg
PT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2UpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFz
czo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOwotICAgICAgICAgICAgcmV0dXJu
IEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNVbmRlZmluZWQoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKGdldHRlcigqc3RhdGUsICp0aGlzT2Jq
ZWN0LCB0aHJvd1Njb3BlKSk7Ci0gICAgfQotfTsKLQogLy8gRXhjZXB0aW9uT3IgaGFuZGxpbmcu
CiB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29w
ZSYsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYpOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dT
Y29wZSYsIEV4Y2VwdGlvbk9yPFQ+JiYpOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYs
IEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpOwogCi0vLyBJbmxpbmUg
ZnVuY3Rpb25zIGFuZCB0ZW1wbGF0ZSBkZWZpbml0aW9ucy4KLQotaW5saW5lIEpTQzo6U3RydWN0
dXJlKiBET01Db25zdHJ1Y3Rvck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUp
Ci17Ci0gICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwotfQotCi1pbmxpbmUgRE9NQ29uc3RydWN0b3JPYmplY3Q6OkRPTUNvbnN0cnVj
dG9yT2JqZWN0KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCi0gICAgOiBKU0RPTU9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkK
LXsKLX0KLQotaW5saW5lIFN0cmluZyBET01Db25zdHJ1Y3Rvck9iamVjdDo6Y2xhc3NOYW1lKGNv
bnN0IEpTT2JqZWN0KikKLXsKLSAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJGdW5jdGlvbiIpOwot
fQotCi1pbmxpbmUgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OkRPTUNvbnN0cnVjdG9y
SlNCdWlsdGluT2JqZWN0KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2Jq
ZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUs
IGdsb2JhbE9iamVjdCkKLXsKLX0KLQotaW5saW5lIEpTQzo6SlNGdW5jdGlvbiogRE9NQ29uc3Ry
dWN0b3JKU0J1aWx0aW5PYmplY3Q6OmluaXRpYWxpemVGdW5jdGlvbigpCi17Ci0gICAgcmV0dXJu
IG1faW5pdGlhbGl6ZUZ1bmN0aW9uLmdldCgpOwotfQotCi1pbmxpbmUgdm9pZCBET01Db25zdHJ1
Y3RvckpTQnVpbHRpbk9iamVjdDo6c2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mIHZtLCBK
U0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQotewotICAgIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLnNl
dCh2bSwgdGhpcywgJmZ1bmN0aW9uKTsKLX0KLQotaW5saW5lIEpTRE9NR2xvYmFsT2JqZWN0KiBk
ZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQot
ewotICAgIC8vIEZJWE1FOiBDYWxsZXJzIHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzaW5n
IHRoZSBnbG9iYWwgb2JqZWN0Ci0gICAgLy8gZnJvbSB3aGljaCB0aGUgb2JqZWN0IGlzIGJlaW5n
IGNyZWF0ZWQsIGluc3RlYWQgb2YgYXNzdW1pbmcgdGhlIGxleGljYWwgb25lLgotICAgIC8vIGUu
Zy4gc3ViZnJhbWUuZG9jdW1lbnQuYm9keSBzaG91bGQgdXNlIHRoZSBzdWJmcmFtZSdzIGdsb2Jh
bCBvYmplY3QsIG5vdCB0aGUgbGV4aWNhbCBvbmUuCi0gICAgcmV0dXJuIEpTQzo6anNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGdldERP
TVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkK
LXsKLSAgICBpZiAoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldENhY2hlZERPTVN0cnVj
dHVyZShnbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFzczo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJu
IHN0cnVjdHVyZTsKLSAgICByZXR1cm4gY2FjaGVET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBX
cmFwcGVyQ2xhc3M6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgV3JhcHBlckNs
YXNzOjpjcmVhdGVQcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpKSwgV3JhcHBlckNsYXNzOjpp
bmZvKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6
OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBpcyB3cm9uZy4gSXQgdXNlcyB0aGUg
d3JvbmcgZ2xvYmFsIG9iamVjdCBmb3IgY3JlYXRpbmcgdGhlIHByb3RvdHlwZSBzdHJ1Y3R1cmUu
Ci0gICAgcmV0dXJuIGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMtPnZtKCksICpk
ZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90
eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0g
ICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTQzo6SlNPYmplY3QqPihhc09iamVjdChnZXRET01TdHJ1
Y3R1cmU8V3JhcHBlckNsYXNzPih2bSwgKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
Z2xvYmFsT2JqZWN0KSktPnN0b3JlZFByb3RvdHlwZSgpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9u
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIEpTQzo6SlNPYmplY3Qq
IG9iamVjdCA9IEpTQ2xhc3M6OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNDbGFzcz4oZ2xvYmFs
T2JqZWN0LnZtKCksIGdsb2JhbE9iamVjdCksICZnbG9iYWxPYmplY3QpOwotICAgIGNhbGxGdW5j
dGlvbldpdGhDdXJyZW50QXJndW1lbnRzKHN0YXRlLCAqb2JqZWN0LCBpbml0aWFsaXplRnVuY3Rp
b24pOwotICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShvYmplY3QpOwotfQotCi1pbmxp
bmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBKU0M6OkFycmF5QnVmZmVyKikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29y
ZVR5cGVkQXJyYXlDb250cm9sbGVyKj4od29ybGQudm0oKS5tX3R5cGVkQXJyYXlDb250cm9sbGVy
LmdldCgpKS0+d3JhcHBlck93bmVyKCk7Ci19Ci0KLWlubGluZSB2b2lkKiB3cmFwcGVyS2V5KEpT
Qzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCkKLXsKLSAgICByZXR1cm4gZG9tT2JqZWN0OwotfQot
Ci1pbmxpbmUgSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiwgdm9pZCopIHsgcmV0dXJuIG51bGxwdHI7IH0KLWlubGluZSBib29sIHNldElubGluZUNh
Y2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0KiwgSlNDOjpX
ZWFrSGFuZGxlT3duZXIqKSB7IHJldHVybiBmYWxzZTsgfQotaW5saW5lIGJvb2wgY2xlYXJJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCopIHsg
cmV0dXJuIGZhbHNlOyB9Ci0KLWlubGluZSBKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3Jh
cHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCkK
LXsKLSAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIHJldHVybiBkb21PYmplY3QtPndyYXBwZXIoKTsKLX0KLQotaW5saW5lIEpTQzo6SlNBcnJh
eUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBK
U0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyLT5tX3dyYXBwZXIuZ2V0
KCk7Ci19Ci0KLWlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFw
cGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKQotewotICAgIGlmICghd29y
bGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRvbU9iamVjdC0+c2V0
V3JhcHBlcih3cmFwcGVyLCB3cmFwcGVyT3duZXIsICZ3b3JsZCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIq
IHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpCi17Ci0gICAgaWYg
KCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0
LT5tX3dyYXBwZXIgPSBKU0M6OldlYWs8SlNDOjpKU0FycmF5QnVmZmVyPih3cmFwcGVyLCB3cmFw
cGVyT3duZXIsICZ3b3JsZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIGNs
ZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFw
cGFibGUqIGRvbU9iamVjdCwgSlNET01PYmplY3QqIHdyYXBwZXIpCi17Ci0gICAgaWYgKCF3b3Js
ZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0LT5jbGVh
cldyYXBwZXIod3JhcHBlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIGNs
ZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5
QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlcikKLXsKLSAgICBp
ZiAoIXdvcmxkLmlzTm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB3ZWFrQ2xl
YXIoZG9tT2JqZWN0LT5tX3dyYXBwZXIsIHdyYXBwZXIpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldENh
Y2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkK
LXsKLSAgICBpZiAoYXV0byogd3JhcHBlciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQs
ICZkb21PYmplY3QpKQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gd29ybGQu
bV93cmFwcGVycy5nZXQod3JhcHBlcktleSgmZG9tT2JqZWN0KSk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIGNhY2hl
V3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFw
cGVyQ2xhc3MqIHdyYXBwZXIpCi17Ci0gICAgSlNDOjpXZWFrSGFuZGxlT3duZXIqIG93bmVyID0g
d3JhcHBlck93bmVyKHdvcmxkLCBkb21PYmplY3QpOwotICAgIGlmIChzZXRJbmxpbmVDYWNoZWRX
cmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBwZXIsIG93bmVyKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIHdlYWtBZGQod29ybGQubV93cmFwcGVycywgd3JhcHBlcktleShkb21PYmplY3QpLCBK
U0M6OldlYWs8SlNDOjpKU09iamVjdD4od3JhcHBlciwgb3duZXIsICZ3b3JsZCkpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUg
dm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyogZG9t
T2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCi17Ci0gICAgaWYgKGNsZWFySW5saW5lQ2Fj
aGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIHdlYWtSZW1vdmUod29ybGQubV93cmFwcGVycywgd3JhcHBlcktleShkb21PYmplY3QpLCB3
cmFwcGVyKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlu
bGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3Nh
bWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGUKLXsKLSAgICB1c2luZyBXcmFwcGVy
Q2xhc3MgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpX
cmFwcGVyQ2xhc3M7Ci0KLSAgICBBU1NFUlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0
LT53b3JsZCgpLCBkb21PYmplY3QpKTsKLSAgICBhdXRvKiBkb21PYmplY3RQdHIgPSBkb21PYmpl
Y3QucHRyKCk7Ci0gICAgYXV0byogd3JhcHBlciA9IFdyYXBwZXJDbGFzczo6Y3JlYXRlKGdldERP
TVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGdsb2JhbE9iamVjdC0+dm0oKSwgKmdsb2JhbE9iamVj
dCksIGdsb2JhbE9iamVjdCwgV1RGTW92ZShkb21PYmplY3QpKTsKLSAgICBjYWNoZVdyYXBwZXIo
Z2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3RQdHIsIHdyYXBwZXIpOwotICAgIHJldHVy
biB3cmFwcGVyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4g
aW5saW5lIGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWY8VD4mJiBkb21PYmplY3QpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6Omlz
X3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVy
VHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGUKLXsKLSAgICByZXR1cm4gY3Jl
YXRlV3JhcHBlcjxET01DbGFzcz4oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8
RE9NQ2xhc3M+KFdURk1vdmUoZG9tT2JqZWN0KSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBE
T01DbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKLXsK
LSAgICBpZiAoYXV0byogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53
b3JsZCgpLCBkb21PYmplY3QpKQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4g
dG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBSZWY8RE9NQ2xhc3M+KGRvbU9i
amVjdCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDbGFzcyYg
Y2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCi17Ci0gICAgYXV0byB0aGlzVmFs
dWUgPSBzdGF0ZS50aGlzVmFsdWUoKTsKLSAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNE
b3duY2FzdDxKU0NsYXNzKj4oc3RhdGUudm0oKSwgdGhpc1ZhbHVlKTsKLSAgICBBU1NFUlQoY2Fz
dGVkVGhpcyk7Ci0gICAgcmV0dXJuICpjYXN0ZWRUaGlzOwotfQotCi1pbmxpbmUgaW50MzJfdCBm
aW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IGJvb2wmIG9rYXkpCi17Ci0gICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMp
OwotICAgIG9rYXkgPSBzdGQ6OmlzZmluaXRlKG51bWJlcik7Ci0gICAgcmV0dXJuIEpTQzo6dG9J
bnQzMihudW1iZXIpOwotfQotCi0vLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVjdCBp
cyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwgc3BlYy4K
LWlubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmIGV4ZWMs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQmIGxlbmd0aCkKLXsKLSAgICBKU0M6OlZNJiB2
bSA9IGV4ZWMudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsKLSAgICBp
ZiAoIW9iamVjdCkgewotICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3Bl
KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgSlNDOjpKU1ZhbHVlIGxl
bmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoJmV4ZWMsIGV4ZWMucHJvcGVydHlOYW1lcygpLmxlbmd0
aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0KLSAgICBpZiAo
bGVuZ3RoVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICB0aHJvd1NlcXVlbmNl
VHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgbGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9VSW50MzIoJmV4ZWMpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQot
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlciYgYnVmZmVyKQotewotICAg
IGlmIChhdXRvIHJlc3VsdCA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgp
LCBidWZmZXIpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8gVGhlIEpTQXJyYXlC
dWZmZXI6OmNyZWF0ZSBmdW5jdGlvbiB3aWxsIHJlZ2lzdGVyIHRoZSB3cmFwcGVyIGluIGZpbmlz
aENyZWF0aW9uLgotICAgIHJldHVybiBKU0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0ZS0+
dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZShidWZmZXIuc2hhcmluZ01v
ZGUoKSksICZidWZmZXIpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJy
YXlCdWZmZXJWaWV3JiB2aWV3KQotewotICAgIHJldHVybiB2aWV3LndyYXAoc3RhdGUsIGdsb2Jh
bE9iamVjdCk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXIq
IGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxs
KCk7Ci0gICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmJ1ZmZlcik7Ci19Ci0K
LWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17
Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICByZXR1
cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqdmlldyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgcHRyKQotewotICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4mJiBwdHIpCi17Ci0gICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBwdHIuZ2V0KCkpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxUPiYgdmVj
dG9yKQotewotICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEpTQzo6SlNBcnJheSogYXJy
YXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXplKCkpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBhcnJheS0+
cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3Rvcltp
XSkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7
Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPFQ+PiYgdmVjdG9yKQotewot
ICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25z
dHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXplKCkpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBhcnJheS0+cHV0RGlyZWN0
SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXS5nZXQoKSkp
OwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0g
ICAgfQotICAgIHJldHVybiBhcnJheTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0
ZU5hbWUmIHByaXZhdGVOYW1lKQotewotICAgIHJldHVybiBKU0M6OlN5bWJvbDo6Y3JlYXRlKGV4
ZWMtPnZtKCksIHByaXZhdGVOYW1lLnVpZCgpKTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmpl
Y3QoJnN0YXRlLCB2YWx1ZSwgZmFsc2UpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIHZhbHVlKQotewotICAgIHJldHVy
biBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIHRvSlMoJnN0YXRlLCAmZ2xvYmFs
T2JqZWN0LCB2YWx1ZSksIGZhbHNlKTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRl
cmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQotewotICAgIHJldHVybiBjcmVhdGVJdGVy
YXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIEpTQzo6anNVbmRlZmluZWQoKSwgdHJ1ZSk7Ci19Ci0K
LWlubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvUG9zc2libHlTaGFyZWRBcnJh
eUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRv
KiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNhc3Q8SlNDOjpKU0FycmF5QnVmZmVyVmlldyo+KHZt
LCB2YWx1ZSk7Ci0gICAgaWYgKCF3cmFwcGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gd3JhcHBlci0+cG9zc2libHlTaGFyZWRJbXBsKCk7Ci19Ci0KLWlubGluZSBSZWZQ
dHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5zaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpW
TSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvIHJlc3VsdCA9IHRvUG9zc2li
bHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcodm0sIHZhbHVlKTsKLSAgICBpZiAoIXJlc3VsdCB8fCBy
ZXN1bHQtPmlzU2hhcmVkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFy
ZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVk
SW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6
OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVk
SW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6
OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVk
VWludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6
OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9Qb3NzaWJs
eVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUp
IHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4
Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MTZB
cnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxK
U0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50
MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmll
dzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpG
bG9hdDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlw
ZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8
SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYg
dm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0
aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLQotaW5saW5l
IFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9VbnNoYXJlZEludDhBcnJheShKU0M6OlZNJiB2bSwg
SlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZp
ZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6Oklu
dDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2
QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRv
VW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDMyQWRhcHRvcj4odm0s
IHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50
OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9V
bnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQot
aW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFt
cGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0
b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcj4odm0sIHZh
bHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2
QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vu
c2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQot
aW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hhcmVkVWludDMyQXJyYXkoSlND
OjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0
aXZlVHlwZWRWaWV3PEpTQzo6VWludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJl
ZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2
bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBl
ZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxK
U0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBKU1Q+IGlubGluZSBWZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIEpTQzo6Vk0m
IHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0KLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5j
ZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQot
ICAgIFZlY3RvcjxSZWY8VD4+IHJlc3VsdDsKLSAgICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUs
IHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlND
OjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgICAgIGlmIChqc1ZhbHVlLmluaGVyaXRzKHZtLCBKU1Q6OmluZm8o
KSkpIHsKLSAgICAgICAgICAgIGF1dG8qIG9iamVjdCA9IEpTVDo6dG9XcmFwcGVkKHZtLCBqc1Zh
bHVlKTsKLSAgICAgICAgICAgIEFTU0VSVChvYmplY3QpOwotICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgqb2JqZWN0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aHJvd0FycmF5RWxl
bWVudFR5cGVFcnJvcigqc3RhdGUsIHNjb3BlKTsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1pbmxpbmUgU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICBBU1NFUlQoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgp
KTsKLSAgICByZXR1cm4gcHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVpZCgpIDog
cHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKLX0KLQotaW5saW5lIEF0b21pY1N0cmluZyBwcm9w
ZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17
Ci0gICAgcmV0dXJuIEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5h
bWUudWlkKCkgOiBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLX0KLQotdGVtcGxhdGU8SlND
OjpOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVk
SlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
LXsKLSAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpKU0Z1bmN0aW9uOjpjcmVh
dGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBsZW5ndGgsIHByb3Bl
cnR5TmFtZS5wdWJsaWNOYW1lKCksIG5hdGl2ZUZ1bmN0aW9uKSk7Ci19CiAKIEFMV0FZU19JTkxJ
TkUgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKIHsKQEAgLTc5OCwy
OCArMTI3LDQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZQogICAg
IHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVs
ZWFzZVJldHVyblZhbHVlKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCog
QmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIFQmIG5vZGUpCi17Ci0gICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRl
LCAmbm9kZSkgPyAmbm9kZSA6IG51bGxwdHI7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSBUKiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgVCogbm9kZSkKLXsKLSAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05v
ZGUoc3RhdGUsIG5vZGUpID8gbm9kZSA6IG51bGxwdHI7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5
Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQqPiYmIHZhbHVlKQot
ewotICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLnJl
bGVhc2VFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUs
IHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIEV4Y2VwdGlvbk9yPFQqPiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JO
b2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uT3I8VCY+JiYgdmFsdWUpCi17Ci0g
ICAgaWYgKHZhbHVlLmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gdmFsdWUucmVsZWFz
ZUV4Y2VwdGlvbigpOwotICAgIHJldHVybiBjaGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgdmFs
dWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJ
KHJldmlzaW9uIDIxMTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJE
T01XaW5kb3cuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmdTZWN1cml0eS5oIgogI2luY2x1ZGUgIkpT
RE9NR2xvYmFsT2JqZWN0VGFzay5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAj
aW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCkBAIC0yODYsNiArMjg3LDU0IEBAIEpT
RE9NV2luZG93KiB0b0pTRE9NV2luZG93KEpTQzo6Vk0mIHZtLCAKICAgICByZXR1cm4gMDsKIH0K
IAorRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coRXhlY1N0YXRlKiBleGVjKQoreworICAgIGNs
YXNzIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAg
R2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvcigpID0gZGVmYXVsdDsKKworICAgICAgICBTdGFj
a1Zpc2l0b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2hhc1NraXBwZWRGaXJzdEZyYW1lKSB7Cisg
ICAgICAgICAgICAgICAgbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChhdXRvKiBjb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKSkKKyAg
ICAgICAgICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmlzaXRvci0+Y2Fs
bGVlKCkpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDYWxsZWUgaXMgbm90IGFuIG9iamVj
dCBpZiB0aGUgY2FsbGVyIGlzIFdlYiBBc3NlbWJseS4KKyAgICAgICAgICAgICAgICAvLyBGaWd1
cmUgb3V0IHdoYXQgdG8gZG8gaGVyZS4gV2UgY2FuIHByb2JhYmx5IGdldCB0aGUgZ2xvYmFsIG9i
amVjdAorICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIHRvcC1tb3N0IFdhc20gSW5zdGFuY2Uu
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MjEKKyAgICAgICAg
ICAgICAgICBpZiAodmlzaXRvci0+Y2FsbGVlKCktPmlzT2JqZWN0KCkpCisgICAgICAgICAgICAg
ICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVl
KCkpLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBT
dGFja1Zpc2l0b3I6OkRvbmU7CisgICAgICAgIH0KKworICAgICAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3Q7IH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIG11dGFibGUgYm9vbCBtX2hhc1NraXBwZWRGaXJzdEZyYW1lIHsgZmFs
c2UgfTsKKyAgICAgICAgbXV0YWJsZSBKU0dsb2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3QgeyBu
dWxscHRyIH07CisgICAgfTsKKworICAgIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgaXRl
cjsKKyAgICBleGVjLT5pdGVyYXRlKGl0ZXIpOworICAgIHJldHVybiBpdGVyLmdsb2JhbE9iamVj
dCgpID8gYXNKU0RPTVdpbmRvdyhpdGVyLmdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpIDogZmly
c3RET01XaW5kb3coZXhlYyk7Cit9CisKK0RPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT53cmFwcGVkKCk7Cit9CisKK0RPTVdpbmRvdyYgZmlyc3RET01XaW5kb3co
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPnZtRW50
cnlHbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKTsKK30KKwogdm9pZCBKU0RPTVdpbmRvd0Jhc2U6
OmZpcmVGcmFtZUNsZWFyZWRXYXRjaHBvaW50c0ZvcldpbmRvdyhET01XaW5kb3cqIHdpbmRvdykK
IHsKICAgICBKU0M6OlZNJiB2bSA9IGNvbW1vblZNKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAkocmV2aXNpb24gMjExMzkyKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTk3LDQgKzk3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIEpTRE9NV2luZG93KiB0
b0pTRE9NV2luZG93KEZyYW1lKiwgRE9NV3JhcHBlcldvcmxkJik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgSlNET01XaW5kb3cqIHRvSlNET01XaW5kb3coSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAK
KyAgICBET01XaW5kb3cmIGNhbGxlckRPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworICAgIERP
TVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CisgICAgRE9NV2luZG93
JiBmaXJzdERPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwCShyZXZpc2lvbiAyMTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCiAjaW5jbHVk
ZSAiSFRNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIKICNp
bmNsdWRlICJKU0V2ZW50LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVk
ZSAiSlNIVE1MQXVkaW9FbGVtZW50LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd1Byb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5jcHAJKHJldmlzaW9uIDIxMTM5MikK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1
ZGUgIkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgi
CiAjaW5jbHVkZSAiSlNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNIVE1MQ29sbGVjdGlvbi5oIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hl
LmNwcAkocmV2aXNpb24gMjExMzUzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuY3BwOjIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV3JhcHBlckNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMzQgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9y
ZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcg
PHNhbUB3ZWJraXQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0dCA8
bWljaGFlbEA2OGsub3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorCisjaW5jbHVkZSAiQ2Fj
aGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKKyNpbmNsdWRlICJET01Db25zdHJ1
Y3RvcldpdGhEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWFkZXJz
LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uSW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhj
ZXB0aW9uLmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01Qcm9t
aXNlLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKKyNpbmNsdWRlICJKU0V4Y2Vw
dGlvbkJhc2UuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgPGJ5dGVj
b2RlL0NvZGVCbG9jay5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaD4K
KyNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+CisjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvRXJyb3JIYW5kbGluZ1Njb3BlLmg+CisjaW5jbHVkZSA8cnVudGltZS9F
cnJvckluc3RhbmNlLmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KKyNpbmNsdWRl
IDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rp
b24uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgor
I2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVEFUSUNfQVNTRVJUX0lT
X1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9NQ29uc3RydWN0b3JPYmplY3QpOworU1RBVElDX0FT
U0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50
KTsKKwordm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5
TmFtZSkKK3sKKyAgICBjb21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7
Cit9CisKK0pTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFN0cmluZyYgcykKK3sKKyAgICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOworICAgIHJldHVybiBqc093bmVkU3RyaW5nKGV4ZWMsIHMpOworfQorCitKU1ZhbHVlIGpz
U3RyaW5nT3JVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCit7Cisg
ICAgaWYgKHMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJl
dHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBzKTsKK30KKworSlNWYWx1ZSBqc1N0cmluZyhF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVSTCYgdXJsKQoreworICAgIHJldHVybiBqc1N0cmluZ1dp
dGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkpOworfQorCitKU1ZhbHVlIGpzU3RyaW5nT3JVbmRl
ZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICBpZiAodXJsLmlz
TnVsbCgpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4ganNTdHJp
bmdXaXRoQ2FjaGUoZXhlYywgdXJsLnN0cmluZygpKTsKK30KKworc3RhdGljIGlubGluZSBTdHJp
bmcgc3RyaW5nVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIFN0cmluZyYmIHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmluZy5jb250YWluc09ubHlM
YXRpbjEoKSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nOworfQorCitTdHJpbmcg
aWRlbnRpZmllclRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBJZGVudGlmaWVy
JiBpZGVudGlmaWVyKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIHN0cmluZyA9IGlkZW50
aWZpZXIuc3RyaW5nKCk7CisgICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2Nv
cGUsIFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK1N0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5n
IHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKworICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3RhdGUs
IHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaGFzVW5w
YWlyZWRTdXJyb2dhdGUoU3RyaW5nVmlldyBzdHJpbmcpCit7CisgICAgLy8gRmFzdCBwYXRoIGZv
ciA4LWJpdCBzdHJpbmdzOyB0aGV5IGNhbid0IGhhdmUgYW55IHN1cnJvZ2F0ZXMuCisgICAgaWYg
KHN0cmluZy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoYXV0byBj
b2RlUG9pbnQgOiBzdHJpbmcuY29kZVBvaW50cygpKSB7CisgICAgICAgIGlmIChVX0lTX1NVUlJP
R0FURShjb2RlUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9VU1ZTdHJpbmco
U3RyaW5nJiYgc3RyaW5nKQoreworICAgIC8vIEZhc3QgcGF0aCBmb3IgdGhlIGNhc2Ugd2hlcmUg
dGhlcmUgYXJlIG5vIHVucGFpcmVkIHN1cnJvZ2F0ZXMuCisgICAgaWYgKCFoYXNVbnBhaXJlZFN1
cnJvZ2F0ZShzdHJpbmcpKQorICAgICAgICByZXR1cm4gc3RyaW5nOworCisgICAgLy8gU2xvdyBw
YXRoOiBodHRwOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1vYnRhaW4tdW5pY29kZQor
ICAgIC8vIFJlcGxhY2VzIHVucGFpcmVkIHN1cnJvZ2F0ZXMgd2l0aCB0aGUgcmVwbGFjZW1lbnQg
Y2hhcmFjdGVyLgorICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZl
Q2FwYWNpdHkoc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBTdHJpbmdWaWV3IHZpZXcgeyBzdHJpbmcg
fTsKKyAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogdmlldy5jb2RlUG9pbnRzKCkpIHsKKyAgICAg
ICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChjb2RlUG9pbnQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5n
KCk7Cit9CisKK1N0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiwgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRpZmll
ci5zdHJpbmcoKTsKKyAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcp
KTsKK30KKworU3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dU
RlN0cmluZygmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisK
KyAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKK30KKworSlNW
YWx1ZSBqc0RhdGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUpCit7CisgICAgcmV0dXJu
IERhdGVJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7Cit9CisKK2RvdWJsZSB2YWx1ZVRvRGF0ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzTnVtYmVy
KCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc051bWJlcigpOworICAgIGlmICghdmFsdWUuaW5o
ZXJpdHMoZXhlYy0+dm0oKSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpKQorICAgICAgICByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RGF0ZUluc3RhbmNlKj4odmFsdWUudG9PYmplY3QoZXhlYykpLT5pbnRlcm5hbE51
bWJlcigpOworfQorCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgZXhjZXB0aW9uVmFsdWUsIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQoreworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVhZElz
SG9sZGluZ0FQSUxvY2soKSk7CisgICAgYXV0byogZXhjZXB0aW9uID0ganNEeW5hbWljRG93bmNh
c3Q8SlNDOjpFeGNlcHRpb24qPih2bSwgZXhjZXB0aW9uVmFsdWUpOworICAgIGlmICghZXhjZXB0
aW9uKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IHZtLmxhc3RFeGNlcHRpb24oKTsKKyAgICAgICAg
aWYgKCFleGNlcHRpb24pCisgICAgICAgICAgICBleGNlcHRpb24gPSBKU0M6OkV4Y2VwdGlvbjo6
Y3JlYXRlKGV4ZWMtPnZtKCksIGV4Y2VwdGlvblZhbHVlLCBKU0M6OkV4Y2VwdGlvbjo6RG9Ob3RD
YXB0dXJlU3RhY2spOworICAgIH0KKworICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRp
b24sIGNhY2hlZFNjcmlwdCk7Cit9CisKK1N0cmluZyByZXRyaWV2ZUVycm9yTWVzc2FnZShFeGVj
U3RhdGUmIHN0YXRlLCBWTSYgdm0sIEpTVmFsdWUgZXhjZXB0aW9uLCBDYXRjaFNjb3BlJiBjYXRj
aFNjb3BlKQoreworICAgIGlmIChhdXRvKiBleGNlcHRpb25CYXNlID0gdG9FeGNlcHRpb25CYXNl
KHZtLCBleGNlcHRpb24pKQorICAgICAgICByZXR1cm4gZXhjZXB0aW9uQmFzZS0+dG9TdHJpbmco
KTsKKworICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNw
ZWN0b3I6IFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbiBzaG91bGQgbm90IGV2YWx1YXRlIEphdmFT
Y3JpcHQgaGFuZGxpbmcgZXhjZXB0aW9ucworICAgIC8vIElmIHRoaXMgaXMgYSBjdXN0b20gZXhj
ZXB0aW9uIG9iamVjdCwgY2FsbCB0b1N0cmluZyBvbiBpdCB0byB0cnkgYW5kIGdldCBhIG5pY2Ug
c3RyaW5nIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZXhjZXB0aW9uLgorICAgIFN0cmluZyBlcnJv
ck1lc3NhZ2U7CisgICAgaWYgKGF1dG8qIGVycm9yID0ganNEeW5hbWljRG93bmNhc3Q8RXJyb3JJ
bnN0YW5jZSo+KHZtLCBleGNlcHRpb24pKQorICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci0+
c2FuaXRpemVkVG9TdHJpbmcoJnN0YXRlKTsKKyAgICBlbHNlCisgICAgICAgIGVycm9yTWVzc2Fn
ZSA9IGV4Y2VwdGlvbi50b1dURlN0cmluZygmc3RhdGUpOworCisgICAgLy8gV2UgbmVlZCB0byBj
bGVhciBhbnkgbmV3IGV4Y2VwdGlvbiB0aGF0IG1heSBiZSB0aHJvd24gaW4gdGhlIHRvU3RyaW5n
KCkgY2FsbCBhYm92ZS4KKyAgICAvLyByZXBvcnRFeGNlcHRpb24oKSBpcyBub3Qgc3VwcG9zZWQg
dG8gYmUgbWFraW5nIG5ldyBleGNlcHRpb25zLgorICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRp
b24oKTsKKyAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gZXJyb3JNZXNz
YWdlOworfQorCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhj
ZXB0aW9uKiBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0LCBFeGNlcHRpb25E
ZXRhaWxzKiBleGNlcHRpb25EZXRhaWxzKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgUkVMRUFTRV9B
U1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgaWYgKGlzVGVy
bWluYXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbih2bSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoZXhlYy0+dm0oKSk7CisKKyAg
ICBSZWZQdHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNr
RnJvbUV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4Q2FsbFN0
YWNrU2l6ZVRvQ2FwdHVyZSkpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgdm0u
Y2xlYXJMYXN0RXhjZXB0aW9uKCk7CisKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpKTsKKyAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IGpzRHluYW1pY0Rvd25jYXN0PEpT
RE9NV2luZG93Kj4odm0sIGdsb2JhbE9iamVjdCkpIHsKKyAgICAgICAgaWYgKCF3aW5kb3ctPndy
YXBwZWQoKS5pc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpbnQgbGluZU51bWJlciA9IDA7CisgICAgaW50IGNvbHVtbk51bWJl
ciA9IDA7CisgICAgU3RyaW5nIGV4Y2VwdGlvblNvdXJjZVVSTDsKKyAgICBpZiAoY29uc3QgU2Ny
aXB0Q2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsU3RhY2stPmZpcnN0Tm9uTmF0aXZlQ2FsbEZy
YW1lKCkpIHsKKyAgICAgICAgbGluZU51bWJlciA9IGNhbGxGcmFtZS0+bGluZU51bWJlcigpOwor
ICAgICAgICBjb2x1bW5OdW1iZXIgPSBjYWxsRnJhbWUtPmNvbHVtbk51bWJlcigpOworICAgICAg
ICBleGNlcHRpb25Tb3VyY2VVUkwgPSBjYWxsRnJhbWUtPnNvdXJjZVVSTCgpOworICAgIH0KKwor
ICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSByZXRyaWV2ZUVycm9yTWVzc2FnZSgqZXhlYywgdm0s
IGV4Y2VwdGlvbi0+dmFsdWUoKSwgc2NvcGUpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5yZXBvcnRFeGNlcHRpb24oZXJy
b3JNZXNzYWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGV4Y2VwdGlvblNvdXJjZVVSTCwg
ZXhjZXB0aW9uLCBjYWxsU3RhY2stPnNpemUoKSA/IGNhbGxTdGFjayA6IG51bGxwdHIsIGNhY2hl
ZFNjcmlwdCk7CisKKyAgICBpZiAoZXhjZXB0aW9uRGV0YWlscykgeworICAgICAgICBleGNlcHRp
b25EZXRhaWxzLT5tZXNzYWdlID0gZXJyb3JNZXNzYWdlOworICAgICAgICBleGNlcHRpb25EZXRh
aWxzLT5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+
Y29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyOworICAgICAgICBleGNlcHRpb25EZXRhaWxzLT5z
b3VyY2VVUkwgPSBleGNlcHRpb25Tb3VyY2VVUkw7CisgICAgfQorfQorCit2b2lkIHJlcG9ydEN1
cnJlbnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8q
IGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7Cit9CisKK3N0YXRpYyBK
U1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUg
ZWMsIGNvbnN0IFN0cmluZyogbWVzc2FnZSA9IG51bGxwdHIpCit7CisgICAgaWYgKCFlYyB8fCBl
YyA9PSBFeGlzdGluZ0V4Y2VwdGlvbkVycm9yKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKworICAgIC8vIEZJWE1FOiBIYW5kbGUgb3RoZXIgV2ViSURMIGV4Y2VwdGlvbiB0eXBlcy4K
KyAgICBpZiAoZWMgPT0gVHlwZUVycm9yKSB7CisgICAgICAgIGlmICghbWVzc2FnZSB8fCBtZXNz
YWdlLT5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMp
OworICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMsICptZXNzYWdlKTsKKyAgICB9
CisKKyAgICBpZiAoZWMgPT0gUmFuZ2VFcnJvcikgeworICAgICAgICBpZiAoIW1lc3NhZ2UgfHwg
bWVzc2FnZS0+aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJCYWQgdmFsdWUiKSk7CisgICAgICAgIHJldHVybiBjcmVhdGVS
YW5nZUVycm9yKGV4ZWMsICptZXNzYWdlKTsKKyAgICB9CisKKyAgICBpZiAoZWMgPT0gU3RhY2tP
dmVyZmxvd0Vycm9yKQorICAgICAgICByZXR1cm4gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4
ZWMpOworCisgICAgLy8gRklYTUU6IEFsbCBjYWxsZXJzIHRvIGNyZWF0ZURPTUV4Y2VwdGlvbiBu
ZWVkIHRvIHBhc3MgaW4gdGhlIGNvcnJlY3QgZ2xvYmFsIG9iamVjdC4KKyAgICAvLyBGb3Igbm93
LCB3ZSdyZSBnb2luZyB0byBhc3N1bWUgdGhlIGxleGljYWxHbG9iYWxPYmplY3QuIFdoaWNoIGlz
IHdyb25nIGluIGNhc2VzIGxpa2UgdGhpczoKKyAgICAvLyBmcmFtZXNbMF0uZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudChudWxsLCBudWxsKTsgLy8gdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGljaCBzaG91
bGQgaGF2ZSB0aGUgc3ViZnJhbWUncyBwcm90b3R5cGVzLgorICAgIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMp
OworCisgICAgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKworICAg
IENTdHJpbmcgbWVzc2FnZUNTdHJpbmc7CisgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgIG1lc3Nh
Z2VDU3RyaW5nID0gbWVzc2FnZS0+dXRmOCgpOworICAgIGlmIChtZXNzYWdlICYmICFtZXNzYWdl
LT5pc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gSXQgaXMgc2FmZSB0byBkbyB0aGlzIGJlY2F1c2Ug
dGhlIGNoYXIqIGNvbnRlbnRzIG9mIHRoZSBDU3RyaW5nIGFyZSBjb3BpZWQgaW50byBhIG5ldyBX
VEY6OlN0cmluZyBiZWZvcmUgdGhlIENTdHJpbmcgaXMgZGVzdHJveWVkLgorICAgICAgICBkZXNj
cmlwdGlvbi5kZXNjcmlwdGlvbiA9IG1lc3NhZ2VDU3RyaW5nLmRhdGEoKTsKKyAgICB9CisKKyAg
ICBKU1ZhbHVlIGVycm9yT2JqZWN0OworICAgIHN3aXRjaCAoZGVzY3JpcHRpb24udHlwZSkgewor
ICAgIGNhc2UgRE9NQ29yZUV4Y2VwdGlvblR5cGU6CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCisgICAgY2FzZSBJREJEYXRhYmFzZUV4Y2VwdGlvblR5cGU6CisjZW5kaWYKKyAgICAgICAg
ZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgRE9NQ29yZUV4Y2VwdGlvbjo6
Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZUV4Y2Vw
dGlvblR5cGU6CisgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IEZpbGVFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFNRTEV4Y2VwdGlvblR5cGU6CisgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIFNRTEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgU1ZHRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJyb3JPYmpl
Y3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3Jp
cHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYUGF0aEV4Y2VwdGlvblR5cGU6Cisg
ICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFhQYXRoRXhjZXB0
aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAor
ICAgIEFTU0VSVChlcnJvck9iamVjdCk7CisgICAgYWRkRXJyb3JJbmZvKGV4ZWMsIGFzT2JqZWN0
KGVycm9yT2JqZWN0KSwgdHJ1ZSk7CisgICAgcmV0dXJuIGVycm9yT2JqZWN0OworfQorCitKU1Zh
bHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUgZWMs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlRE9NRXhjZXB0aW9u
KGV4ZWMsIGVjLCAmbWVzc2FnZSk7Cit9CisKK0pTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4
ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gY3Jl
YXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgZXhjZXB0aW9uLmNvZGUoKSwgZXhjZXB0aW9uLnJlbGVh
c2VNZXNzYWdlKCkpOworfQorCit2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb24m
JiBleGNlcHRpb24pCit7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAg
ICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbihz
dGF0ZSwgV1RGTW92ZShleGNlcHRpb24pKSk7Cit9CisKK2Jvb2wgaGFzSXRlcmF0b3JNZXRob2Qo
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYg
dm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgSlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgIENhbGxE
YXRhIGNhbGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlOworICAgIEpTVmFsdWUgYXBwbHlN
ZXRob2QgPSBvYmplY3QtPmdldE1ldGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0u
cHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0ZXJh
dG9yIHByb3BlcnR5IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBmYWxzZSk7CisKKyAgICByZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5kZWZpbmVk
KCk7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUo
RXhlY1N0YXRlJiBzdGF0ZSwgRnJhbWUmIGZyYW1lLCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAg
aWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKCZzdGF0ZSwgJmZy
YW1lLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBtZXNzYWdlID0gZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNj
ZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2lu
ZG93KEV4ZWNTdGF0ZSYgc3RhdGUsIERPTVdpbmRvdyYgZ2xvYmFsT2JqZWN0LCBTdHJpbmcmIG1l
c3NhZ2UpCit7CisgICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RP
TVdpbmRvdygmc3RhdGUsIGdsb2JhbE9iamVjdCwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgbWVzc2FnZSA9IGdsb2JhbE9iamVjdC5jcm9zc0Rv
bWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqIGZy
YW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAg
cmV0dXJuOworICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+cHJpbnRFcnJvck1l
c3NhZ2UobWVzc2FnZSk7Cit9CisKK1N0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
KQoreworICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LnN0
cnVjdHVyZXMoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5nZXQo
Y2xhc3NJbmZvKS5nZXQoKTsKK30KKworU3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8pCit7CisgICAgYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFy
a2luZyhnbG9iYWxPYmplY3Qudm0oKS5oZWFwLCBnbG9iYWxPYmplY3QuZ2NMb2NrKCkpOworICAg
IEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LnN0cnVjdHVyZXMo
bG9ja2VyKTsKKyAgICBBU1NFUlQoIXN0cnVjdHVyZXMuY29udGFpbnMoY2xhc3NJbmZvKSk7Cisg
ICAgcmV0dXJuIHN0cnVjdHVyZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4oZ2xvYmFsT2JqZWN0LnZtKCksICZnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJhdG9y
LT52YWx1ZS5nZXQoKTsKK30KKworc3RhdGljIGNvbnN0IGludDMyX3Qga01heEludDMyID0gMHg3
ZmZmZmZmZjsKK3N0YXRpYyBjb25zdCBpbnQzMl90IGtNaW5JbnQzMiA9IC1rTWF4SW50MzIgLSAx
Oworc3RhdGljIGNvbnN0IHVpbnQzMl90IGtNYXhVSW50MzIgPSAweGZmZmZmZmZmVTsKK3N0YXRp
YyBjb25zdCBpbnQ2NF90IGtKU01heEludGVnZXIgPSAweDIwMDAwMDAwMDAwMDAwTEwgLSAxOyAv
LyAyXjUzIC0gMSwgbGFyZ2VzdCBpbnRlZ2VyIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBpbiBFQ01B
U2NyaXB0LgorCitzdGF0aWMgU3RyaW5nIHJhbmdlRXJyb3JTdHJpbmcoZG91YmxlIHZhbHVlLCBk
b3VibGUgbWluLCBkb3VibGUgbWF4KQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJWYWx1ZSAi
LCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdCh2YWx1ZSksICIgaXMgb3V0c2lkZSB0
aGUgcmFuZ2UgWyIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1pbiksICIsICIs
IFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1heCksICJdIik7Cit9CisKK3N0YXRp
YyBkb3VibGUgZW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB4LCBkb3VibGUg
bWluaW11bSwgZG91YmxlIG1heGltdW0pCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoc3RkOjpp
c25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisgICAgeCA9IHRydW5jKHgpOworICAgIGlmICh4IDwgbWluaW11
bSB8fCB4ID4gbWF4aW11bSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
LCByYW5nZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIHJldHVybiB4OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0
cnVjdCBJbnRUeXBlTGltaXRzIHsKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxp
bWl0czxpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgaW50OF90IG1pblZhbHVlID0gLTEyODsK
KyAgICBzdGF0aWMgY29uc3QgaW50OF90IG1heFZhbHVlID0gMTI3OworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDI1NjsgLy8gMl44Cit9OworCit0ZW1wbGF0ZSA8
Pgorc3RydWN0IEludFR5cGVMaW1pdHM8dWludDhfdD4geworICAgIHN0YXRpYyBjb25zdCB1aW50
OF90IG1heFZhbHVlID0gMjU1OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZh
bHVlcyA9IDI1NjsgLy8gMl44Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVMaW1p
dHM8aW50MTZfdD4geworICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtaW5WYWx1ZSA9IC0zMjc2ODsK
KyAgICBzdGF0aWMgY29uc3Qgc2hvcnQgbWF4VmFsdWUgPSAzMjc2NzsKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgorfTsKKwordGVtcGxh
dGUgPD4KK3N0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQxNl90PiB7CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHNob3J0IG1heFZhbHVlID0gNjU1MzU7CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG51bWJlck9mVmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKK307CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorc3RhdGljIGlubGluZSBUIHRvU21hbGxlckludChFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlv
bikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zaWduZWQ8VD46
OnZhbHVlICYmIHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNl
ZCBmb3Igc2lnbmVkIGludGVncmFsIHR5cGVzIik7CisKKyAgICB0eXBlZGVmIEludFR5cGVMaW1p
dHM8VD4gTGltaXRzVHJhaXQ7CisgICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJl
YWR5IGEgMzItYml0IHNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KKyAgICBpZiAo
dmFsdWUuaXNJbnQzMigpKSB7CisgICAgICAgIGludDMyX3QgZCA9IHZhbHVlLmFzSW50MzIoKTsK
KyAgICAgICAgaWYgKGQgPj0gTGltaXRzVHJhaXQ6Om1pblZhbHVlICYmIGQgPD0gTGltaXRzVHJh
aXQ6Om1heFZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOworICAg
ICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgor
ICAgICAgICAgICAgcmV0dXJuIGQgPCBMaW1pdHNUcmFpdDo6bWluVmFsdWUgPyBMaW1pdHNUcmFp
dDo6bWluVmFsdWUgOiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7CisgICAgICAgIH0KKyAgICAgICAg
ZCAlPSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXM7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUPihkID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8gZCAtIExpbWl0c1RyYWl0OjpudW1i
ZXJPZlZhbHVlcyA6IGQpOworICAgIH0KKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKworICAgIHN3aXRj
aCAoY29uZmlndXJhdGlvbikgeworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uo
c3RhdGUsIHgsIExpbWl0c1RyYWl0OjptaW5WYWx1ZSwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsK
KyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAg
IHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7CisgICAgfQorCisgICAg
aWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICB4ID0geCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsK
KyAgICB4ID0gZm1vZCh4LCBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMpOworCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFQ+KHggPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyB4IC0gTGltaXRz
VHJhaXQ6Om51bWJlck9mVmFsdWVzIDogeCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
c3RhdGljIGlubGluZSBUIHRvU21hbGxlclVJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7Cisg
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZhbHVl
ICYmIHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Ig
dW5zaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKKworICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxU
PiBMaW1pdHNUcmFpdDsKKyAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkg
YSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCisgICAgaWYgKHZh
bHVlLmlzVUludDMyKCkpIHsKKyAgICAgICAgdWludDMyX3QgZCA9IHZhbHVlLmFzVUludDMyKCk7
CisgICAgICAgIGlmIChkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUPihkKTsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7
CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAg
ICByZXR1cm4gTGltaXRzVHJhaXQ6Om1heFZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAg
ZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIDApOworCisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAg
ICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwgTGltaXRzVHJhaXQ6Om1heFZh
bHVlKTsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Cisg
ICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7CisgICAgfQor
CisgICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICB4ID0geCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJz
KHgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZm1vZCh4LCBMaW1pdHNUcmFpdDo6bnVt
YmVyT2ZWYWx1ZXMpKTsKK30KKworaW50OF90IHRvSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxp
bnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZv
cmNlUmFuZ2UpOworfQorCit1aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVp
bnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZv
cmNlUmFuZ2UpOworfQorCitpbnQ4X3QgdG9JbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0
ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQorCit1
aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKworLy8gaHR0cDovL3d3dy53
My5vcmcvVFIvV2ViSURMLyNlcy1ieXRlCitpbnQ4X3QgdG9JbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRl
LCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQorCisv
LyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLW9jdGV0Cit1aW50OF90IHRvVUludDgo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVy
VUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKTsKK30KKworaW50MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90
PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlKTsKK30KKwordWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4o
c3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZSk7Cit9CisKK2ludDE2X3QgdG9JbnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUg
dmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQorCit1aW50MTZfdCB0
b1VJbnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0
dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dl
YklETC8jZXMtc2hvcnQKK2ludDE2X3QgdG9JbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVl
LCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6
Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtc2hvcnQKK3VpbnQxNl90IHRvVUlu
dDE2KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21h
bGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpOb3JtYWwpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2Vz
LWxvbmcKK2ludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAg
ICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICBy
ZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBrTWluSW50MzIsIGtNYXhJbnQzMik7Cit9CisK
K2ludDMyX3QgdG9JbnQzMkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIo
KTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4g
c3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPGludDMyX3Q+KHgpOworfQorCit1aW50MzJfdCB0
b1VJbnQzMkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOworCisg
ICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6Omlz
bmFuKHgpID8gMCA6IGNsYW1wVG88dWludDMyX3Q+KHgpOworfQorCisvLyBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmcKK3VpbnQzMl90IHRvVUludDMyRW5mb3Jj
ZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMy
KCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwg
eCwgMCwga01heFVJbnQzMik7Cit9CisKK2ludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBk
b3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgLWtKU01heElu
dGVnZXIsIGtKU01heEludGVnZXIpOworfQorCit1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5n
ZShFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0g
c3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwg
a0pTTWF4SW50ZWdlcik7Cit9CisKK2ludDY0X3QgdG9JbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8aW50
NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+KHgsIC1rSlNNYXhJbnRlZ2Vy
KSwga0pTTWF4SW50ZWdlcikpOworfQorCit1aW50NjRfdCB0b1VJbnQ2NENsYW1wKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAwKSwga0pT
TWF4SW50ZWdlcikpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxv
bmctbG9uZworaW50NjRfdCB0b0ludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworCisgICAgLy8gTWFw
IE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8g
Ml42NC4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbjsKKyAgICBkb3VibGVUb0ludGVnZXIoeCwg
bik7CisgICAgcmV0dXJuIG47Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8j
ZXMtdW5zaWduZWQtbG9uZy1sb25nCit1aW50NjRfdCB0b1VJbnQ2NChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKKworICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0
ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG47CisgICAgZG91
YmxlVG9JbnRlZ2VyKHgsIG4pOworICAgIHJldHVybiBuOworfQorCitjbGFzcyBHZXRDYWxsZXJH
bG9iYWxPYmplY3RGdW5jdG9yIHsKK3B1YmxpYzoKKyAgICBHZXRDYWxsZXJHbG9iYWxPYmplY3RG
dW5jdG9yKCkgPSBkZWZhdWx0OworCisgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3Io
KShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1faGFz
U2tpcHBlZEZpcnN0RnJhbWUpIHsKKyAgICAgICAgICAgIG1faGFzU2tpcHBlZEZpcnN0RnJhbWUg
PSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoYXV0byogY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2Nr
KCkpCisgICAgICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHZpc2l0b3ItPmNhbGxlZSgp
KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYWxsZWUgaXMgbm90IGFuIG9iamVjdCBpZiB0aGUg
Y2FsbGVyIGlzIFdlYiBBc3NlbWJseS4KKyAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0
byBkbyBoZXJlLiBXZSBjYW4gcHJvYmFibHkgZ2V0IHRoZSBnbG9iYWwgb2JqZWN0CisgICAgICAg
ICAgICAvLyBmcm9tIHRoZSB0b3AtbW9zdCBXYXNtIEluc3RhbmNlLiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzIxCisgICAgICAgICAgICBpZiAodmlzaXRvci0+
Y2FsbGVlKCktPmlzT2JqZWN0KCkpCisgICAgICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBq
c0Nhc3Q8SlNPYmplY3QqPih2aXNpdG9yLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CisgICAgfQorCisgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2Jq
ZWN0OyB9CisKK3ByaXZhdGU6CisgICAgbXV0YWJsZSBib29sIG1faGFzU2tpcHBlZEZpcnN0RnJh
bWUgeyBmYWxzZSB9OworICAgIG11dGFibGUgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0
IHsgbnVsbHB0ciB9OworfTsKKworRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coRXhlY1N0YXRl
KiBleGVjKQoreworICAgIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgaXRlcjsKKyAgICBl
eGVjLT5pdGVyYXRlKGl0ZXIpOworICAgIHJldHVybiBpdGVyLmdsb2JhbE9iamVjdCgpID8gYXNK
U0RPTVdpbmRvdyhpdGVyLmdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpIDogZmlyc3RET01XaW5k
b3coZXhlYyk7Cit9CisKK0RPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpLT53cmFwcGVkKCk7Cit9CisKK0RPTVdpbmRvdyYgZmlyc3RET01XaW5kb3coRXhlY1N0YXRl
KiBleGVjKQoreworICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPnZtRW50cnlHbG9iYWxP
YmplY3QoKSktPndyYXBwZWQoKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGNhbkFjY2Vzc0Rv
Y3VtZW50KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRG9jdW1lbnQqIHRhcmdldERvY3VtZW50LCBT
ZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCit7CisgICAgVk0mIHZtID0g
c3RhdGUtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgaWYgKCF0YXJnZXREb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
RE9NV2luZG93JiBhY3RpdmUgPSBhY3RpdmVET01XaW5kb3coc3RhdGUpOworCisgICAgaWYgKGFj
dGl2ZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLmNhbkFjY2Vzcyh0YXJnZXREb2N1bWVu
dC0+c2VjdXJpdHlPcmlnaW4oKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3dpdGNo
IChyZXBvcnRpbmdPcHRpb24pIHsKKyAgICBjYXNlIFRocm93U2VjdXJpdHlFcnJvcjoKKyAgICAg
ICAgdGhyb3dTZWN1cml0eUVycm9yKCpzdGF0ZSwgc2NvcGUsIHRhcmdldERvY3VtZW50LT5kb21X
aW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTG9nU2VjdXJpdHlFcnJvcjoKKyAgICAgICAgcHJpbnRFcnJvck1l
c3NhZ2VGb3JGcmFtZSh0YXJnZXREb2N1bWVudC0+ZnJhbWUoKSwgdGFyZ2V0RG9jdW1lbnQtPmRv
bVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmUpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3I6CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJp
dHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBE
T01XaW5kb3cmIHRhcmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9u
KQoreworICAgIHJldHVybiBjYW5BY2Nlc3NEb2N1bWVudChzdGF0ZSwgdGFyZ2V0LmRvY3VtZW50
KCksIHJlcG9ydGluZ09wdGlvbik7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRB
bGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBGcmFtZSogdGFyZ2V0LCBT
ZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCit7CisgICAgcmV0dXJuIHRh
cmdldCAmJiBjYW5BY2Nlc3NEb2N1bWVudChzdGF0ZSwgdGFyZ2V0LT5kb2N1bWVudCgpLCByZXBv
cnRpbmdPcHRpb24pOworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nl
c3NUb05vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBOb2RlKiB0YXJnZXQpCit7CisgICAgcmV0
dXJuICF0YXJnZXQgfHwgY2FuQWNjZXNzRG9jdW1lbnQoJnN0YXRlLCAmdGFyZ2V0LT5kb2N1bWVu
dCgpLCBMb2dTZWN1cml0eUVycm9yKTsKK30KKyAgICAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSB0
aHJvd1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAgIHJldHVybiB0aHJvd1ZNVHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGVycm9yTWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lkIGFw
cGVuZEFyZ3VtZW50TXVzdEJlKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIHVuc2lnbmVkIGFyZ3Vt
ZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogaW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiQXJndW1lbnQgIik7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoYXJndW1lbnRJbmRl
eCArIDEpOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICgnIik7CisgICAgYnVpbGRlci5h
cHBlbmQoYXJndW1lbnROYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIicpIHRvICIp
OworICAgIGlmICghZnVuY3Rpb25OYW1lKSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgidGhlICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChpbnRlcmZhY2VOYW1lKTsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgY29uc3RydWN0b3IiKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBidWlsZGVyLmFwcGVuZChpbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoJy4nKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZnVuY3Rpb25OYW1lKTsKKyAgICB9
CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgbXVzdCBiZSAiKTsKK30KKworSlNDOjpFbmNv
ZGVkSlNWYWx1ZSByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1l
KQoreworICAgIGF1dG8mIGNvbnRleHQgPSAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3Rh
dGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
IGNvbnRleHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZl
bDo6RXJyb3IsIG1ha2VTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVy
dHkgJyIsIGF0dHJpYnV0ZU5hbWUsICInIG9uIGEgbm9uLSIsIGludGVyZmFjZU5hbWUsICIgb2Jq
ZWN0LiIpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQor
ICAgIAordm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1l
KQoreworICAgIGF1dG8mIGNvbnRleHQgPSAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3Rh
dGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAg
IGNvbnRleHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZl
bDo6RXJyb3IsIG1ha2VTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBzZXQgcHJvcGVydHkg
JyIsIGF0dHJpYnV0ZU5hbWUsICInIG9uIGEgbm9uLSIsIGludGVyZmFjZU5hbWUsICIgb2JqZWN0
LiIpKTsKK30KKwordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2Vw
dGlvbigpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNl
cHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUikpOworfQorCit2b2lkIHRocm93Tm90U3Vw
cG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCBjb25zdCBjaGFyKiBtZXNzYWdlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OworICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOworICAgIHRocm93RXhjZXB0aW9u
KCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURf
RVJSLCAmbWVzc2FnZVN0cmluZykpOworfQorCit2b2lkIHRocm93SW52YWxpZFN0YXRlRXJyb3Io
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFy
KiBtZXNzYWdlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIFN0cmlu
ZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2Nv
cGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElOVkFMSURfU1RBVEVfRVJSLCAmbWVzc2Fn
ZVN0cmluZykpOworfQorCit2b2lkIHRocm93U2VjdXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sK
KyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3Rh
dGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTRUNVUklUWV9FUlIsIG1lc3Nh
Z2UpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWdu
ZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBm
dW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hh
ciogZXhwZWN0ZWRWYWx1ZXMpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGFw
cGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwg
ZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgib25lIG9mOiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFZhbHVlcyk7
CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0
cmluZygpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRnVu
Y3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUs
IHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBh
cmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7
CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJhIGZ1bmN0aW9uIik7CisgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKK30KKwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwg
Y29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQor
eworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBhcHBlbmRBcmd1bWVudE11c3RCZShi
dWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFt
ZSwgZnVuY3Rpb25OYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImFuIGluc3RhbmNl
IG9mICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVHlwZSk7CisgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKK30KKwor
dm9pZCB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIkludmFsaWQgQXJyYXkgZWxlbWVudCB0eXBlIikpOworfQorCit2b2lk
IHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0
cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQoreworICAgIHRocm93VHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcuJywg
YXR0cmlidXRlTmFtZSwgIiBhdHRyaWJ1dGUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiLCBleHBl
Y3RlZFR5cGUpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1JlcXVpcmVkTWVtYmVy
VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwg
Y29uc3QgY2hhciogbWVtYmVyTmFtZSwgY29uc3QgY2hhciogZGljdGlvbmFyeU5hbWUsIGNvbnN0
IGNoYXIqIGV4cGVjdGVkVHlwZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAg
YnVpbGRlci5hcHBlbmRMaXRlcmFsKCJNZW1iZXIgIik7CisgICAgYnVpbGRlci5hcHBlbmQoZGlj
dGlvbmFyeU5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7CisgICAgYnVpbGRlci5hcHBl
bmQobWVtYmVyTmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgaXMgcmVxdWlyZWQg
YW5kIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIik7CisgICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0
ZWRUeXBlKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWls
ZGVyLnRvU3RyaW5nKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93Q29uc3RydWN0
b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUp
Cit7CisgICAgcmV0dXJuIHRocm93Vk1FcnJvcigmc3RhdGUsIHNjb3BlLCBjcmVhdGVSZWZlcmVu
Y2VFcnJvcigmc3RhdGUsIG1ha2VTdHJpbmcoaW50ZXJmYWNlTmFtZSwgIiBjb25zdHJ1Y3RvciBh
c3NvY2lhdGVkIGV4ZWN1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIikpKTsKK30KKwordm9p
ZCB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiVmFsdWUgaXMgbm90IGEgc2VxdWVuY2UiKSk7Cit9CisKK3ZvaWQgdGhyb3dOb25G
aW5pdGVUeXBlRXJyb3IoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkK
K3sKKyAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlRoZSBw
cm92aWRlZCB2YWx1ZSBpcyBub24tZmluaXRlIikpOworfQorCitTdHJpbmcgbWFrZUdldHRlclR5
cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0
cmlidXRlTmFtZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5h
bWUsICcuJywgYXR0cmlidXRlTmFtZSwgIiBnZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBpbnN0
YW5jZXMgb2YgIiwgaW50ZXJmYWNlTmFtZSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhy
b3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKQoreworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIG1ha2VH
ZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGF0dHJpYnV0ZU5hbWUpKTsKK30K
KworSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdp
dGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5h
bWUsIGF0dHJpYnV0ZU5hbWUpKTsKK30KKworYm9vbCB0aHJvd1NldHRlclR5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgdGhyb3dUeXBl
RXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4n
LCBhdHRyaWJ1dGVOYW1lLCAiIHNldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBv
ZiAiLCBpbnRlcmZhY2VOYW1lKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgbWFr
ZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiQ2FuIG9ubHkgY2Fs
bCAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGZ1bmN0aW9uTmFtZSwgIiBvbiBpbnN0YW5jZXMgb2Yg
IiwgaW50ZXJmYWNlTmFtZSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNo
YXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2Uo
aW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUg
cmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKERlZmVycmVkUHJvbWlzZSYgcHJvbWlzZSwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKK3sKKyAg
ICBwcm9taXNlLnJlamVjdChUeXBlRXJyb3IsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRl
cmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRo
aXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lKQoreworICAgIHJldHVybiBjcmVhdGVSZWplY3Rl
ZFByb21pc2VXaXRoVHlwZUVycm9yKHN0YXRlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50
ZXJmYWNlTmFtZSwgbWV0aG9kTmFtZSkpOworfQorCit2b2lkIGNhbGxGdW5jdGlvbldpdGhDdXJy
ZW50QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCYgdGhpc09i
amVjdCwgSlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBKU0M6OkNhbGxEYXRhIGNh
bGxEYXRhOworICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENhbGxEYXRhKCZm
dW5jdGlvbiwgY2FsbERhdGEpOworICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9u
ZSk7CisKKyAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgIEpTQzo6
Y2FsbCgmc3RhdGUsICZmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmdGhpc09iamVjdCwg
YXJndW1lbnRzKTsKK30KKwordm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6dmlz
aXRDaGlsZHJlbihKU0M6OkpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PERPTUNvbnN0cnVjdG9ySlNCdWlsdGlu
T2JqZWN0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CisgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVuY3Rpb24pOwor
fQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsVGhyb3dUeXBlRXJy
b3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHRocm93VHlwZUVycm9yKGV4
ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIG9wZXJh
dG9yIikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworfQorCitDYWxs
VHlwZSBET01Db25zdHJ1Y3Rvck9iamVjdDo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEm
IGNhbGxEYXRhKQoreworICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxUaHJvd1R5
cGVFcnJvcjsKKyAgICByZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7Cit9CisKK3ZvaWQgdGhyb3dET01T
eW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
Cit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24o
JnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU1lOVEFYX0VSUikpOwor
fQorCit2b2lkIHRocm93RGF0YUNsb25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwor
ICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3Rh
dGUsIERBVEFfQ0xPTkVfRVJSKSk7Cit9CisKK3ZvaWQgdGhyb3dJbmRleFNpemVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwg
Y3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5ERVhfU0laRV9FUlIpKTsKK30KKwordm9pZCB0
aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBUWVBF
X01JU01BVENIX0VSUikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV3JhcHBlckNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVdyYXBwZXJDYWNoZS5jcHAJKHJldmlzaW9uIDIxMTM1MykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjAsMzc0ICsyMCwxNCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgog
Ci0jaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiQ29tbW9uVk0uaCIKLSNpbmNs
dWRlICJET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJF
eGNlcHRpb25IZWFkZXJzLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uSW50ZXJmYWNlcy5oIgotI2lu
Y2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgotI2luY2x1ZGUg
IklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCi0jaW5j
bHVkZSAiSlNET01Qcm9taXNlLmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKLSNp
bmNsdWRlICJKU0V4Y2VwdGlvbkJhc2UuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgot
I2luY2x1ZGUgPGJ5dGVjb2RlL0NvZGVCbG9jay5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9TY3Jp
cHRDYWxsU3RhY2suaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9y
eS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+Ci0jaW5jbHVkZSA8cnVudGlt
ZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JIYW5kbGluZ1Njb3BlLmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9FcnJvckluc3RhbmNlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FeGNlcHRp
b24uaD4KLSNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0pTRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlND
SW5saW5lcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwotdXNpbmcgbmFtZXNwYWNlIEluc3Bl
Y3RvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxM
WV9ERVNUUlVDVElCTEUoRE9NQ29uc3RydWN0b3JPYmplY3QpOwotU1RBVElDX0FTU0VSVF9JU19U
UklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50KTsKLQotdm9p
ZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsK
LSAgICBjb21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7Ci19Ci0KLUpT
VmFsdWUganNPd25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYg
cykKLXsKLSAgICBpZiAocy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAg
IHJldHVybiBqc093bmVkU3RyaW5nKGV4ZWMsIHMpOwotfQotCi1KU1ZhbHVlIGpzU3RyaW5nT3JV
bmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgaWYgKHMu
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVybiBqc1N0
cmluZ1dpdGhDYWNoZShleGVjLCBzKTsKLX0KLQotSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFVSTCYgdXJsKQotewotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShl
eGVjLCB1cmwuc3RyaW5nKCkpOwotfQotCi1KU1ZhbHVlIGpzU3RyaW5nT3JVbmRlZmluZWQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKLXsKLSAgICBpZiAodXJsLmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2Fj
aGUoZXhlYywgdXJsLnN0cmluZygpKTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5n
VG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIFN0
cmluZyYmIHN0cmluZykKLXsKLSAgICBpZiAoIXN0cmluZy5jb250YWluc09ubHlMYXRpbjEoKSkg
ewotICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RyaW5nOwotfQotCi1TdHJpbmcgaWRlbnRpZmll
clRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlm
aWVyKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgU3RyaW5nIHN0cmluZyA9IGlkZW50aWZpZXIuc3Ry
aW5nKCk7Ci0gICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1v
dmUoc3RyaW5nKSk7Ci19Ci0KLVN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgU3RyaW5nIHN0cmluZyA9
IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKLQotICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3RhdGUsIHNjb3BlLCBX
VEZNb3ZlKHN0cmluZykpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaGFzVW5wYWlyZWRTdXJy
b2dhdGUoU3RyaW5nVmlldyBzdHJpbmcpCi17Ci0gICAgLy8gRmFzdCBwYXRoIGZvciA4LWJpdCBz
dHJpbmdzOyB0aGV5IGNhbid0IGhhdmUgYW55IHN1cnJvZ2F0ZXMuCi0gICAgaWYgKHN0cmluZy5p
czhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoYXV0byBjb2RlUG9pbnQg
OiBzdHJpbmcuY29kZVBvaW50cygpKSB7Ci0gICAgICAgIGlmIChVX0lTX1NVUlJPR0FURShjb2Rl
UG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9VU1ZTdHJpbmcoU3RyaW5nJiYg
c3RyaW5nKQotewotICAgIC8vIEZhc3QgcGF0aCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJl
IG5vIHVucGFpcmVkIHN1cnJvZ2F0ZXMuCi0gICAgaWYgKCFoYXNVbnBhaXJlZFN1cnJvZ2F0ZShz
dHJpbmcpKQotICAgICAgICByZXR1cm4gc3RyaW5nOwotCi0gICAgLy8gU2xvdyBwYXRoOiBodHRw
Oi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1vYnRhaW4tdW5pY29kZQotICAgIC8vIFJl
cGxhY2VzIHVucGFpcmVkIHN1cnJvZ2F0ZXMgd2l0aCB0aGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVy
LgotICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHko
c3RyaW5nLmxlbmd0aCgpKTsKLSAgICBTdHJpbmdWaWV3IHZpZXcgeyBzdHJpbmcgfTsKLSAgICBm
b3IgKGF1dG8gY29kZVBvaW50IDogdmlldy5jb2RlUG9pbnRzKCkpIHsKLSAgICAgICAgaWYgKFVf
SVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlcGxh
Y2VtZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChjb2RlUG9pbnQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0K
LVN0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnRpZmllcikKLXsKLSAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmco
KTsKLSAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKLX0KLQot
U3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKLQotICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygm
c3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICByZXR1
cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotSlNWYWx1ZSBqc0Rh
dGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIERhdGVJbnN0
YW5jZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZGF0
ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7Ci19Ci0KLWRvdWJsZSB2YWx1ZVRvRGF0ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCi0gICAg
ICAgIHJldHVybiB2YWx1ZS5hc051bWJlcigpOwotICAgIGlmICghdmFsdWUuaW5oZXJpdHMoZXhl
Yy0+dm0oKSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpKQotICAgICAgICByZXR1cm4gc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RGF0ZUluc3RhbmNlKj4odmFsdWUudG9PYmplY3QoZXhlYykpLT5pbnRlcm5hbE51bWJlcigpOwot
fQotCi12b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXhjZXB0
aW9uVmFsdWUsIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQotewotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQ
SUxvY2soKSk7Ci0gICAgYXV0byogZXhjZXB0aW9uID0ganNEeW5hbWljRG93bmNhc3Q8SlNDOjpF
eGNlcHRpb24qPih2bSwgZXhjZXB0aW9uVmFsdWUpOwotICAgIGlmICghZXhjZXB0aW9uKSB7Ci0g
ICAgICAgIGV4Y2VwdGlvbiA9IHZtLmxhc3RFeGNlcHRpb24oKTsKLSAgICAgICAgaWYgKCFleGNl
cHRpb24pCi0gICAgICAgICAgICBleGNlcHRpb24gPSBKU0M6OkV4Y2VwdGlvbjo6Y3JlYXRlKGV4
ZWMtPnZtKCksIGV4Y2VwdGlvblZhbHVlLCBKU0M6OkV4Y2VwdGlvbjo6RG9Ob3RDYXB0dXJlU3Rh
Y2spOwotICAgIH0KLQotICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIGNhY2hl
ZFNjcmlwdCk7Ci19Ci0KLVN0cmluZyByZXRyaWV2ZUVycm9yTWVzc2FnZShFeGVjU3RhdGUmIHN0
YXRlLCBWTSYgdm0sIEpTVmFsdWUgZXhjZXB0aW9uLCBDYXRjaFNjb3BlJiBjYXRjaFNjb3BlKQot
ewotICAgIGlmIChhdXRvKiBleGNlcHRpb25CYXNlID0gdG9FeGNlcHRpb25CYXNlKHZtLCBleGNl
cHRpb24pKQotICAgICAgICByZXR1cm4gZXhjZXB0aW9uQmFzZS0+dG9TdHJpbmcoKTsKLQotICAg
IC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNwZWN0b3I6IFdl
YkNvcmU6OnJlcG9ydEV4Y2VwdGlvbiBzaG91bGQgbm90IGV2YWx1YXRlIEphdmFTY3JpcHQgaGFu
ZGxpbmcgZXhjZXB0aW9ucwotICAgIC8vIElmIHRoaXMgaXMgYSBjdXN0b20gZXhjZXB0aW9uIG9i
amVjdCwgY2FsbCB0b1N0cmluZyBvbiBpdCB0byB0cnkgYW5kIGdldCBhIG5pY2Ugc3RyaW5nIHJl
cHJlc2VudGF0aW9uIGZvciB0aGUgZXhjZXB0aW9uLgotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7
Ci0gICAgaWYgKGF1dG8qIGVycm9yID0ganNEeW5hbWljRG93bmNhc3Q8RXJyb3JJbnN0YW5jZSo+
KHZtLCBleGNlcHRpb24pKQotICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci0+c2FuaXRpemVk
VG9TdHJpbmcoJnN0YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIGVycm9yTWVzc2FnZSA9IGV4Y2Vw
dGlvbi50b1dURlN0cmluZygmc3RhdGUpOwotCi0gICAgLy8gV2UgbmVlZCB0byBjbGVhciBhbnkg
bmV3IGV4Y2VwdGlvbiB0aGF0IG1heSBiZSB0aHJvd24gaW4gdGhlIHRvU3RyaW5nKCkgY2FsbCBh
Ym92ZS4KLSAgICAvLyByZXBvcnRFeGNlcHRpb24oKSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgbWFr
aW5nIG5ldyBleGNlcHRpb25zLgotICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAg
ICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gZXJyb3JNZXNzYWdlOwotfQot
Ci12b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBl
eGNlcHRpb24sIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0LCBFeGNlcHRpb25EZXRhaWxzKiBl
eGNlcHRpb25EZXRhaWxzKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgUkVMRUFTRV9BU1NFUlQodm0u
Y3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0gICAgaWYgKGlzVGVybWluYXRlZEV4
ZWN1dGlvbkV4Y2VwdGlvbih2bSwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
RXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoZXhlYy0+dm0oKSk7Ci0KLSAgICBSZWZQdHI8
U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2Vw
dGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRv
Q2FwdHVyZSkpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgdm0uY2xlYXJMYXN0
RXhjZXB0aW9uKCk7Ci0KLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAg
ICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IGpzRHluYW1pY0Rvd25jYXN0PEpTRE9NV2luZG93
Kj4odm0sIGdsb2JhbE9iamVjdCkpIHsKLSAgICAgICAgaWYgKCF3aW5kb3ctPndyYXBwZWQoKS5p
c0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpbnQgbGluZU51bWJlciA9IDA7Ci0gICAgaW50IGNvbHVtbk51bWJlciA9IDA7Ci0g
ICAgU3RyaW5nIGV4Y2VwdGlvblNvdXJjZVVSTDsKLSAgICBpZiAoY29uc3QgU2NyaXB0Q2FsbEZy
YW1lKiBjYWxsRnJhbWUgPSBjYWxsU3RhY2stPmZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKCkpIHsK
LSAgICAgICAgbGluZU51bWJlciA9IGNhbGxGcmFtZS0+bGluZU51bWJlcigpOwotICAgICAgICBj
b2x1bW5OdW1iZXIgPSBjYWxsRnJhbWUtPmNvbHVtbk51bWJlcigpOwotICAgICAgICBleGNlcHRp
b25Tb3VyY2VVUkwgPSBjYWxsRnJhbWUtPnNvdXJjZVVSTCgpOwotICAgIH0KLQotICAgIFN0cmlu
ZyBlcnJvck1lc3NhZ2UgPSByZXRyaWV2ZUVycm9yTWVzc2FnZSgqZXhlYywgdm0sIGV4Y2VwdGlv
bi0+dmFsdWUoKSwgc2NvcGUpOwotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
LSAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5yZXBvcnRFeGNlcHRpb24oZXJyb3JNZXNzYWdl
LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGV4Y2VwdGlvblNvdXJjZVVSTCwgZXhjZXB0aW9u
LCBjYWxsU3RhY2stPnNpemUoKSA/IGNhbGxTdGFjayA6IG51bGxwdHIsIGNhY2hlZFNjcmlwdCk7
Ci0KLSAgICBpZiAoZXhjZXB0aW9uRGV0YWlscykgewotICAgICAgICBleGNlcHRpb25EZXRhaWxz
LT5tZXNzYWdlID0gZXJyb3JNZXNzYWdlOwotICAgICAgICBleGNlcHRpb25EZXRhaWxzLT5saW5l
TnVtYmVyID0gbGluZU51bWJlcjsKLSAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+Y29sdW1uTnVt
YmVyID0gY29sdW1uTnVtYmVyOwotICAgICAgICBleGNlcHRpb25EZXRhaWxzLT5zb3VyY2VVUkwg
PSBleGNlcHRpb25Tb3VyY2VVUkw7Ci0gICAgfQotfQotCi12b2lkIHJlcG9ydEN1cnJlbnRFeGNl
cHRpb24oRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotICAgIGF1dG8qIGV4Y2VwdGlv
biA9IHNjb3BlLmV4Y2VwdGlvbigpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAg
cmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlIGNy
ZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUgZWMsIGNvbnN0
IFN0cmluZyogbWVzc2FnZSA9IG51bGxwdHIpCi17Ci0gICAgaWYgKCFlYyB8fCBlYyA9PSBFeGlz
dGluZ0V4Y2VwdGlvbkVycm9yKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAg
IC8vIEZJWE1FOiBIYW5kbGUgb3RoZXIgV2ViSURMIGV4Y2VwdGlvbiB0eXBlcy4KLSAgICBpZiAo
ZWMgPT0gVHlwZUVycm9yKSB7Ci0gICAgICAgIGlmICghbWVzc2FnZSB8fCBtZXNzYWdlLT5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMpOwotICAgICAg
ICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMsICptZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBp
ZiAoZWMgPT0gUmFuZ2VFcnJvcikgewotICAgICAgICBpZiAoIW1lc3NhZ2UgfHwgbWVzc2FnZS0+
aXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVND
SUlMaXRlcmFsKCJCYWQgdmFsdWUiKSk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVSYW5nZUVycm9y
KGV4ZWMsICptZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBpZiAoZWMgPT0gU3RhY2tPdmVyZmxvd0Vy
cm9yKQotICAgICAgICByZXR1cm4gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwotCi0g
ICAgLy8gRklYTUU6IEFsbCBjYWxsZXJzIHRvIGNyZWF0ZURPTUV4Y2VwdGlvbiBuZWVkIHRvIHBh
c3MgaW4gdGhlIGNvcnJlY3QgZ2xvYmFsIG9iamVjdC4KLSAgICAvLyBGb3Igbm93LCB3ZSdyZSBn
b2luZyB0byBhc3N1bWUgdGhlIGxleGljYWxHbG9iYWxPYmplY3QuIFdoaWNoIGlzIHdyb25nIGlu
IGNhc2VzIGxpa2UgdGhpczoKLSAgICAvLyBmcmFtZXNbMF0uZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dChudWxsLCBudWxsKTsgLy8gdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGljaCBzaG91bGQgaGF2ZSB0
aGUgc3ViZnJhbWUncyBwcm90b3R5cGVzLgotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpOwotCi0gICAg
RXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKLQotICAgIENTdHJpbmcg
bWVzc2FnZUNTdHJpbmc7Ci0gICAgaWYgKG1lc3NhZ2UpCi0gICAgICAgIG1lc3NhZ2VDU3RyaW5n
ID0gbWVzc2FnZS0+dXRmOCgpOwotICAgIGlmIChtZXNzYWdlICYmICFtZXNzYWdlLT5pc0VtcHR5
KCkpIHsKLSAgICAgICAgLy8gSXQgaXMgc2FmZSB0byBkbyB0aGlzIGJlY2F1c2UgdGhlIGNoYXIq
IGNvbnRlbnRzIG9mIHRoZSBDU3RyaW5nIGFyZSBjb3BpZWQgaW50byBhIG5ldyBXVEY6OlN0cmlu
ZyBiZWZvcmUgdGhlIENTdHJpbmcgaXMgZGVzdHJveWVkLgotICAgICAgICBkZXNjcmlwdGlvbi5k
ZXNjcmlwdGlvbiA9IG1lc3NhZ2VDU3RyaW5nLmRhdGEoKTsKLSAgICB9Ci0KLSAgICBKU1ZhbHVl
IGVycm9yT2JqZWN0OwotICAgIHN3aXRjaCAoZGVzY3JpcHRpb24udHlwZSkgewotICAgIGNhc2Ug
RE9NQ29yZUV4Y2VwdGlvblR5cGU6Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAg
Y2FzZSBJREJEYXRhYmFzZUV4Y2VwdGlvblR5cGU6Ci0jZW5kaWYKLSAgICAgICAgZXJyb3JPYmpl
Y3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgRE9NQ29yZUV4Y2VwdGlvbjo6Y3JlYXRlKGRl
c2NyaXB0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsZUV4Y2VwdGlvblR5cGU6
Ci0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIEZpbGVFeGNl
cHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNR
TEV4Y2VwdGlvblR5cGU6Ci0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIFNRTEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgU1ZHRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBYUGF0aEV4Y2VwdGlvblR5cGU6Ci0gICAgICAgIGVy
cm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFhQYXRoRXhjZXB0aW9uOjpjcmVh
dGUoZGVzY3JpcHRpb24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIEFTU0VS
VChlcnJvck9iamVjdCk7Ci0gICAgYWRkRXJyb3JJbmZvKGV4ZWMsIGFzT2JqZWN0KGVycm9yT2Jq
ZWN0KSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIGVycm9yT2JqZWN0OwotfQotCi1KU1ZhbHVlIGNyZWF0
ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUgZWMsIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlRE9NRXhjZXB0aW9uKGV4ZWMsIGVj
LCAmbWVzc2FnZSk7Ci19Ci0KLUpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSYg
c3RhdGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKLXsKLSAgICByZXR1cm4gY3JlYXRlRE9NRXhj
ZXB0aW9uKCZzdGF0ZSwgZXhjZXB0aW9uLmNvZGUoKSwgZXhjZXB0aW9uLnJlbGVhc2VNZXNzYWdl
KCkpOwotfQotCi12b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRp
b24pCi17Ci0gICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4
Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbihzdGF0ZSwgV1RG
TW92ZShleGNlcHRpb24pKSk7Ci19Ci0KLWJvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBzdGF0
ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAg
IGlmICghdmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNP
YmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIENhbGxEYXRhIGNhbGxE
YXRhOwotICAgIENhbGxUeXBlIGNhbGxUeXBlOwotICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBv
YmplY3QtPmdldE1ldGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlO
YW1lcy0+aXRlcmF0b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0ZXJhdG9yIHByb3Bl
cnR5IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBmYWxzZSk7Ci0KLSAgICByZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5kZWZpbmVkKCk7Ci19Ci0K
LWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoRXhlY1N0YXRl
JiBzdGF0ZSwgRnJhbWUmIGZyYW1lLCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKEJpbmRp
bmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKCZzdGF0ZSwgJmZyYW1lLCBEb05v
dFJlcG9ydFNlY3VyaXR5RXJyb3IpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBtZXNzYWdl
ID0gZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JN
ZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEV4ZWNT
dGF0ZSYgc3RhdGUsIERPTVdpbmRvdyYgZ2xvYmFsT2JqZWN0LCBTdHJpbmcmIG1lc3NhZ2UpCi17
Ci0gICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygm
c3RhdGUsIGdsb2JhbE9iamVjdCwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgbWVzc2FnZSA9IGdsb2JhbE9iamVjdC5jcm9zc0RvbWFpbkFjY2Vz
c0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+cHJpbnRFcnJvck1lc3NhZ2UobWVz
c2FnZSk7Ci19Ci0KIFN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQogewogICAg
IEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LnN0cnVjdHVyZXMo
Tm9Mb2NraW5nTmVjZXNzYXJ5KTsKQEAgLTQwMiw2MzMgKzQyLDQgQEAgU3RydWN0dXJlKiBjYWNo
ZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbAogICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChjbGFz
c0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC52bSgpLCAmZ2xvYmFs
T2JqZWN0LCBzdHJ1Y3R1cmUpKS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKLXN0YXRpYyBj
b25zdCBpbnQzMl90IGtNYXhJbnQzMiA9IDB4N2ZmZmZmZmY7Ci1zdGF0aWMgY29uc3QgaW50MzJf
dCBrTWluSW50MzIgPSAta01heEludDMyIC0gMTsKLXN0YXRpYyBjb25zdCB1aW50MzJfdCBrTWF4
VUludDMyID0gMHhmZmZmZmZmZlU7Ci1zdGF0aWMgY29uc3QgaW50NjRfdCBrSlNNYXhJbnRlZ2Vy
ID0gMHgyMDAwMDAwMDAwMDAwMExMIC0gMTsgLy8gMl41MyAtIDEsIGxhcmdlc3QgaW50ZWdlciBl
eGFjdGx5IHJlcHJlc2VudGFibGUgaW4gRUNNQVNjcmlwdC4KLQotc3RhdGljIFN0cmluZyByYW5n
ZUVycm9yU3RyaW5nKGRvdWJsZSB2YWx1ZSwgZG91YmxlIG1pbiwgZG91YmxlIG1heCkKLXsKLSAg
ICByZXR1cm4gbWFrZVN0cmluZygiVmFsdWUgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFT
Y3JpcHQodmFsdWUpLCAiIGlzIG91dHNpZGUgdGhlIHJhbmdlIFsiLCBTdHJpbmc6Om51bWJlclRv
U3RyaW5nRUNNQVNjcmlwdChtaW4pLCAiLCAiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNj
cmlwdChtYXgpLCAiXSIpOwotfQotCi1zdGF0aWMgZG91YmxlIGVuZm9yY2VSYW5nZShFeGVjU3Rh
dGUmIHN0YXRlLCBkb3VibGUgeCwgZG91YmxlIG1pbmltdW0sIGRvdWJsZSBtYXhpbXVtKQotewot
ICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwotCi0gICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSkgewot
ICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5nZUVycm9yU3RyaW5nKHgs
IG1pbmltdW0sIG1heGltdW0pKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHggPSB0
cnVuYyh4KTsKLSAgICBpZiAoeCA8IG1pbmltdW0gfHwgeCA+IG1heGltdW0pIHsKLSAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVt
LCBtYXhpbXVtKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4geDsKLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0cyB7Ci19OwotCi10
ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8aW50OF90PiB7Ci0gICAgc3RhdGljIGNv
bnN0IGludDhfdCBtaW5WYWx1ZSA9IC0xMjg7Ci0gICAgc3RhdGljIGNvbnN0IGludDhfdCBtYXhW
YWx1ZSA9IDEyNzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAy
NTY7IC8vIDJeOAotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQ4
X3Q+IHsKLSAgICBzdGF0aWMgY29uc3QgdWludDhfdCBtYXhWYWx1ZSA9IDI1NTsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAotfTsKLQotdGVt
cGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzPGludDE2X3Q+IHsKLSAgICBzdGF0aWMgY29u
c3Qgc2hvcnQgbWluVmFsdWUgPSAtMzI3Njg7Ci0gICAgc3RhdGljIGNvbnN0IHNob3J0IG1heFZh
bHVlID0gMzI3Njc7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0g
NjU1MzY7IC8vIDJeMTYKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czx1
aW50MTZfdD4gewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtYXhWYWx1ZSA9IDY1
NTM1OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAv
LyAyXjE2Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgVCB0b1Nt
YWxsZXJJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+
Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIp
OwotCi0gICAgdHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OwotICAgIC8vIEZh
c3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciBp
biB0aGUgcmlnaHQgcmFuZ2UuCi0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkgewotICAgICAgICBp
bnQzMl90IGQgPSB2YWx1ZS5hc0ludDMyKCk7Ci0gICAgICAgIGlmIChkID49IExpbWl0c1RyYWl0
OjptaW5WYWx1ZSAmJiBkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUPihkKTsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwg
c2NvcGUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiBkIDwgTGltaXRz
VHJhaXQ6Om1pblZhbHVlID8gTGltaXRzVHJhaXQ6Om1pblZhbHVlIDogTGltaXRzVHJhaXQ6Om1h
eFZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIGQgJT0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFs
dWVzOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCA+IExpbWl0c1RyYWl0OjptYXhW
YWx1ZSA/IGQgLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiBkKTsKLSAgICB9Ci0KLSAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgMCk7Ci0KLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgot
ICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBMaW1pdHNUcmFpdDo6bWluVmFs
dWUsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBj
bGFtcFRvPFQ+KHgpOwotICAgIH0KLQotICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNp
bmYoeCkgfHwgIXgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgeCA9IHggPCAwID8gLWZsb29y
KGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7Ci0gICAgeCA9IGZtb2QoeCwgTGltaXRzVHJhaXQ6
Om51bWJlck9mVmFsdWVzKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih4ID4gTGltaXRz
VHJhaXQ6Om1heFZhbHVlID8geCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyA6IHgpOwot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1
ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHVuc2lnbmVkIGludGVncmFsIHR5cGVzIik7Ci0K
LSAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4gTGltaXRzVHJhaXQ7Ci0gICAgLy8gRmFzdCBw
YXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgaW4g
dGhlIHJpZ2h0IHJhbmdlLgotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKSB7Ci0gICAgICAgIHVp
bnQzMl90IGQgPSB2YWx1ZS5hc1VJbnQzMigpOwotICAgICAgICBpZiAoZCA8PSBMaW1pdHNUcmFp
dDo6bWF4VmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7Ci0gICAg
ICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KGQpOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5m
b3JjZVJhbmdlOgotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIExpbWl0c1RyYWl0OjptYXhWYWx1
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0
YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLQotICAgIHN3aXRjaCAo
Y29uZmlndXJhdGlvbikgewotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWw6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3Rh
dGUsIHgsIDAsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/
IDAgOiBjbGFtcFRvPFQ+KHgpOwotICAgIH0KLQotICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0
ZDo6aXNpbmYoeCkgfHwgIXgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgeCA9IHggPCAwID8g
LWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKSk7Ci19Ci0KLWludDhfdCB0
b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQot
ewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotdWludDhfdCB0b1VJ
bnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotaW50OF90IHRvSW50
OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wKTsKLX0KLQotdWludDhfdCB0b1VJbnQ4Q2xhbXAoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50
PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtYnl0ZQotaW50
OF90IHRvSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVy
biB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURM
LyNlcy1vY3RldAotdWludDhfdCB0b1VJbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLWludDE2X3QgdG9J
bnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAg
IHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLXVpbnQxNl90IHRvVUludDE2
RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0
dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNp
b25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi1pbnQxNl90IHRvSW50MTZDbGFt
cChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxs
ZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wKTsKLX0KLQotdWludDE2X3QgdG9VSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90Pihz
dGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQot
Ci0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXNob3J0Ci1pbnQxNl90IHRvSW50
MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFs
bGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpOb3JtYWwpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVu
c2lnbmVkLXNob3J0Ci11aW50MTZfdCB0b1VJbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nCi1pbnQzMl90IHRvSW50MzJFbmZvcmNl
UmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBz
dGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQot
ICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7
Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgMCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwg
a01pbkludDMyLCBrTWF4SW50MzIpOwotfQotCi1pbnQzMl90IHRvSW50MzJDbGFtcChFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0g
ICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxp
bnQzMl90Pih4KTsKLX0KLQotdWludDMyX3QgdG9VSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPHVpbnQzMl90
Pih4KTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1s
b25nCi11aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0g
ICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50
b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAg
IHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtNYXhVSW50MzIpOwotfQotCi1pbnQ2
NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVybiBlbmZv
cmNlUmFuZ2Uoc3RhdGUsIHgsIC1rSlNNYXhJbnRlZ2VyLCBrSlNNYXhJbnRlZ2VyKTsKLX0KLQot
dWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVy
biBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtKU01heEludGVnZXIpOwotfQotCi1pbnQ2NF90
IHRvSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6Omlz
bmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjpt
YXg8ZG91YmxlPih4LCAta0pTTWF4SW50ZWdlciksIGtKU01heEludGVnZXIpKTsKLX0KLQotdWlu
dDY0X3QgdG9VSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBz
dGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+
KHN0ZDo6bWF4PGRvdWJsZT4oeCwgMCksIGtKU01heEludGVnZXIpKTsKLX0KLQotLy8gaHR0cDov
L3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nLWxvbmcKLWludDY0X3QgdG9JbnQ2NChFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9O
dW1iZXIoJnN0YXRlKTsKLQotICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBj
b252ZXJ0IGZpbml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCi0gICAgdW5zaWduZWQgbG9uZyBsb25n
IG47Ci0gICAgZG91YmxlVG9JbnRlZ2VyKHgsIG4pOwotICAgIHJldHVybiBuOwotfQotCi0vLyBo
dHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmctbG9uZwotdWludDY0
X3QgdG9VSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBkb3Vi
bGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0KLSAgICAvLyBNYXAgTmFOcyBhbmQgKy8t
SW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0LgotICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBuOwotICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsKLSAgICByZXR1
cm4gbjsKLX0KLQotY2xhc3MgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvciB7Ci1wdWJsaWM6
Ci0gICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvcigpID0gZGVmYXVsdDsKLQotICAgIFN0
YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25z
dAotICAgIHsKLSAgICAgICAgaWYgKCFtX2hhc1NraXBwZWRGaXJzdEZyYW1lKSB7Ci0gICAgICAg
ICAgICBtX2hhc1NraXBwZWRGaXJzdEZyYW1lID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBT
dGFja1Zpc2l0b3I6OkNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF1dG8qIGNv
ZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpKQotICAgICAgICAgICAgbV9nbG9iYWxPYmpl
Y3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIEFTU0VSVCh2aXNpdG9yLT5jYWxsZWUoKSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQ2Fs
bGVlIGlzIG5vdCBhbiBvYmplY3QgaWYgdGhlIGNhbGxlciBpcyBXZWIgQXNzZW1ibHkuCi0gICAg
ICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gaGVyZS4gV2UgY2FuIHByb2JhYmx5IGdl
dCB0aGUgZ2xvYmFsIG9iamVjdAotICAgICAgICAgICAgLy8gZnJvbSB0aGUgdG9wLW1vc3QgV2Fz
bSBJbnN0YW5jZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcy
MQotICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxlZSgpLT5pc09iamVjdCgpKQotICAgICAg
ICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2Fs
bGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RhY2tW
aXNpdG9yOjpEb25lOwotICAgIH0KLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qo
KSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdDsgfQotCi1wcml2YXRlOgotICAgIG11dGFi
bGUgYm9vbCBtX2hhc1NraXBwZWRGaXJzdEZyYW1lIHsgZmFsc2UgfTsKLSAgICBtdXRhYmxlIEpT
R2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdCB7IG51bGxwdHIgfTsKLX07Ci0KLURPTVdpbmRv
dyYgY2FsbGVyRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBHZXRDYWxsZXJHbG9i
YWxPYmplY3RGdW5jdG9yIGl0ZXI7Ci0gICAgZXhlYy0+aXRlcmF0ZShpdGVyKTsKLSAgICByZXR1
cm4gaXRlci5nbG9iYWxPYmplY3QoKSA/IGFzSlNET01XaW5kb3coaXRlci5nbG9iYWxPYmplY3Qo
KSktPndyYXBwZWQoKSA6IGZpcnN0RE9NV2luZG93KGV4ZWMpOwotfQotCi1ET01XaW5kb3cmIGFj
dGl2ZURPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGFzSlNET01XaW5k
b3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOwotfQotCi1ET01XaW5k
b3cmIGZpcnN0RE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gYXNKU0RP
TVdpbmRvdyhleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgYm9vbCBjYW5BY2Nlc3NEb2N1bWVudChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IERvY3VtZW50KiB0YXJnZXREb2N1bWVudCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0
aW5nT3B0aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmICghdGFyZ2V0RG9jdW1lbnQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIERPTVdpbmRvdyYgYWN0aXZlID0gYWN0aXZlRE9N
V2luZG93KHN0YXRlKTsKLQotICAgIGlmIChhY3RpdmUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmln
aW4oKS5jYW5BY2Nlc3ModGFyZ2V0RG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIHN3aXRjaCAocmVwb3J0aW5nT3B0aW9uKSB7Ci0gICAgY2Fz
ZSBUaHJvd1NlY3VyaXR5RXJyb3I6Ci0gICAgICAgIHRocm93U2VjdXJpdHlFcnJvcigqc3RhdGUs
IHNjb3BlLCB0YXJnZXREb2N1bWVudC0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJy
b3JNZXNzYWdlKGFjdGl2ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExvZ1NlY3VyaXR5
RXJyb3I6Ci0gICAgICAgIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUodGFyZ2V0RG9jdW1lbnQt
PmZyYW1lKCksIHRhcmdldERvY3VtZW50LT5kb21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NF
cnJvck1lc3NhZ2UoYWN0aXZlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG9Ob3RSZXBv
cnRTZWN1cml0eUVycm9yOgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2lu
ZG93KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRE9NV2luZG93JiB0YXJnZXQsIFNlY3VyaXR5UmVw
b3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKLXsKLSAgICByZXR1cm4gY2FuQWNjZXNzRG9j
dW1lbnQoc3RhdGUsIHRhcmdldC5kb2N1bWVudCgpLCByZXBvcnRpbmdPcHRpb24pOwotfQotCi1i
b29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgRnJhbWUqIHRhcmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0
aW5nT3B0aW9uKQotewotICAgIHJldHVybiB0YXJnZXQgJiYgY2FuQWNjZXNzRG9jdW1lbnQoc3Rh
dGUsIHRhcmdldC0+ZG9jdW1lbnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKLX0KLQotYm9vbCBCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgTm9kZSogdGFyZ2V0KQotewotICAgIHJldHVybiAhdGFyZ2V0IHx8IGNhbkFjY2Vzc0RvY3Vt
ZW50KCZzdGF0ZSwgJnRhcmdldC0+ZG9jdW1lbnQoKSwgTG9nU2VjdXJpdHlFcnJvcik7Ci19Ci0g
ICAgCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgdGhyb3dUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSkKLXsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBlcnJvck1l
c3NhZ2UpOwotfQotCi1zdGF0aWMgdm9pZCBhcHBlbmRBcmd1bWVudE11c3RCZShTdHJpbmdCdWls
ZGVyJiBidWlsZGVyLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVu
dE5hbWUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSkKLXsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIkFyZ3VtZW50ICIpOwotICAgIGJ1aWxk
ZXIuYXBwZW5kTnVtYmVyKGFyZ3VtZW50SW5kZXggKyAxKTsKLSAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIiAoJyIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGFyZ3VtZW50TmFtZSk7Ci0gICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCInKSB0byAiKTsKLSAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgewot
ICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoInRoZSAiKTsKLSAgICAgICAgYnVpbGRlci5h
cHBlbmQoaW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGNv
bnN0cnVjdG9yIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJm
YWNlTmFtZSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7Ci0gICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGZ1bmN0aW9uTmFtZSk7Ci0gICAgfQotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
IG11c3QgYmUgIik7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdl
dHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICBhdXRvJiBjb250ZXh0ID0gKmpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJEZXByZWNh
dGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICciLCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBh
IG5vbi0iLCBpbnRlcmZhY2VOYW1lLCAiIG9iamVjdC4iKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLX0KLSAgICAKLXZvaWQgcmVwb3J0RGVwcmVjYXRlZFNl
dHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICBhdXRvJiBjb250ZXh0ID0gKmpz
Q2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJEZXByZWNh
dGVkIGF0dGVtcHQgdG8gc2V0IHByb3BlcnR5ICciLCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5v
bi0iLCBpbnRlcmZhY2VOYW1lLCAiIG9iamVjdC4iKSk7Ci19Ci0KLXZvaWQgdGhyb3dOb3RTdXBw
b3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUp
Ci17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24o
JnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9F
UlIpKTsKLX0KLQotdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAg
ICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyht
ZXNzYWdlKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNl
cHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsKLX0KLQot
dm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBBU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpKTsKLSAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKLSAg
ICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRl
LCBJTlZBTElEX1NUQVRFX0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsKLX0KLQotdm9pZCB0aHJvd1Nl
Y3VyaXR5RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24o
KSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9u
KCZzdGF0ZSwgU0VDVVJJVFlfRVJSLCBtZXNzYWdlKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFs
dWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIq
IGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVzKQotewotICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBh
cmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rp
b25OYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIm9uZSBvZjogIik7Ci0gICAgYnVp
bGRlci5hcHBlbmQoZXhwZWN0ZWRWYWx1ZXMpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpT
VmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25z
dCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBw
ZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBp
bnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
YSBmdW5jdGlvbiIpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUs
IGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1
bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2Nv
cGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29u
c3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
Ci0gICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1l
bnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJhbiBpbnN0YW5jZSBvZiAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChl
eHBlY3RlZFR5cGUpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUs
IGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAg
IHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIEFycmF5
IGVsZW1lbnQgdHlwZSIpKTsKLX0KLQotdm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVj
dGVkVHlwZSkKLXsKLSAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmco
IlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgYXR0cmlidXRlIG11
c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIiwgZXhwZWN0ZWRUeXBlKSk7Ci19Ci0KLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0
IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCi17Ci0gICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiTWVtYmVy
ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGRpY3Rpb25hcnlOYW1lKTsKLSAgICBidWlsZGVyLmFw
cGVuZCgnLicpOwotICAgIGJ1aWxkZXIuYXBwZW5kKG1lbWJlck5hbWUpOwotICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICIp
OwotICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVHlwZSk7Ci0gICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKLX0KLQotSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZh
aWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKQotewotICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
JnN0YXRlLCBzY29wZSwgY3JlYXRlUmVmZXJlbmNlRXJyb3IoJnN0YXRlLCBtYWtlU3RyaW5nKGlu
dGVyZmFjZU5hbWUsICIgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBleGVjdXRpb24gY29udGV4dCBp
cyB1bmF2YWlsYWJsZSIpKSk7Ci19Ci0KLXZvaWQgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgdGhyb3dU
eXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlZhbHVlIGlzIG5vdCBhIHNlcXVl
bmNlIikpOwotfQotCi12b2lkIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSwgQVNDSUlMaXRlcmFsKCJUaGUgcHJvdmlkZWQgdmFsdWUgaXMgbm9uLWZpbml0ZSIp
KTsKLX0KLQotU3RyaW5nIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgcmV0dXJuIG1h
a2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgZ2V0
dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpOwot
fQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93R2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICByZXR1cm4gdGhyb3dWTVR5
cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZh
Y2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0
UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewotICAgIHJl
dHVybiBjcmVhdGVSZWplY3RlZFByb21pc2VXaXRoVHlwZUVycm9yKHN0YXRlLCBtYWtlR2V0dGVy
VHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7Ci19Ci0KLWJv
b2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRy
aWJ1dGVOYW1lKQotewotICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVN0cmlu
ZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcuJywgYXR0cmlidXRlTmFtZSwgIiBzZXR0ZXIgY2Fu
IG9ubHkgYmUgdXNlZCBvbiBpbnN0YW5jZXMgb2YgIiwgaW50ZXJmYWNlTmFtZSkpOwotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgcmV0
dXJuIG1ha2VTdHJpbmcoIkNhbiBvbmx5IGNhbGwgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBmdW5j
dGlvbk5hbWUsICIgb24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpOwotfQotCi1FbmNv
ZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgcmV0dXJuIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29w
ZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSkp
OwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJv
cihEZWZlcnJlZFByb21pc2UmIHByb21pc2UsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIG1ldGhvZE5hbWUpCi17Ci0gICAgcHJvbWlzZS5yZWplY3QoVHlwZUVycm9yLCBt
YWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgbWV0aG9kTmFtZSkpOwotICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkK
LXsKLSAgICByZXR1cm4gY3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihzdGF0ZSwg
bWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKLX0K
LQotdm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYgZnVuY3Rp
b24pCi17Ci0gICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBKU0M6OkNhbGxUeXBlIGNh
bGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YSgmZnVuY3Rpb24sIGNhbGxEYXRhKTsKLSAgICBBU1NF
UlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotCi0gICAgSlNDOjpNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmd1bWVudHM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLmFy
Z3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHN0YXRlLnVuY2hl
Y2tlZEFyZ3VtZW50KGkpKTsKLSAgICBKU0M6OmNhbGwoJnN0YXRlLCAmZnVuY3Rpb24sIGNhbGxU
eXBlLCBjYWxsRGF0YSwgJnRoaXNPYmplY3QsIGFyZ3VtZW50cyk7Ci19Ci0KLXZvaWQgRE9NQ29u
c3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqIGNlbGws
IEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCo+KGNlbGwpOwotICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENo
aWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsKLX0KLQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgY2FsbFRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDb25z
dHJ1Y3RvciByZXF1aXJlcyAnbmV3JyBvcGVyYXRvciIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKTsKLX0KLQotQ2FsbFR5cGUgRE9NQ29uc3RydWN0b3JPYmplY3Q6Omdl
dENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKLXsKLSAgICBjYWxsRGF0YS5u
YXRpdmUuZnVuY3Rpb24gPSBjYWxsVGhyb3dUeXBlRXJyb3I7Ci0gICAgcmV0dXJuIENhbGxUeXBl
OjpIb3N0OwotfQotCi12b2lkIHRocm93RE9NU3ludGF4RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2Vw
dGlvbigmc3RhdGUsIFNZTlRBWF9FUlIpKTsKLX0KLQotdm9pZCB0aHJvd0RhdGFDbG9uZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICBB
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNj
b3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBEQVRBX0NMT05FX0VSUikpOwotfQotCi12
b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRo
cm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElO
REVYX1NJWkVfRVJSKSk7Ci19Ci0KLXZvaWQgdGhyb3dUeXBlTWlzbWF0Y2hFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgQVNTRVJUKCFz
Y29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3Jl
YXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgVFlQRV9NSVNNQVRDSF9FUlIpKTsKLX0KLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
cmFwcGVyQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVdyYXBwZXJDYWNoZS5oCShyZXZpc2lvbiAyMTEzNTMpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOjIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
MjUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0
ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiwgMjAwOC0yMDA5LCAyMDEz
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAxMiBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTMgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxk
LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgi
CisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIu
aCIKKyNpbmNsdWRlICJKU0R5bmFtaWNEb3duY2FzdC5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBw
YWJsZS5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCIKKyNpbmNsdWRlICJX
ZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1
ZGUgPGhlYXAvSGVhcElubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5l
cy5oPgorI2luY2x1ZGUgPGhlYXAvV2Vhay5oPgorI2luY2x1ZGUgPGhlYXAvV2Vha0lubGluZXMu
aD4KKyNpbmNsdWRlIDxydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25z
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0Fy
cmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmpl
Y3RJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9Mb29rdXAuaD4KKyNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9y
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVu
dGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMu
aD4KKyNpbmNsdWRlIDxydW50aW1lL1dyaXRlQmFycmllci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworLy8gRklYTUU6IFdlIGNvdWxkIG1ha2Ug
dGhpcyBmaWxlIGEgbG90IGVhc2llciB0byByZWFkIGJ5IHB1dHRpbmcgYWxsIGZ1bmN0aW9uIGRl
Y2xhcmF0aW9ucyBhdCB0aGUgdG9wLAorLy8gYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zIGJlbG93
LCBldmVuIGZvciB0ZW1wbGF0ZSBhbmQgaW5saW5lIGZ1bmN0aW9ucy4KKworbmFtZXNwYWNlIEpT
QyB7CitjbGFzcyBKU0Z1bmN0aW9uOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENhY2hlZFNjcmlwdDsKK2NsYXNzIERlZmVycmVkUHJvbWlzZTsKK2NsYXNzIERPTVdpbmRvdzsK
K2NsYXNzIEZyYW1lOworY2xhc3MgVVJMOworY2xhc3MgTm9kZTsKKworc3RydWN0IEV4Y2VwdGlv
bkRldGFpbHMgeworICAgIFN0cmluZyBtZXNzYWdlOworICAgIGludCBsaW5lTnVtYmVyIHsgMCB9
OworICAgIGludCBjb2x1bW5OdW1iZXIgeyAwIH07CisgICAgU3RyaW5nIHNvdXJjZVVSTDsKK307
CisKKy8vIEJhc2UgY2xhc3MgZm9yIGFsbCBjb25zdHJ1Y3RvciBvYmplY3RzIGluIHRoZSBKU0Mg
YmluZGluZ3MuCitjbGFzcyBET01Db25zdHJ1Y3Rvck9iamVjdCA6IHB1YmxpYyBKU0RPTU9iamVj
dCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0RPTU9iamVjdCBCYXNlOworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlND
OjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6OkltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFu
Y2UgfCBKU0M6OlR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YTsKKyAgICBzdGF0aWMgSlNDOjpT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCos
IEpTQzo6SlNWYWx1ZSk7CisKK3Byb3RlY3RlZDoKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdChK
U0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKKyAgICBzdGF0aWMgU3RyaW5n
IGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkNhbGxUeXBlIGdl
dENhbGxEYXRhKEpTQ2VsbCosIEpTQzo6Q2FsbERhdGEmKTsKK307CisKK2NsYXNzIERPTUNvbnN0
cnVjdG9ySlNCdWlsdGluT2JqZWN0IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisKK3Byb3RlY3Rl
ZDoKKyAgICBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSosIEpT
RE9NR2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpT
Q2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKworICAgIEpTQzo6SlNGdW5jdGlvbiogaW5pdGlh
bGl6ZUZ1bmN0aW9uKCk7CisgICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYs
IEpTQzo6SlNGdW5jdGlvbiYpOworCitwcml2YXRlOgorICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpT
Qzo6SlNGdW5jdGlvbj4gbV9pbml0aWFsaXplRnVuY3Rpb247Cit9OworCitET01XaW5kb3cmIGNh
bGxlckRPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworRE9NV2luZG93JiBhY3RpdmVET01XaW5k
b3coSlNDOjpFeGVjU3RhdGUqKTsKK0RPTVdpbmRvdyYgZmlyc3RET01XaW5kb3coSlNDOjpFeGVj
U3RhdGUqKTsKKworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZXBvcnREZXBy
ZWNhdGVkR2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVw
b3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CisKK3ZvaWQgdGhyb3dBdHRy
aWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBjaGFy
KiBleHBlY3RlZFR5cGUpOworV0VCQ09SRV9FWFBPUlQgYm9vbCB0aHJvd1NldHRlclR5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFj
ZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworCit2b2lkIHRocm93QXJyYXlFbGVt
ZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRo
cm93RGF0YUNsb25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKK3Zv
aWQgdGhyb3dET01TeW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYp
OyAvLyBOb3QgdGhlIHNhbWUgYXMgYSBKYXZhU2NyaXB0IHN5bnRheCBlcnJvci4KK3ZvaWQgdGhy
b3dJbmRleFNpemVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9p
ZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
JiwgY29uc3QgY2hhciogbWVzc2FnZSk7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHRocm93Tm9uRmlu
aXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRo
cm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsK
K3ZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwordm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwor
V0VCQ09SRV9FWFBPUlQgdm9pZCB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKKworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJn
dW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRWYWx1ZXMpOworSlNDOjpFbmNvZGVk
SlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFy
Z3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJv
d0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5z
aWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3Qg
Y2hhciogZXhwZWN0ZWRUeXBlKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUg
dGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1l
LCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0Nv
bnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKTsKKwor
U3RyaW5nIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworU3RyaW5nIG1ha2VUaGlzVHlwZUVycm9y
TWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKTsKKworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5
cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworV0VCQ09SRV9FWFBPUlQg
SlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUpOworCitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVj
dFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitXRUJDT1JFX0VYUE9S
VCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZl
cnJlZFByb21pc2UmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBvcGVy
YXRpb25OYW1lKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJv
bWlzZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7CisKK1dFQkNPUkVfRVhQT1JUIEpT
Qzo6U3RydWN0dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmLCBj
b25zdCBKU0M6OkNsYXNzSW5mbyopOworV0VCQ09SRV9FWFBPUlQgSlNDOjpTdHJ1Y3R1cmUqIGNh
Y2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpTdHJ1Y3R1cmUqLCBjb25z
dCBKU0M6OkNsYXNzSW5mbyopOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpT
Qzo6U3RydWN0dXJlKiBnZXRET01TdHJ1Y3R1cmUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0
Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6U3RydWN0dXJlKiBkZXBy
ZWNhdGVkR2V0RE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRlKik7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldERPTVByb3RvdHlwZShKU0M6OlZNJiwg
SlNDOjpKU0dsb2JhbE9iamVjdCopOworCit2b2lkIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJn
dW1lbnRzKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgSlNDOjpK
U0Z1bmN0aW9uJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IEpTQzo6RW5jb2RlZEpT
VmFsdWUgY3JlYXRlSlNCdWlsdGluKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU0Z1bmN0aW9uJiBp
bml0aWFsaXplRnVuY3Rpb24sIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKK0pTQzo6V2Vha0hhbmRs
ZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciop
Owordm9pZCogd3JhcHBlcktleShKU0M6OkFycmF5QnVmZmVyKik7CisKK0pTRE9NT2JqZWN0KiBn
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqKTsKK0pTRE9NT2Jq
ZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBw
YWJsZSopOworSlNDOjpKU0FycmF5QnVmZmVyKiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdy
YXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKKworYm9vbCBzZXRJbmxpbmVDYWNoZWRX
cmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCosIEpTQzo6V2Vha0hh
bmRsZU93bmVyKik7Citib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxk
JiwgU2NyaXB0V3JhcHBhYmxlKiwgSlNET01PYmplY3QqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRs
ZU93bmVyKiB3cmFwcGVyT3duZXIpOworYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdy
YXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqLCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBw
ZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpOworCitib29sIGNsZWFySW5s
aW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqKTsK
K2Jvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdy
YXBwYWJsZSosIEpTRE9NT2JqZWN0KiB3cmFwcGVyKTsKK2Jvb2wgY2xlYXJJbmxpbmVDYWNoZWRX
cmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqLCBKU0M6OkpTQXJyYXlC
dWZmZXIqIHdyYXBwZXIpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gSlNDOjpKU09i
amVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyYpOwordGVt
cGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRX
cmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFJlZjxET01DbGFzcz4mIG9iamVjdCkgeyBy
ZXR1cm4gZ2V0Q2FjaGVkV3JhcHBlcih3b3JsZCwgb2JqZWN0LmdldCgpKTsgfQordGVtcGxhdGU8
dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gdm9pZCBjYWNoZVdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MqLCBXcmFwcGVyQ2xhc3MqKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IHZvaWQgdW5jYWNoZVdy
YXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MqLCBXcmFwcGVyQ2xhc3MqKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNE
T01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3Rk
Ojppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZl
cnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlOwordGVtcGxhdGU8dHlw
ZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2Jh
bE9iamVjdCosIFJlZjxUPiYmKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19z
YW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBET01DbGFzcz4gSlNDOjpKU1ZhbHVlIHdyYXAoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIERPTUNsYXNzJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IEpTQ2xh
c3MmIGNhc3RUaGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUmKTsKKwordm9pZCBhZGRJbXB1cmVQcm9w
ZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmKTsKKworY29uc3QgSlNDOjpIYXNoVGFibGUmIGdldEhh
c2hUYWJsZUZvckdsb2JhbERhdGEoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SGFzaFRhYmxlJiBzdGF0
aWNUYWJsZSk7CisKK1N0cmluZyByZXRyaWV2ZUVycm9yTWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBKU0M6OkNhdGNoU2NvcGUmKTsKK1dF
QkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpK
U1ZhbHVlIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIpOworV0VCQ09SRV9FWFBP
UlQgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbios
IENhY2hlZFNjcmlwdCogPSBudWxscHRyLCBFeGNlcHRpb25EZXRhaWxzKiA9IG51bGxwdHIpOwor
dm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CisKK0pTQzo6SlNW
YWx1ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb24mJik7CitK
U0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgRXhjZXB0aW9u
Q29kZSwgY29uc3QgU3RyaW5nJik7CisKKy8vIENvbnZlcnQgYSBET00gaW1wbGVtZW50YXRpb24g
ZXhjZXB0aW9uIGludG8gYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBpbiB0aGUgZXhlY3V0aW9uIHN0
YXRlLgordm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBFeGNlcHRpb24mJik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHByb3BhZ2F0ZUV4Y2Vw
dGlvblNsb3dQYXRoKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9u
JiYpOworCitKU0M6OkpTVmFsdWUganNTdHJpbmcoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBVUkwm
KTsgLy8gZW1wdHkgaWYgdGhlIFVSTCBpcyBudWxsCisKK0pTQzo6SlNWYWx1ZSBqc1N0cmluZ09y
VW5kZWZpbmVkKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7IC8vIHVuZGVmaW5lZCBp
ZiB0aGUgc3RyaW5nIGlzIG51bGwKK0pTQzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEpT
Qzo6RXhlY1N0YXRlKiwgY29uc3QgVVJMJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgVVJMIGlzIG51
bGwKKworLy8gU2VlIEphdmFTY3JpcHRDb3JlIGZvciBleHBsYW5hdGlvbjogU2hvdWxkIGJlIHVz
ZWQgZm9yIGFueSBzdHJpbmcgdGhhdCBpcyBhbHJlYWR5IG93bmVkIGJ5IGFub3RoZXIKKy8vIG9i
amVjdCwgdG8gbGV0IHRoZSBlbmdpbmUga25vdyB0aGF0IGNvbGxlY3RpbmcgdGhlIEpTU3RyaW5n
IHdyYXBwZXIgaXMgdW5saWtlbHkgdG8gc2F2ZSBtZW1vcnkuCitKU0M6OkpTVmFsdWUganNPd25l
ZFN0cmluZ09yTnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOworCitTdHJpbmcg
cHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOworCitBdG9taWNTdHJpbmcg
cHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOworCitXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9CeXRl
U3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIFN0
cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpT
Qzo6SlNWYWx1ZSwgSlNDOjpFeGVjU3RhdGUqLCBib29sJiBva2F5KTsKKworLy8gVGhlIGZvbGxv
d2luZyBmdW5jdGlvbnMgY29udmVydCB2YWx1ZXMgdG8gaW50ZWdlcnMgYXMgcGVyIHRoZSBXZWJJ
REwgc3BlY2lmaWNhdGlvbi4KKy8vIFRoZSBjb252ZXJzaW9uIGZhaWxzIGlmIHRoZSB2YWx1ZSBj
YW5ub3QgYmUgY29udmVydGVkIHRvIGEgbnVtYmVyIG9yLCBpZiBFbmZvcmNlUmFuZ2UgaXMgc3Bl
Y2lmaWVkLAorLy8gdGhlIHZhbHVlIGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSBkZXN0aW5h
dGlvbiBpbnRlZ2VyIHR5cGUuCisKK1dFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDhFbmZvcmNl
UmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWlu
dDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
K1dFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkVuZm9y
Y2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBp
bnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OworV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0RW5m
b3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JU
IHVpbnQ2NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKKworV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OENsYW1wKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9J
bnQxNkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JU
IHVpbnQxNl90IHRvVUludDE2Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
V0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgdG9VSW50MzJDbGFtcChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjRD
bGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50
NjRfdCB0b1VJbnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworV0VC
Q09SRV9FWFBPUlQgaW50OF90IHRvSW50OChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
CitXRUJDT1JFX0VYUE9SVCB1aW50OF90IHRvVUludDgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0
b1VJbnQ2NChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK0pTQzo6SlNWYWx1ZSBq
c0RhdGUoSlNDOjpFeGVjU3RhdGUqLCBkb3VibGUgdmFsdWUpOworCisvLyBOYU4gaWYgdGhlIHZh
bHVlIGNhbid0IGJlIGNvbnZlcnRlZCB0byBhIGRhdGUuCitkb3VibGUgdmFsdWVUb0RhdGUoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOworCisvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFz
c2VkIG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBX
ZWJJREwgc3BlYy4KK0pTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSwgdW5zaWduZWQmIGxlbmd0aCk7CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyJik7CitK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OkFycmF5QnVmZmVyVmlldyYpOworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXIqKTsKK0pTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZm
ZXJWaWV3Kik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpOwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCosIFJlZlB0cjxUPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBWZWN0b3I8VD4mKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBWZWN0b3I8UmVmUHRyPFQ+PiYpOworSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6
UHJpdmF0ZU5hbWUmKTsKKworSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2Jh
bE9iamVjdCYsIGNvbnN0IFQmKTsKK0pTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpF
eGVjU3RhdGUmKTsKKworUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hh
cmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6
SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOworUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDE2QXJyYXko
SlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Bvc3Np
Ymx5U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6
OlVpbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpT
VmFsdWUpOworUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlTaGFyZWRV
aW50OENsYW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVp
bnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQzMkFy
cmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0
b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVm
UHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOworCitSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5z
aGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlND
OjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
CitSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiwg
SlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFy
cmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9V
bnNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpV
aW50OENsYW1wZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBK
U0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvVW5zaGFyZWRVaW50MTZB
cnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0
b1Vuc2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlND
OjpGbG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSk7CitSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXko
SlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IEpTVHlwZT4gVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworZW51bSBTZWN1cml0eVJlcG9ydGluZ09w
dGlvbiB7IERvTm90UmVwb3J0U2VjdXJpdHlFcnJvciwgTG9nU2VjdXJpdHlFcnJvciwgVGhyb3dT
ZWN1cml0eUVycm9yIH07CituYW1lc3BhY2UgQmluZGluZ1NlY3VyaXR5IHsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIFQm
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6
OkV4ZWNTdGF0ZSYsIFQqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNlcHRpb25PcjxU
Kj4gY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb25PcjxUKj4m
Jik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJp
dHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uT3I8VCY+JiYpOworICAgIGJvb2wg
c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSosIERPTVdpbmRvdyYs
IFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7CisgICAgYm9vbCBz
aG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlJiwgRE9NV2luZG93Jiwg
U3RyaW5nJiBtZXNzYWdlKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6
OkV4ZWNTdGF0ZSosIEZyYW1lKiwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1cml0
eUVycm9yKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0
ZSYsIEZyYW1lJiwgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNz
VG9Ob2RlKEpTQzo6RXhlY1N0YXRlJiwgTm9kZSopOworfTsKKwordm9pZCBwcmludEVycm9yTWVz
c2FnZUZvckZyYW1lKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworU3RyaW5nIHBy
b3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKK0F0b21pY1N0cmluZyBwcm9w
ZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7CisKK3RlbXBsYXRlPEpT
Qzo6TmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9uQ2Fj
aGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCisKK2VudW0gY2xhc3MgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3IgeyBUaHJvdywgUmV0dXJuRWFybHksIFJlamVjdFByb21pc2UsIEFzc2VydCB9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPgorc3RydWN0IEJpbmRpbmdDYWxsZXIgeworICAg
IHVzaW5nIEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9uID0gYm9vbChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Q2xhc3MmLCBKU0M6OkpTVmFsdWUsIEpTQzo6VGhyb3dTY29wZSYpOworICAgIHVzaW5nIEF0dHJp
YnV0ZUdldHRlckZ1bmN0aW9uID0gSlNDOjpKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgSlNDbGFz
cyYsIEpTQzo6VGhyb3dTY29wZSYpOworICAgIHVzaW5nIE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9u
ID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBKU0M6OlRo
cm93U2NvcGUmKTsKKyAgICB1c2luZyBQcm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBK
U0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDbGFzcyosIFJlZjxEZWZlcnJl
ZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOworCisgICAgc3RhdGljIEpTQ2xhc3MqIGNh
c3RGb3JBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKyAg
ICBzdGF0aWMgSlNDbGFzcyogY2FzdEZvck9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYpOworCisg
ICAgdGVtcGxhdGU8UHJvbWlzZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNhbGxl
ciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6UmVqZWN0UHJvbWlzZT4KKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBj
YWxsUHJvbWlzZU9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYgcHJvbWlzZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZv
ck9wZXJhdGlvbigqc3RhdGUpOworICAgICAgICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3I6OkFzc2VydCAmJiBVTkxJS0VMWSghdGhpc09iamVjdCkpCisgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKHByb21pc2UuZ2V0KCks
IEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25OYW1lKTsKKyAgICAgICAgQVNT
RVJUKHRoaXNPYmplY3QpOworICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIEpTQ2xhc3M6OmluZm8oKSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVm
YWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgdG8gdXNlIHJlZmVyZW5jZXMgZm9yIHN0
YXRlIGFuZCB0aGlzT2JqZWN0LgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uQ2FsbGVyKHN0YXRl
LCB0aGlzT2JqZWN0LCBXVEZNb3ZlKHByb21pc2UpLCB0aHJvd1Njb3BlKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTxPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6
OlRocm93PgorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxPcGVyYXRpb24oSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKHN0YXRlKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0
Rm9yT3BlcmF0aW9uKCpzdGF0ZSk7CisgICAgICAgIGlmIChzaG91bGRUaHJvdyAhPSBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0ICYmIFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgeworICAg
ICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJv
dykKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgdGhy
b3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOworICAg
ICAgICAgICAgLy8gRm9yIGN1c3RvbSBwcm9taXNlLXJldHVybmluZyBvcGVyYXRpb25zCisgICAg
ICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKCpzdGF0ZSwgSlND
bGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOworICAgICAgICB9CisgICAg
ICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKKyAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZvKCkpOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2RlIHRvIHVzZSByZWZlcmVuY2Vz
IGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkNhbGxl
cihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
QXR0cmlidXRlU2V0dGVyRnVuY3Rpb24gc2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBz
aG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0aWMg
Ym9vbCBzZXRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1Zh
bHVlIHRoaXNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGNvbnN0IGNo
YXIqIGF0dHJpYnV0ZU5hbWUpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhdGUpOworICAgICAg
ICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAg
ICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JBdHRyaWJ1dGUoKnN0YXRlLCB0aGlzVmFs
dWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3QpKQorICAgICAgICAgICAgcmV0
dXJuIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpID8gdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNs
YXNzTmFtZSwgYXR0cmlidXRlTmFtZSkgOiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHNldHRlcigq
c3RhdGUsICp0aGlzT2JqZWN0LCBKU0M6OkpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0
aHJvd1Njb3BlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlv
biBnZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3I6OlRocm93PgorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGF0
dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhpc1Zh
bHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0
YXRlKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0
ZS0+dm0oKSk7CisgICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yQXR0cmlidXRlKCpz
dGF0ZSwgdGhpc1ZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgewor
ICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpU
aHJvdykKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSk7
CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6
OlJlamVjdFByb21pc2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRo
R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJp
YnV0ZU5hbWUpOworICAgICAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6
anNVbmRlZmluZWQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6
ZW5jb2RlKGdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7CisgICAgfQor
fTsKKworLy8gRXhjZXB0aW9uT3IgaGFuZGxpbmcuCit2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYpOwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBK
U0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+JiYpOwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpF
eGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlv
bk9yPFQ+JiYgdmFsdWUpOworCisvLyBJbmxpbmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0ZSBkZWZp
bml0aW9ucy4KKworaW5saW5lIEpTQzo6U3RydWN0dXJlKiBET01Db25zdHJ1Y3Rvck9iamVjdDo6
Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIEpTQzo6U3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpT
Qzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitpbmxpbmUgRE9N
Q29uc3RydWN0b3JPYmplY3Q6OkRPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgOiBKU0RPTU9i
amVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3sKK30KKworaW5saW5lIFN0cmluZyBET01D
b25zdHJ1Y3Rvck9iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KikKK3sKKyAgICByZXR1
cm4gQVNDSUlMaXRlcmFsKCJGdW5jdGlvbiIpOworfQorCitpbmxpbmUgRE9NQ29uc3RydWN0b3JK
U0J1aWx0aW5PYmplY3Q6OkRPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6U3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgOiBE
T01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3sKK30KKworaW5s
aW5lIEpTQzo6SlNGdW5jdGlvbiogRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OmluaXRp
YWxpemVGdW5jdGlvbigpCit7CisgICAgcmV0dXJuIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLmdldCgp
OworfQorCitpbmxpbmUgdm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6c2V0SW5p
dGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mIHZtLCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQor
eworICAgIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLnNldCh2bSwgdGhpcywgJmZ1bmN0aW9uKTsKK30K
KworaW5saW5lIEpTRE9NR2xvYmFsT2JqZWN0KiBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJv
dG90eXBlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIC8vIEZJWE1FOiBDYWxsZXJzIHRv
IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzaW5nIHRoZSBnbG9iYWwgb2JqZWN0CisgICAgLy8g
ZnJvbSB3aGljaCB0aGUgb2JqZWN0IGlzIGJlaW5nIGNyZWF0ZWQsIGluc3RlYWQgb2YgYXNzdW1p
bmcgdGhlIGxleGljYWwgb25lLgorICAgIC8vIGUuZy4gc3ViZnJhbWUuZG9jdW1lbnQuYm9keSBz
aG91bGQgdXNlIHRoZSBzdWJmcmFtZSdzIGdsb2JhbCBvYmplY3QsIG5vdCB0aGUgbGV4aWNhbCBv
bmUuCisgICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNz
PiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNE
T01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBpZiAoSlNDOjpTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGdldENhY2hlZERPTVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIFdyYXBwZXJD
bGFzczo6aW5mbygpKSkKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICByZXR1cm4gY2Fj
aGVET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVN0cnVjdHVy
ZSh2bSwgJmdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVQcm90b3R5cGUodm0sICZn
bG9iYWxPYmplY3QpKSwgV3JhcHBlckNsYXNzOjppbmZvKCkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERP
TVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBm
dW5jdGlvbiBpcyB3cm9uZy4gSXQgdXNlcyB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdCBmb3IgY3Jl
YXRpbmcgdGhlIHByb3RvdHlwZSBzdHJ1Y3R1cmUuCisgICAgcmV0dXJuIGdldERPTVN0cnVjdHVy
ZTxXcmFwcGVyQ2xhc3M+KGV4ZWMtPnZtKCksICpkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJv
dG90eXBlKGV4ZWMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxp
bmUgSlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTQzo6
SlNPYmplY3QqPihhc09iamVjdChnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPih2bSwgKkpT
Qzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSktPnN0b3JlZFByb3Rv
dHlwZSgpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6OkVu
Y29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQoreworICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQ2xhc3M6OmNyZWF0ZShn
ZXRET01TdHJ1Y3R1cmU8SlNDbGFzcz4oZ2xvYmFsT2JqZWN0LnZtKCksIGdsb2JhbE9iamVjdCks
ICZnbG9iYWxPYmplY3QpOworICAgIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKHN0
YXRlLCAqb2JqZWN0LCBpbml0aWFsaXplRnVuY3Rpb24pOworICAgIHJldHVybiBKU0M6OkpTVmFs
dWU6OmVuY29kZShvYmplY3QpOworfQorCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdy
YXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKikKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKj4od29y
bGQudm0oKS5tX3R5cGVkQXJyYXlDb250cm9sbGVyLmdldCgpKS0+d3JhcHBlck93bmVyKCk7Cit9
CisKK2lubGluZSB2b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCkK
K3sKKyAgICByZXR1cm4gZG9tT2JqZWN0OworfQorCitpbmxpbmUgSlNET01PYmplY3QqIGdldElu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCopIHsgcmV0dXJuIG51bGxw
dHI7IH0KK2lubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxk
Jiwgdm9pZCosIEpTRE9NT2JqZWN0KiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqKSB7IHJldHVybiBm
YWxzZTsgfQoraW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJX
b3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCopIHsgcmV0dXJuIGZhbHNlOyB9CisKK2lubGluZSBK
U0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxk
LCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCkKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9ybWFs
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb21PYmplY3QtPndyYXBw
ZXIoKTsKK30KKworaW5saW5lIEpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVkV3Jh
cHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCit7
CisgICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICByZXR1cm4gYnVmZmVyLT5tX3dyYXBwZXIuZ2V0KCk7Cit9CisKK2lubGluZSBib29sIHNldElu
bGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxl
KiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciog
d3JhcHBlck93bmVyKQoreworICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGRvbU9iamVjdC0+c2V0V3JhcHBlcih3cmFwcGVyLCB3cmFwcGVyT3du
ZXIsICZ3b3JsZCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIHNldElubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciog
ZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93
bmVyKiB3cmFwcGVyT3duZXIpCit7CisgICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgZG9tT2JqZWN0LT5tX3dyYXBwZXIgPSBKU0M6OldlYWs8SlND
OjpKU0FycmF5QnVmZmVyPih3cmFwcGVyLCB3cmFwcGVyT3duZXIsICZ3b3JsZCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01X
cmFwcGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01PYmpl
Y3QqIHdyYXBwZXIpCit7CisgICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgZG9tT2JqZWN0LT5jbGVhcldyYXBwZXIod3JhcHBlcik7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01X
cmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6SlNB
cnJheUJ1ZmZlciogd3JhcHBlcikKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB3ZWFrQ2xlYXIoZG9tT2JqZWN0LT5tX3dyYXBwZXIsIHdy
YXBwZXIpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFz
cz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9
IGdldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsICZkb21PYmplY3QpKQorICAgICAgICByZXR1
cm4gd3JhcHBlcjsKKyAgICByZXR1cm4gd29ybGQubV93cmFwcGVycy5nZXQod3JhcHBlcktleSgm
ZG9tT2JqZWN0KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBX
cmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCit7CisgICAg
SlNDOjpXZWFrSGFuZGxlT3duZXIqIG93bmVyID0gd3JhcHBlck93bmVyKHdvcmxkLCBkb21PYmpl
Y3QpOworICAgIGlmIChzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdy
YXBwZXIsIG93bmVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdlYWtBZGQod29ybGQubV93cmFw
cGVycywgd3JhcHBlcktleShkb21PYmplY3QpLCBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4od3Jh
cHBlciwgb3duZXIsICZ3b3JsZCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywg
dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFw
cGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBw
ZXIpCit7CisgICAgaWYgKGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0
LCB3cmFwcGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdlYWtSZW1vdmUod29ybGQubV93cmFw
cGVycywgd3JhcHBlcktleShkb21PYmplY3QpLCB3cmFwcGVyKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBl
bmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlw
ZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNz
Kj46OnR5cGUKK3sKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSB0eXBlbmFtZSBKU0RPTVdyYXBw
ZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICBBU1NFUlQo
IWdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKTsKKyAg
ICBhdXRvKiBkb21PYmplY3RQdHIgPSBkb21PYmplY3QucHRyKCk7CisgICAgYXV0byogd3JhcHBl
ciA9IFdyYXBwZXJDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGds
b2JhbE9iamVjdC0+dm0oKSwgKmdsb2JhbE9iamVjdCksIGdsb2JhbE9iamVjdCwgV1RGTW92ZShk
b21PYmplY3QpKTsKKyAgICBjYWNoZVdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21P
YmplY3RQdHIsIHdyYXBwZXIpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gaW5saW5lIGF1dG8gY3JlYXRlV3JhcHBlcihK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VD4mJiBkb21PYmplY3QpIC0+IHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwg
dHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNs
YXNzKj46OnR5cGUKK3sKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxET01DbGFzcz4oZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8RE9NQ2xhc3M+KFdURk1vdmUoZG9tT2JqZWN0
KSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGdl
dENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKQorICAgICAg
ICByZXR1cm4gd3JhcHBlcjsKKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xv
YmFsT2JqZWN0LCBSZWY8RE9NQ2xhc3M+KGRvbU9iamVjdCkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUpCit7CisgICAgYXV0byB0aGlzVmFsdWUgPSBzdGF0ZS50aGlzVmFsdWUoKTsKKyAg
ICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0NsYXNzKj4oc3RhdGUudm0o
KSwgdGhpc1ZhbHVlKTsKKyAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CisgICAgcmV0dXJuICpjYXN0
ZWRUaGlzOworfQorCitpbmxpbmUgaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rYXkpCit7CisgICAgZG91Ymxl
IG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgIG9rYXkgPSBzdGQ6OmlzZmluaXRl
KG51bWJlcik7CisgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOworfQorCisvLyBWYWxp
ZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rp
b24gNC4xLjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KK2lubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pT
U2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgdW5zaWdu
ZWQmIGxlbmd0aCkKK3sKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICB0aHJv
d1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgSlNDOjpKU1ZhbHVlIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoJmV4
ZWMsIGV4ZWMucHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgbnVsbHB0cik7CisKKyAgICBpZiAobGVuZ3RoVmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSkgeworICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgbGVuZ3RoID0gbGVuZ3RoVmFsdWUu
dG9VSW50MzIoJmV4ZWMpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIp
OworCisgICAgcmV0dXJuIG9iamVjdDsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpBcnJheUJ1ZmZlciYgYnVmZmVyKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGdldENhY2hl
ZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBidWZmZXIpKQorICAgICAgICByZXR1cm4g
cmVzdWx0OworCisgICAgLy8gVGhlIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSBmdW5jdGlvbiB3aWxs
IHJlZ2lzdGVyIHRoZSB3cmFwcGVyIGluIGZpbmlzaENyZWF0aW9uLgorICAgIHJldHVybiBKU0M6
OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0ZS0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1
ZmZlclN0cnVjdHVyZShidWZmZXIuc2hhcmluZ01vZGUoKSksICZidWZmZXIpOworfQorCitpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3JiB2aWV3KQoreworICAg
IHJldHVybiB2aWV3LndyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCk7Cit9CisKK2lubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgcmV0dXJuIHRvSlMoc3RhdGUs
IGdsb2JhbE9iamVjdCwgKmJ1ZmZlcik7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCit7CisgICAgaWYgKCF2aWV3KQorICAgICAgICBy
ZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCAqdmlldyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgUmVmPFQ+JiYgcHRyKQoreworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
cHRyLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBSZWZQdHI8VD4mJiBwdHIpCit7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBwdHIuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQoreworICAgIEpTQzo6Vk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKworICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4
ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXplKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5z
aXplKCk7ICsraSkgeworICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXSkpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBhcnJheTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBW
ZWN0b3I8UmVmUHRyPFQ+PiYgdmVjdG9yKQoreworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxw
dHIsIHZlY3Rvci5zaXplKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6
SlNWYWx1ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsr
aSkgeworICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIHZlY3RvcltpXS5nZXQoKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBhcnJheTsKK30K
KworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5hbWUmIHByaXZhdGVOYW1lKQoreworICAg
IHJldHVybiBKU0M6OlN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHByaXZhdGVOYW1lLnVpZCgp
KTsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB2YWx1ZSwgZmFsc2UpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFQmIHZhbHVlKQoreworICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVj
dCgmc3RhdGUsIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZSksIGZhbHNlKTsKK30K
KworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlKQoreworICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIEpT
Qzo6anNVbmRlZmluZWQoKSwgdHJ1ZSk7Cit9CisKK2lubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1
ZmZlclZpZXc+IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNh
c3Q8SlNDOjpKU0FycmF5QnVmZmVyVmlldyo+KHZtLCB2YWx1ZSk7CisgICAgaWYgKCF3cmFwcGVy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gd3JhcHBlci0+cG9zc2libHlT
aGFyZWRJbXBsKCk7Cit9CisKK2lubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRv
VW5zaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICBhdXRvIHJlc3VsdCA9IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcodm0s
IHZhbHVlKTsKKyAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPmlzU2hhcmVkKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBSZWZQdHI8
SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlw
ZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlND
OjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBl
ZFZpZXc8SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlND
OjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBl
ZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlND
OjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBl
ZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlND
OjpVaW50OENsYW1wZWRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNo
YXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7
IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQx
NkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Q
b3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1
ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVp
bnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6
dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvUG9zc2libHlTaGFy
ZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
SlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+
KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2li
bHlTaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFk
YXB0b3I+KHZtLCB2YWx1ZSk7IH0KKworaW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9V
bnNoYXJlZEludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0sIHZh
bHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNo
YXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5s
aW5lIFJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5
cGVkVmlldzxKU0M6OkludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxK
U0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OlVpbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xh
bXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpT
Qzo6VWludDhDbGFtcGVkQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6
OlVpbnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6
VWludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFy
cmF5PiB0b1Vuc2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDMyQWRh
cHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9V
bnNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4o
dm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJl
ZEZsb2F0NjRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZh
bHVlKTsgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1Q+IGlubGluZSBWZWN0
b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQoreworICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIXZhbHVlLmlzT2Jq
ZWN0KCkpIHsKKyAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFZlY3RvcjxSZWY8VD4+IHJlc3VsdDsK
KyAgICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpWTSYg
dm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmIChq
c1ZhbHVlLmluaGVyaXRzKHZtLCBKU1Q6OmluZm8oKSkpIHsKKyAgICAgICAgICAgIGF1dG8qIG9i
amVjdCA9IEpTVDo6dG9XcmFwcGVkKHZtLCBqc1ZhbHVlKTsKKyAgICAgICAgICAgIEFTU0VSVChv
YmplY3QpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqb2JqZWN0KTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcigqc3RhdGUsIHNjb3Bl
KTsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgU3RyaW5nIHByb3Bl
cnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBB
U1NFUlQoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKTsKKyAgICByZXR1cm4gcHJvcGVydHlOYW1l
LnVpZCgpID8gcHJvcGVydHlOYW1lLnVpZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsK
K30KKworaW5saW5lIEF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6
OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIEF0b21pY1N0cmluZyhw
cm9wZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlkKCkgOiBwcm9wZXJ0eU5hbWUucHVi
bGljTmFtZSgpKTsKK30KKwordGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5j
dGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVu
Y3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpT
Qzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSlNDOjpKU1ZhbHVl
OjplbmNvZGUoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBsZW5ndGgsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5hdGl2
ZUZ1bmN0aW9uKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24o
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2Vw
dGlvbiYmIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKHN0YXRlLCB0aHJv
d1Njb3BlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpOworfQorCitpbmxpbmUgdm9pZCBwcm9wYWdhdGVF
eGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2Nv
cGUsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVl
Lmhhc0V4Y2VwdGlvbigpKSkKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJv
d1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUs
IEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4
Y2VwdGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2Nv
cGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJl
dHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlv
bk9yPFQ+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigp
KSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVl
LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorICAgIHJl
dHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFz
ZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmlu
ZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IFQmIG5vZGUpCit7CisgICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCAm
bm9kZSkgPyAmbm9kZSA6IG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBUKiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgVCogbm9kZSkKK3sKKyAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUo
c3RhdGUsIG5vZGUpID8gbm9kZSA6IG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9y
Tm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQqPiYmIHZhbHVlKQorewor
ICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVh
c2VFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIHZh
bHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIEV4Y2VwdGlvbk9yPFQqPiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2Rl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uT3I8VCY+JiYgdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlLmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gdmFsdWUucmVsZWFzZUV4
Y2VwdGlvbigpOworICAgIHJldHVybiBjaGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgdmFsdWUu
cmVsZWFzZVJldHVyblZhbHVlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
aApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdyYXBwZXJDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmgJKHJldmlzaW9uIDIxMTM1MykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDEyOSArMjQsMjAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRE9NV3Jh
cHBlcldvcmxkLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2Vw
dGlvbk9yLmgiCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0RP
TVdyYXBwZXIuaCIKICNpbmNsdWRlICJKU0R5bmFtaWNEb3duY2FzdC5oIgogI2luY2x1ZGUgIlNj
cmlwdFdyYXBwYWJsZS5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCIKICNp
bmNsdWRlICJXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlIDxjc3RkZGVm
PgotI2luY2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNp
dG9ySW5saW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvV2Vhay5oPgogI2luY2x1ZGUgPGhlYXAvV2Vh
a0lubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JP
cGVyYXRpb25zLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9KU0FycmF5QnVmZmVyLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5l
cy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRp
bWUvSlNPYmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+
Ci0jaW5jbHVkZSA8cnVudGltZS9Mb29rdXAuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdENv
bnN0cnVjdG9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVHlw
ZWRBcnJheXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1dyaXRlQmFycmllci5oPgotI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotLy8gRklYTUU6IFdlIGNv
dWxkIG1ha2UgdGhpcyBmaWxlIGEgbG90IGVhc2llciB0byByZWFkIGJ5IHB1dHRpbmcgYWxsIGZ1
bmN0aW9uIGRlY2xhcmF0aW9ucyBhdCB0aGUgdG9wLAotLy8gYW5kIGZ1bmN0aW9uIGRlZmluaXRp
b25zIGJlbG93LCBldmVuIGZvciB0ZW1wbGF0ZSBhbmQgaW5saW5lIGZ1bmN0aW9ucy4KLQotbmFt
ZXNwYWNlIEpTQyB7Ci1jbGFzcyBKU0Z1bmN0aW9uOwotfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIENhY2hlZFNjcmlwdDsKLWNsYXNzIERlZmVycmVkUHJvbWlzZTsKLWNsYXNzIERP
TVdpbmRvdzsKLWNsYXNzIEZyYW1lOwotY2xhc3MgVVJMOwotY2xhc3MgTm9kZTsKLQotc3RydWN0
IEV4Y2VwdGlvbkRldGFpbHMgewotICAgIFN0cmluZyBtZXNzYWdlOwotICAgIGludCBsaW5lTnVt
YmVyIHsgMCB9OwotICAgIGludCBjb2x1bW5OdW1iZXIgeyAwIH07Ci0gICAgU3RyaW5nIHNvdXJj
ZVVSTDsKLX07Ci0KLS8vIEJhc2UgY2xhc3MgZm9yIGFsbCBjb25zdHJ1Y3RvciBvYmplY3RzIGlu
IHRoZSBKU0MgYmluZGluZ3MuCi1jbGFzcyBET01Db25zdHJ1Y3Rvck9iamVjdCA6IHB1YmxpYyBK
U0RPTU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0RPTU9iamVjdCBCYXNlOwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZs
YWdzIHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6OkltcGxlbWVudHNEZWZhdWx0
SGFzSW5zdGFuY2UgfCBKU0M6OlR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YTsKLSAgICBzdGF0
aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiwgSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6SlNWYWx1ZSk7Ci0KLXByb3RlY3RlZDoKLSAgICBET01Db25zdHJ1Y3Rv
ck9iamVjdChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0KLSAgICBzdGF0
aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkNh
bGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIEpTQzo6Q2FsbERhdGEmKTsKLX07Ci0KLWNsYXNz
IERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0K
LXByb3RlY3RlZDoKLSAgICBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVj
dHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKLQotICAgIEpTQzo6SlNGdW5jdGlv
biogaW5pdGlhbGl6ZUZ1bmN0aW9uKCk7Ci0gICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24o
SlNDOjpWTSYsIEpTQzo6SlNGdW5jdGlvbiYpOwotCi1wcml2YXRlOgotICAgIEpTQzo6V3JpdGVC
YXJyaWVyPEpTQzo6SlNGdW5jdGlvbj4gbV9pbml0aWFsaXplRnVuY3Rpb247Ci19OwotCi1ET01X
aW5kb3cmIGNhbGxlckRPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwotRE9NV2luZG93JiBhY3Rp
dmVET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKLURPTVdpbmRvdyYgZmlyc3RET01XaW5kb3co
SlNDOjpFeGVjU3RhdGUqKTsKLQotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSBy
ZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBjaGFyKiBp
bnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLVdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci0KLXZvaWQg
dGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBj
b25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOwotV0VCQ09SRV9FWFBPUlQgYm9vbCB0aHJvd1NldHRl
clR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIq
IGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotCi12b2lkIHRocm93
QXJyYXlFbGVtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7
Ci12b2lkIHRocm93RGF0YUNsb25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmKTsKLXZvaWQgdGhyb3dET01TeW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYpOyAvLyBOb3QgdGhlIHNhbWUgYXMgYSBKYXZhU2NyaXB0IHN5bnRheCBlcnJvci4K
LXZvaWQgdGhyb3dJbmRleFNpemVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29w
ZSYpOwotdm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVzc2FnZSk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHRo
cm93Tm9uRmluaXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7
Ci12b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmKTsKLXZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwotdm9pZCB0aHJvd1NlY3VyaXR5
RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93VHlwZU1pc21hdGNoRXJy
b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLQotV0VCQ09SRV9FWFBPUlQg
SlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3Qg
Y2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRWYWx1ZXMpOwotSlND
OjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0
IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNW
YWx1ZSB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBj
b25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rp
b25hcnlOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOwotSlNDOjpFbmNvZGVkSlNWYWx1
ZSB0aHJvd0NvbnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3Io
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lKTsKLQotU3RyaW5nIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotU3RyaW5nIG1ha2VUaGlz
VHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBh
dHRyaWJ1dGVOYW1lKTsKLQotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJv
d0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09S
RV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUpOwotCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1Zh
bHVlIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29u
c3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci1XRUJD
T1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVF
cnJvcihEZWZlcnJlZFByb21pc2UmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBvcGVyYXRpb25OYW1lKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUg
cmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7Ci0KIFdFQkNPUkVf
RVhQT1JUIEpTQzo6U3RydWN0dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxP
YmplY3QmLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwogV0VCQ09SRV9FWFBPUlQgSlNDOjpTdHJ1
Y3R1cmUqIGNhY2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpTdHJ1Y3R1
cmUqLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwogCkBAIC0xNTQsMTAgKzQ1LDYgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cgogdGVtcGxhdGU8dHlwZW5hbWUgV3Jh
cHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6
OkV4ZWNTdGF0ZSopOwogdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTT2Jq
ZWN0KiBnZXRET01Qcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKIAot
dm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYpOwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBKU0NsYXNzPiBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUds
b2JhbE9iamVjdCYpOwotCiBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdy
YXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKIHZvaWQqIHdyYXBwZXJLZXkoSlNDOjpB
cnJheUJ1ZmZlciopOwogCkBAIC0xODIsMjUwICs2OSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIERP
TUNsYXNzLCB0eXBlbmFtZSBUPiAKIAogdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6
SlNWYWx1ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBET01DbGFz
cyYpOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0NsYXNzJiBjYXN0VGhpc1ZhbHVl
KEpTQzo6RXhlY1N0YXRlJik7Ci0KLXZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWlj
U3RyaW5nJik7Ci0KLWNvbnN0IEpTQzo6SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVGb3JHbG9iYWxE
YXRhKEpTQzo6Vk0mLCBjb25zdCBKU0M6Okhhc2hUYWJsZSYgc3RhdGljVGFibGUpOwotCi1TdHJp
bmcgcmV0cmlldmVFcnJvck1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlIGV4Y2VwdGlvbiwgSlNDOjpDYXRjaFNjb3BlJik7Ci1XRUJDT1JFX0VYUE9SVCB2b2lk
IHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24s
IENhY2hlZFNjcmlwdCogPSBudWxscHRyKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qLCBDYWNoZWRTY3JpcHQqID0g
bnVsbHB0ciwgRXhjZXB0aW9uRGV0YWlscyogPSBudWxscHRyKTsKLXZvaWQgcmVwb3J0Q3VycmVu
dEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSopOwotCi1KU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uJiYpOwotSlNDOjpKU1ZhbHVlIGNyZWF0
ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUsIGNvbnN0IFN0cmlu
ZyYpOwotCi0vLyBDb252ZXJ0IGEgRE9NIGltcGxlbWVudGF0aW9uIGV4Y2VwdGlvbiBpbnRvIGEg
SmF2YVNjcmlwdCBleGNlcHRpb24gaW4gdGhlIGV4ZWN1dGlvbiBzdGF0ZS4KLXZvaWQgcHJvcGFn
YXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9u
JiYpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKLQotSlNDOjpKU1Zh
bHVlIGpzU3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgVVJMJik7IC8vIGVtcHR5IGlmIHRo
ZSBVUkwgaXMgbnVsbAotCi1KU0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4
ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBu
dWxsCi1KU0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IFVSTCYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIFVSTCBpcyBudWxsCi0KLS8vIFNlZSBKYXZh
U2NyaXB0Q29yZSBmb3IgZXhwbGFuYXRpb246IFNob3VsZCBiZSB1c2VkIGZvciBhbnkgc3RyaW5n
IHRoYXQgaXMgYWxyZWFkeSBvd25lZCBieSBhbm90aGVyCi0vLyBvYmplY3QsIHRvIGxldCB0aGUg
ZW5naW5lIGtub3cgdGhhdCBjb2xsZWN0aW5nIHRoZSBKU1N0cmluZyB3cmFwcGVyIGlzIHVubGlr
ZWx5IHRvIHNhdmUgbWVtb3J5LgotSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlND
OjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKLQotU3RyaW5nIHByb3BlcnR5TmFtZVRvU3Ry
aW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKLQotQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRv
bWljU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKLQotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlk
ZW50aWZpZXJUb0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImKTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRv
VVNWU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci1XRUJD
T1JFX0VYUE9SVCBTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci0KLWludDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUsIEpTQzo6
RXhlY1N0YXRlKiwgYm9vbCYgb2theSk7Ci0KLS8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNv
bnZlcnQgdmFsdWVzIHRvIGludGVnZXJzIGFzIHBlciB0aGUgV2ViSURMIHNwZWNpZmljYXRpb24u
Ci0vLyBUaGUgY29udmVyc2lvbiBmYWlscyBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRl
ZCB0byBhIG51bWJlciBvciwgaWYgRW5mb3JjZVJhbmdlIGlzIHNwZWNpZmllZCwKLS8vIHRoZSB2
YWx1ZSBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlciB0eXBl
LgotCi1XRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OEVuZm9y
Y2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBp
bnQxNl90IHRvSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OwotV0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyRW5m
b3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JU
IHVpbnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2
NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVf
RVhQT1JUIGludDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
Ci1XRUJDT1JFX0VYUE9SVCB1aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZDbGFtcChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQx
NkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGlu
dDMyX3QgdG9JbnQzMkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNP
UkVfRVhQT1JUIHVpbnQzMl90IHRvVUludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0Q2xhbXAoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRDbGFt
cChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIGludDhf
dCB0b0ludDgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQg
dWludDhfdCB0b1VJbnQ4KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVf
RVhQT1JUIGludDE2X3QgdG9JbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1X
RUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjQoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotCi1KU0M6OkpTVmFsdWUganNEYXRlKEpTQzo6RXhlY1N0
YXRlKiwgZG91YmxlIHZhbHVlKTsKLQotLy8gTmFOIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252
ZXJ0ZWQgdG8gYSBkYXRlLgotZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlKTsKLQotLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBz
ZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCi1KU0M6
OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIHVu
c2lnbmVkJiBsZW5ndGgpOwotCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
RE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciYpOwotSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZp
ZXcmKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCBKU0M6OkFycmF5QnVmZmVyKik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyopOwotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCosIFJlZjxUPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWZQdHI8VD4mJik7
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgVmVjdG9yPFQ+Jik7Ci10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJik7Ci0K
LUpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUg
dG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBU
Jik7Ci1KU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJik7Ci0KLVJl
ZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmll
dyhKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3Nz
aWJseVNoYXJlZEludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6
OkludDE2QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpT
VmFsdWUpOwotUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJy
YXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bv
c3NpYmx5U2hhcmVkVWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxK
U0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXko
SlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3Nz
aWJseVNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpT
Qzo6VWludDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlND
OjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZs
b2F0MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkZsb2F0NjRB
cnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKLQotUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJW
aWV3KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vu
c2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50
MTZBcnJheT4gdG9VbnNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1S
ZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlND
OjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5
KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+
IHRvVW5zaGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJl
ZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpT
Qzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFy
cmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0
b1Vuc2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpT
Qzo6RmxvYXQ2NEFycmF5PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpT
VmFsdWUpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1R5cGU+IFZlY3RvcjxS
ZWY8VD4+IHRvUmVmTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
V0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Ci0KLWVudW0gU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9y
dFNlY3VyaXR5RXJyb3IsIExvZ1NlY3VyaXR5RXJyb3IsIFRocm93U2VjdXJpdHlFcnJvciB9Owot
bmFtZXNwYWNlIEJpbmRpbmdTZWN1cml0eSB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCog
Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUJik7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gVCogY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUKik7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlG
b3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uT3I8VCo+JiYpOwotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IEV4Y2VwdGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4
ZWNTdGF0ZSYsIEV4Y2VwdGlvbk9yPFQmPiYmKTsKLSAgICBib29sIHNob3VsZEFsbG93QWNjZXNz
VG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqLCBET01XaW5kb3cmLCBTZWN1cml0eVJlcG9ydGlu
Z09wdGlvbiA9IExvZ1NlY3VyaXR5RXJyb3IpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NU
b0RPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSYsIERPTVdpbmRvdyYsIFN0cmluZyYgbWVzc2FnZSk7
Ci0gICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFt
ZSosIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7Ci0gICAgYm9v
bCBzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUmLCBGcmFtZSYsIFN0cmlu
ZyYgbWVzc2FnZSk7Ci0gICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNT
dGF0ZSYsIE5vZGUqKTsKLX07Ci0KLXZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFt
ZSosIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0KLVN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmlu
ZyhKU0M6OlByb3BlcnR5TmFtZSk7Ci1BdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNT
dHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwotCi10ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9u
LCBpbnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlv
bkdldHRlcihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVy
dHlOYW1lKTsKLQotCi1lbnVtIGNsYXNzIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHsgVGhyb3cs
IFJldHVybkVhcmx5LCBSZWplY3RQcm9taXNlLCBBc3NlcnQgfTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgSlNDbGFzcz4KLXN0cnVjdCBCaW5kaW5nQ2FsbGVyIHsKLSAgICB1c2luZyBBdHRyaWJ1dGVT
ZXR0ZXJGdW5jdGlvbiA9IGJvb2woSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpKU1Zh
bHVlLCBKU0M6OlRocm93U2NvcGUmKTsKLSAgICB1c2luZyBBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlv
biA9IEpTQzo6SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OlRocm93U2Nv
cGUmKTsKLSAgICB1c2luZyBPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpT
VmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAg
dXNpbmcgUHJvbWlzZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1
ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6
OlRocm93U2NvcGUmKTsKLQotICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yQXR0cmlidXRlKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgc3RhdGljIEpTQ2xhc3Mq
IGNhc3RGb3JPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUmKTsKLQotICAgIHRlbXBsYXRlPFByb21p
c2VPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFBy
b21pc2U+Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbFByb21pc2VPcGVyYXRp
b24oSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2Us
IGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpCi0gICAgewotICAgICAgICBBU1NFUlQoc3RhdGUp
OwotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52
bSgpKTsKLSAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRl
KTsKLSAgICAgICAgaWYgKHNob3VsZFRocm93ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpB
c3NlcnQgJiYgVU5MSUtFTFkoIXRoaXNPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVj
dFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihwcm9taXNlLmdldCgpLCBKU0NsYXNzOjppbmZvKCkt
PmNsYXNzTmFtZSwgb3BlcmF0aW9uTmFtZSk7Ci0gICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsK
LSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjpp
bmZvKCkpOwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5n
IGdlbmVyYXRlZCBjb2RlIHRvIHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVj
dC4KLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhpc09iamVjdCwgV1RG
TW92ZShwcm9taXNlKSwgdGhyb3dTY29wZSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8T3BlcmF0
aW9uQ2FsbGVyRnVuY3Rpb24gb3BlcmF0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
ciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KLSAgICBzdGF0
aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxsT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0
ZSk7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUt
PnZtKCkpOwotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3Rh
dGUpOwotICAgICAgICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6
OkFzc2VydCAmJiBVTkxJS0VMWSghdGhpc09iamVjdCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91
bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6
OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25OYW1lKTsKLSAgICAgICAgICAgIC8vIEZvciBj
dXN0b20gcHJvbWlzZS1yZXR1cm5pbmcgb3BlcmF0aW9ucwotICAgICAgICAgICAgcmV0dXJuIHJl
amVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xh
c3NOYW1lLCBvcGVyYXRpb25OYW1lKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQodGhpc09i
amVjdCk7Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlND
bGFzczo6aW5mbygpKTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUg
YmluZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5kIHRo
aXNPYmplY3QuCi0gICAgICAgIHJldHVybiBvcGVyYXRpb25DYWxsZXIoc3RhdGUsIHRoaXNPYmpl
Y3QsIHRocm93U2NvcGUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPEF0dHJpYnV0ZVNldHRlckZ1
bmN0aW9uIHNldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+Ci0gICAgc3RhdGljIGJvb2wgc2V0QXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1l
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBjYXN0Rm9yQXR0cmlidXRlKCpzdGF0ZSwgdGhpc1ZhbHVlKTsKLSAgICAgICAgaWYg
KFVOTElLRUxZKCF0aGlzT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiAoc2hvdWxkVGhyb3cg
PT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93KSA/IHRocm93U2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0
ZU5hbWUpIDogZmFsc2U7Ci0gICAgICAgIHJldHVybiBzZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVj
dCwgSlNDOjpKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdGhyb3dTY29wZSk7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8QXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpU
aHJvdz4KLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBhdHRyaWJ1dGUoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgY2hhciog
YXR0cmlidXRlTmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7
Ci0gICAgICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpIHsKLSAgICAgICAgICAgIGlmIChz
aG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlND
bGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOwotICAgICAgICAgICAgaWYg
KHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlKQot
ICAgICAgICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcigq
c3RhdGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKLSAgICAg
ICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzVW5kZWZpbmVkKCkpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIoKnN0
YXRlLCAqdGhpc09iamVjdCwgdGhyb3dTY29wZSkpOwotICAgIH0KLX07Ci0KLS8vIEV4Y2VwdGlv
bk9yIGhhbmRsaW5nLgotdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25Pcjx2b2lkPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3Qm
LCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01H
bG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKTsK
IAogLy8gSW5saW5lIGZ1bmN0aW9ucyBhbmQgdGVtcGxhdGUgZGVmaW5pdGlvbnMuCiAKLWlubGlu
ZSBKU0M6OlN0cnVjdHVyZSogRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgcHJvdG90eXBlKQotewotICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0
cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKLX0KLQotaW5saW5lIERPTUNvbnN0cnVjdG9yT2JqZWN0
OjpET01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogSlNET01PYmplY3Qoc3RydWN0dXJlLCBn
bG9iYWxPYmplY3QpCi17Ci19Ci0KLWlubGluZSBTdHJpbmcgRE9NQ29uc3RydWN0b3JPYmplY3Q6
OmNsYXNzTmFtZShjb25zdCBKU09iamVjdCopCi17Ci0gICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgi
RnVuY3Rpb24iKTsKLX0KLQotaW5saW5lIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0OjpE
T01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogRE9NQ29uc3RydWN0b3JPYmpl
Y3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLWlubGluZSBKU0M6OkpTRnVuY3Rp
b24qIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojppbml0aWFsaXplRnVuY3Rpb24oKQot
ewotICAgIHJldHVybiBtX2luaXRpYWxpemVGdW5jdGlvbi5nZXQoKTsKLX0KLQotaW5saW5lIHZv
aWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnNldEluaXRpYWxpemVGdW5jdGlvbihK
U0M6OlZNJiB2bSwgSlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAgICBtX2luaXRpYWxp
emVGdW5jdGlvbi5zZXQodm0sIHRoaXMsICZmdW5jdGlvbik7Ci19Ci0KIGlubGluZSBKU0RPTUds
b2JhbE9iamVjdCogZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKIHsKICAgICAvLyBGSVhNRTogQ2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIHNo
b3VsZCBiZSB1c2luZyB0aGUgZ2xvYmFsIG9iamVjdApAQCAtNDUyLDEzICs5OCw2IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEoKICAgICByZXR1cm4gSlNDOjpqc0Nh
c3Q8SlNDOjpKU09iamVjdCo+KGFzT2JqZWN0KGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+
KHZtLCAqSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKS0+c3Rv
cmVkUHJvdG90eXBlKCkpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUgY3JlYXRlSlNCdWlsdGluKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpKU0Z1bmN0aW9uJiBpbml0aWFsaXplRnVuY3Rpb24sIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDbGFzczo6
Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxKU0NsYXNzPihnbG9iYWxPYmplY3Qudm0oKSwgZ2xvYmFs
T2JqZWN0KSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1
bWVudHMoc3RhdGUsICpvYmplY3QsIGluaXRpYWxpemVGdW5jdGlvbik7Ci0gICAgcmV0dXJuIEpT
Qzo6SlNWYWx1ZTo6ZW5jb2RlKG9iamVjdCk7Ci19Ci0KIGlubGluZSBKU0M6OldlYWtIYW5kbGVP
d25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZm
ZXIqKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xs
ZXIqPih3b3JsZC52bSgpLm1fdHlwZWRBcnJheUNvbnRyb2xsZXIuZ2V0KCkpLT53cmFwcGVyT3du
ZXIoKTsKQEAgLTU2NCwyNjIgKzIwMyw0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBp
bmxpbmUgSlNDOjoKICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBSZWY8RE9NQ2xhc3M+KGRvbU9iamVjdCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBK
U0NsYXNzPiBpbmxpbmUgSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUpCi17Ci0gICAgYXV0byB0aGlzVmFsdWUgPSBzdGF0ZS50aGlzVmFsdWUoKTsKLSAgICBhdXRv
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0NsYXNzKj4oc3RhdGUudm0oKSwgdGhp
c1ZhbHVlKTsKLSAgICBBU1NFUlQoY2FzdGVkVGhpcyk7Ci0gICAgcmV0dXJuICpjYXN0ZWRUaGlz
OwotfQotCi1pbmxpbmUgaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rYXkpCi17Ci0gICAgZG91YmxlIG51bWJl
ciA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIG9rYXkgPSBzdGQ6OmlzZmluaXRlKG51bWJl
cik7Ci0gICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOwotfQotCi0vLyBWYWxpZGF0ZXMg
dGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4x
LjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KLWlubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVu
Y2UoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQmIGxl
bmd0aCkKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSB2
YWx1ZS5nZXRPYmplY3QoKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICB0aHJvd1NlcXVl
bmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotCi0gICAgSlNDOjpKU1ZhbHVlIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoJmV4ZWMsIGV4
ZWMucHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7Ci0KLSAgICBpZiAobGVuZ3RoVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkg
ewotICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgbGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9VSW50
MzIoJmV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotCi0g
ICAgcmV0dXJuIG9iamVjdDsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJh
eUJ1ZmZlciYgYnVmZmVyKQotewotICAgIGlmIChhdXRvIHJlc3VsdCA9IGdldENhY2hlZFdyYXBw
ZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBidWZmZXIpKQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotCi0gICAgLy8gVGhlIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSBmdW5jdGlvbiB3aWxsIHJlZ2lz
dGVyIHRoZSB3cmFwcGVyIGluIGZpbmlzaENyZWF0aW9uLgotICAgIHJldHVybiBKU0M6OkpTQXJy
YXlCdWZmZXI6OmNyZWF0ZShzdGF0ZS0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0
cnVjdHVyZShidWZmZXIuc2hhcmluZ01vZGUoKSksICZidWZmZXIpOwotfQotCi1pbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3JiB2aWV3KQotewotICAgIHJldHVy
biB2aWV3LndyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgKmJ1ZmZlcik7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpB
cnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKLSAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqdmll
dyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVm
PFQ+JiYgcHRyKQotewotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdl
dCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWZQdHI8VD4mJiBwdHIpCi17Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBw
dHIuZ2V0KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQotewotICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LQotICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51
bGxwdHIsIHZlY3Rvci5zaXplKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
Qzo6SlNWYWx1ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7
ICsraSkgewotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXSkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8
UmVmUHRyPFQ+PiYgdmVjdG9yKQotewotICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEpT
Qzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZl
Y3Rvci5zaXplKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1
ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgewot
ICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIHZlY3RvcltpXS5nZXQoKSkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsKLX0KLQotaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5hbWUmIHByaXZhdGVOYW1lKQotewotICAgIHJldHVy
biBKU0M6OlN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHByaXZhdGVOYW1lLnVpZCgpKTsKLX0K
LQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
Y3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB2YWx1ZSwgZmFsc2UpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0
IFQmIHZhbHVlKQotewotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3Rh
dGUsIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZSksIGZhbHNlKTsKLX0KLQotaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQot
ewotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIEpTQzo6anNV
bmRlZmluZWQoKSwgdHJ1ZSk7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZp
ZXc+IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNhc3Q8SlND
OjpKU0FycmF5QnVmZmVyVmlldyo+KHZtLCB2YWx1ZSk7Ci0gICAgaWYgKCF3cmFwcGVyKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gd3JhcHBlci0+cG9zc2libHlTaGFyZWRJ
bXBsKCk7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5zaGFy
ZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBhdXRvIHJlc3VsdCA9IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcodm0sIHZhbHVl
KTsKLSAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPmlzU2hhcmVkKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpJ
bnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3
PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQx
NkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQz
MkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50
OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50
OENsYW1wZWRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5h
dGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlu
bGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQxNkFycmF5
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJs
eVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0K
LWlubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQzMkFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3Nz
aWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7
IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9h
dDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0
b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFy
ZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
SlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0b3I+
KHZtLCB2YWx1ZSk7IH0KLQotaW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9VbnNoYXJl
ZEludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6
OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsg
fQotaW5saW5lIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFycmF5KEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5h
dGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJl
ZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBK
U0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmll
dzxKU0M6OkludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVp
bnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4
QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFy
cmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWlu
dDhDbGFtcGVkQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQx
NkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDE2
QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0
b1Vuc2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDMyQWRhcHRvcj4o
dm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJl
ZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0sIHZh
bHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZsb2F0
NjRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRv
VW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVlKTsg
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1Q+IGlubGluZSBWZWN0b3I8UmVm
PFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQotewotICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkp
IHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAg
ICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIFZlY3RvcjxSZWY8VD4+IHJlc3VsdDsKLSAgICBm
b3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmIChqc1ZhbHVl
LmluaGVyaXRzKHZtLCBKU1Q6OmluZm8oKSkpIHsKLSAgICAgICAgICAgIGF1dG8qIG9iamVjdCA9
IEpTVDo6dG9XcmFwcGVkKHZtLCBqc1ZhbHVlKTsKLSAgICAgICAgICAgIEFTU0VSVChvYmplY3Qp
OwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqb2JqZWN0KTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcigqc3RhdGUsIHNjb3BlKTsKLSAg
ICB9KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgU3RyaW5nIHByb3BlcnR5TmFt
ZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICBBU1NFUlQo
IXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKTsKLSAgICByZXR1cm4gcHJvcGVydHlOYW1lLnVpZCgp
ID8gcHJvcGVydHlOYW1lLnVpZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKLX0KLQot
aW5saW5lIEF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIEF0b21pY1N0cmluZyhwcm9wZXJ0
eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlkKCkgOiBwcm9wZXJ0eU5hbWUucHVibGljTmFt
ZSgpKTsKLX0KLQotdGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbiwg
aW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25H
ZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNv
ZGUoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBsZW5ndGgsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5hdGl2ZUZ1bmN0
aW9uKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbiYm
IGV4Y2VwdGlvbikKLXsKLSAgICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKHN0YXRlLCB0aHJvd1Njb3Bl
LCBXVEZNb3ZlKGV4Y2VwdGlvbikpOwotfQotCi1pbmxpbmUgdm9pZCBwcm9wYWdhdGVFeGNlcHRp
b24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4
Y2VwdGlvbk9yPHZvaWQ+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4
Y2VwdGlvbigpKSkKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3Bl
LCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2Vw
dGlvbk9yPFQ+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlv
bigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZh
bHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAg
IHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZh
bHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFQ+
JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewot
ICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVh
c2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHJldHVybiB0
b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVy
blZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1Nl
Y3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQmIG5v
ZGUpCi17Ci0gICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCAmbm9kZSkg
PyAmbm9kZSA6IG51bGxwdHI7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBC
aW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgVCogbm9kZSkKLXsKLSAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUs
IG5vZGUpID8gbm9kZSA6IG51bGxwdHI7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQqPiYmIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVhc2VFeGNl
cHRpb24oKTsKLSAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIHZhbHVlLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEV4
Y2VwdGlvbk9yPFQqPiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uT3I8VCY+JiYgdmFsdWUpCi17Ci0gICAgaWYgKHZh
bHVlLmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gdmFsdWUucmVsZWFzZUV4Y2VwdGlv
bigpOwotICAgIHJldHVybiBjaGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgdmFsdWUucmVsZWFz
ZVJldHVyblZhbHVlKCkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5oCShyZXZp
c2lvbiAyMTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0
Q3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogI2luY2x1ZGUgIkRP
TVdpbmRvdy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZ0NhbGxlci5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDIxMTM5MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
Rm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuaCIKKyNp
bmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNOb2RlQ3VzdG9tLmgiCiAj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSW50
ZXJuYWxGdW5jdGlvbi5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2Nh
dGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNMb2NhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIxMTM5MikKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2
ICsyNCw4IEBACiAjaW5jbHVkZSAiSlNMb2NhdGlvbi5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIKKyNpbmNsdWRlICJKU0RP
TUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tz
LmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNw
cAkocmV2aXNpb24gMjExMzkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRh
dGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkpTTXV0YXRpb25PYnNlcnZlci5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU011dGF0aW9u
Q2FsbGJhY2suaCIKICNpbmNsdWRlICJKU05vZGVDdXN0b20uaCIKICNpbmNsdWRlICJNdXRhdGlv
bk9ic2VydmVyLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFN0YXRl
bWVudEVycm9yQ2FsbGJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFja0N1c3RvbS5jcHAJKHJldmlz
aW9uIDIxMTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMU3RhdGVtZW50
RXJyb3JDYWxsYmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2suaCIKIAorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJK
U1NRTEVycm9yLmgiCiAjaW5jbHVkZSAiSlNTUUxUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTU3RvcmFnZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjExMzkyKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkpTU3RvcmFnZS5oIgogCiAjaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUg
PHJ1bnRpbWUvSWRlbnRpZmllcklubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1Byb3BlcnR5
TmFtZUFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAy
MTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDggQEAKICNpbmNsdWRlICJKU1dvcmtlci5oIgog
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGlu
Zy5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNET01XaW5k
b3dDdXN0b20uaCIKICNpbmNsdWRlICJXb3JrZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTWFBhdGhOU1Jlc29sdmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoTlNSZXNvbHZlckN1c3RvbS5jcHAJKHJldmlz
aW9uIDIxMTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhOU1Jlc29s
dmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUg
IkpTWFBhdGhOU1Jlc29sdmVyLmgiCiAKICNpbmNsdWRlICJKU0N1c3RvbVhQYXRoTlNSZXNvbHZl
ci5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9u
SGFuZGxpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiAyMTEzOTIp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUg
IkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCiAjaW5j
bHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlSW5zdHJ1bWVudGF0aW9uLmgiCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gMjExMzkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJHQ0NvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZ1NlY3VyaXR5Lmgi
CisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NV2lu
ZG93LmgiCiAjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENv
bnRyb2xsZXIuaAkocmV2aXNpb24gMjExMzkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2NyaXB0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMSArNTYsMTIgQEAg
Y2xhc3MgRnJhbWU7CiBjbGFzcyBIVE1MRG9jdW1lbnQ7CiBjbGFzcyBIVE1MUGx1Z0luRWxlbWVu
dDsKIGNsYXNzIExvYWRhYmxlTW9kdWxlU2NyaXB0OwotY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBj
bGFzcyBTY3JpcHRTb3VyY2VDb2RlOworY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBXaWRn
ZXQ7CitzdHJ1Y3QgRXhjZXB0aW9uRGV0YWlsczsKIAotdHlwZWRlZiBIYXNoTWFwPHZvaWQqLCBS
ZWZQdHI8SlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdD4+IFJvb3RPYmplY3RNYXA7Cit1c2luZyBS
b290T2JqZWN0TWFwID0gSGFzaE1hcDx2b2lkKiwgUmVmUHRyPEpTQzo6QmluZGluZ3M6OlJvb3RP
YmplY3Q+PjsKIAogZW51bSBSZWFzb25Gb3JDYWxsaW5nQ2FuRXhlY3V0ZVNjcmlwdHMgewogICAg
IEFib3V0VG9FeGVjdXRlU2NyaXB0LApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMTEzOTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Ny
aXB0R2xvYmFsT2JqZWN0LmgiCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAj
aW5jbHVkZSAiSlNJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0lk
ZW50aWZpZXJJbmxpbmVzLmg+CiAKQEAgLTQ1LDcgKzQ2LDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxP
YmplY3Q6OnNldChFeGVjU3RhdGUmIAogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgYXV0byYgZ2xvYmFsT2Jq
ZWN0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLmxleGljYWxHbG9i
YWxPYmplY3QoKSk7Ci0gICAgZ2xvYmFsT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sIG5hbWUpLCB0b0pTKCZzY3JpcHRTdGF0ZSwgJmdsb2JhbE9iamVjdCwg
dmFsdWUpKTsKKyAgICBnbG9iYWxPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgbmFtZSksIHRvSlM8SURMSW50ZXJmYWNlPEluc3BlY3RvckZyb250ZW5kSG9z
dD4+KHNjcmlwdFN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkgewogICAgICAgICByZXBvcnRFeGNlcHRpb24oJnNjcmlwdFN0
YXRlLCBzY29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cnVjdHVyZWRDbG9uZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RydWN0dXJlZENsb25lLmNwcAkocmV2aXNp
b24gMjExMzkyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RydWN0dXJlZENsb25l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVy
ZWRDbG9uZS5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01F
eGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgog
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDIxMTM5MikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDEzLDYgKzMwMTMsOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgog
ICAgIHB1c2goQGltcGxDb250ZW50SGVhZGVyLCBHZW5lcmF0ZUltcGxlbWVudGF0aW9uQ29udGVu
dEhlYWRlcigkaW50ZXJmYWNlKSk7CiAKICAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTUJpbmRpbmcu
aCJ9ID0gMTsKKyAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTUJpbmRpbmdDYWxsZXIuaCJ9ID0gMTsK
KyAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgifSA9IDE7CisgICAg
JGltcGxJbmNsdWRlc3siSlNET01XcmFwcGVyQ2FjaGUuaCJ9ID0gMTsKICAgICAkaW1wbEluY2x1
ZGVzeyI8d3RmL0dldFB0ci5oPiJ9ID0gMTsKICAgICAkaW1wbEluY2x1ZGVzeyI8cnVudGltZS9Q
cm9wZXJ0eU5hbWVBcnJheS5oPiJ9ID0gMSBpZiAkaW5kZXhlZEdldHRlckZ1bmN0aW9uOwogCkBA
IC0zNjMzLDYgKzM2MzYsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAg
ICAgaWYgKCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NoZWNrU2VjdXJpdHl9ICYm
CiAgICAgICAgICAgICAgICAgISRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvTm90
Q2hlY2tTZWN1cml0eX0gJiYKICAgICAgICAgICAgICAgICAhJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57RG9Ob3RDaGVja1NlY3VyaXR5T25HZXR0ZXJ9KSB7CisgICAgICAgICAgICAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiKTsKICAgICAgICAg
ICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRlLCB0aGlzT2JqZWN0LndyYXBwZWQoKSwg
VGhyb3dTZWN1cml0eUVycm9yKSlcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0z
ODAzLDYgKzM4MDcsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2hl
Y2tTZWN1cml0eX0gJiYgISRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvTm90Q2hl
Y2tTZWN1cml0eX0gJiYgISRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvTm90Q2hl
Y2tTZWN1cml0eU9uU2V0dGVyfSkgeworICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCJKU0RPTUJpbmRpbmdTZWN1cml0eS5oIik7CiAgICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZh
Y2VOYW1lIGVxICJET01XaW5kb3ciKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9N
V2luZG93KCZzdGF0ZSwgdGhpc09iamVjdC53cmFwcGVkKCksIFRocm93U2VjdXJpdHlFcnJvcikp
XG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDA1MSw2ICs0MDU2LDcgQEAgRU5E
CiAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHRo
cm93U2NvcGUpO1xuIik7CiAKICAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Q2hlY2tTZWN1cml0eX0gYW5kICEkZnVuY3Rpb24tPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0RvTm90Q2hlY2tTZWN1cml0eX0pIHsKKyAgICAgICAgICAgICAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6
c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhzdGF0ZSwgY2FzdGVkVGhpcy0+d3JhcHBlZCgp
LCBUaHJvd1NlY3VyaXR5RXJyb3IpKVxuIik7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CkBAIC00NDc3LDYgKzQ0ODMsNyBAQCBzdWIgR2VuZXJhdGVDYWxsV2l0aAogICAgIH0KICAgICBp
ZiAoJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAi
Q2FsbGVyRG9jdW1lbnQiKSkgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJEb2N1bWVudC5oIn0g
PSAxOworICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTVdpbmRvd0Jhc2UuaCJ9ID0gMTsKICAg
ICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIGRvY3VtZW50ID0gY2FsbGVyRE9N
V2luZG93KCRzdGF0ZVBvaW50ZXIpLmRvY3VtZW50KCk7XG4iKTsKICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIGlmICghZG9jdW1lbnQpXG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICByZXR1cm4iIC4gKCRyZXR1cm5WYWx1ZSA/ICIgIiAuICRyZXR1cm5W
YWx1ZSA6ICIiKSAuICI7XG4iKTsKQEAgLTQ0ODgsOSArNDQ5NSwyMSBAQCBzdWIgR2VuZXJhdGVD
YWxsV2l0aAogICAgICAgICAkaW1wbEluY2x1ZGVzeyI8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFj
a0ZhY3RvcnkuaD4ifSA9IDE7CiAgICAgICAgIHB1c2goQGNhbGxXaXRoQXJncywgIldURk1vdmUo
c2NyaXB0QXJndW1lbnRzKSIpOwogICAgIH0KLSAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICJhY3Rp
dmVET01XaW5kb3coJHN0YXRlUG9pbnRlcikiKSBpZiAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRB
dHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJBY3RpdmVXaW5kb3ciKTsKLSAgICBwdXNoKEBj
YWxsV2l0aEFyZ3MsICJmaXJzdERPTVdpbmRvdygkc3RhdGVQb2ludGVyKSIpIGlmICRjb2RlR2Vu
ZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkZpcnN0V2luZG93
Iik7Ci0gICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiY2FsbGVyRE9NV2luZG93KCRzdGF0ZVBvaW50
ZXIpIikgaWYgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxX
aXRoLCAiQ2FsbGVyV2luZG93Iik7CisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0
dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkFjdGl2ZVdpbmRvdyIpKSB7CisgICAgICAgICRp
bXBsSW5jbHVkZXN7IkpTRE9NV2luZG93QmFzZS5oIn0gPSAxOworICAgICAgICBwdXNoKEBjYWxs
V2l0aEFyZ3MsICJhY3RpdmVET01XaW5kb3coJHN0YXRlUG9pbnRlcikiKTsKKyAgICAgICAgCisg
ICAgfQorICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygk
Y2FsbFdpdGgsICJGaXJzdFdpbmRvdyIpKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRE9N
V2luZG93QmFzZS5oIn0gPSAxOworICAgICAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICJmaXJzdERP
TVdpbmRvdygkc3RhdGVQb2ludGVyKSIpOworICAgICAgICAKKyAgICB9CisgICAgaWYgKCRjb2Rl
R2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkNhbGxlcldp
bmRvdyIpKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRE9NV2luZG93QmFzZS5oIn0gPSAx
OworICAgICAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICJjYWxsZXJET01XaW5kb3coJHN0YXRlUG9p
bnRlcikiKTsKKyAgICAgICAgCisgICAgfQogCiAgICAgcmV0dXJuIEBjYWxsV2l0aEFyZ3M7CiB9
CkBAIC00NTk5LDggKzQ2MTgsNiBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAg
ICAgJHF1b3RlZEZ1bmN0aW9uTmFtZSA9ICJudWxscHRyIjsKICAgICB9CiAKLSAgICBBZGRUb0lt
cGxJbmNsdWRlcygiSlNET01CaW5kaW5nLmgiLCAkY29uZGl0aW9uYWwpOwotCiAgICAgbXkgJGFy
Z3VtZW50SW5kZXggPSAwOwogICAgIGZvcmVhY2ggbXkgJGFyZ3VtZW50IChAeyRmdW5jdGlvbi0+
YXJndW1lbnRzfSkgewogICAgICAgICBteSAkdHlwZSA9ICRhcmd1bWVudC0+dHlwZTsKQEAgLTUw
NjQsNiArNTA4MSw3IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250ZW4K
IAogICAgICAgICAgICAgIyBGSVhNRTogV2UgY3VycmVudGx5IGp1c3QgcmVwb3J0IHRoZSBleGNl
cHRpb24uIFdlIHNob3VsZCBwcm9iYWJseSBhZGQgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHRvIGlu
ZGljYXRlIHdoZW4KICAgICAgICAgICAgICMgd2Ugd2FudCB0aGUgZXhjZXB0aW9uIHRvIGJlIHJl
dGhyb3duIGluc3RlYWQuCisgICAgICAgICAgICAkaW5jbHVkZXNSZWYtPnsiSlNET01FeGNlcHRp
b25IYW5kbGluZy5oIn0gPSAxOwogICAgICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAg
aWYgKHJldHVybmVkRXhjZXB0aW9uKVxuIik7CiAgICAgICAgICAgICBwdXNoKEAkY29udGVudFJl
ZiwgIiAgICAgICAgcmVwb3J0RXhjZXB0aW9uKHN0YXRlLCByZXR1cm5lZEV4Y2VwdGlvbik7XG4i
KTsKICAgICAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIHJldHVybiAhcmV0dXJuZWRF
eGNlcHRpb247XG4iKTsKQEAgLTU2MTIsNyArNTYzMCwxMCBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVl
CiAgICAgQWRkVG9JbXBsSW5jbHVkZXNGb3JJRExUeXBlKCR0eXBlLCAkY29uZGl0aW9uYWwpOwog
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUNvbnZlcnQuaCIsICRjb25kaXRpb25hbCk7CiAK
LSAgICAkdmFsdWUgPSAiQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZSgkc3Rh
dGVSZWZlcmVuY2UsICR2YWx1ZSkiIGlmICRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntD
aGVja1NlY3VyaXR5Rm9yTm9kZX07CisgICAgaWYgKCRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0
ZXMtPntDaGVja1NlY3VyaXR5Rm9yTm9kZX0pIHsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiLCAkY29uZGl0aW9uYWwpOworICAgICAgICAkdmFsdWUg
PSAiQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZSgkc3RhdGVSZWZlcmVuY2Us
ICR2YWx1ZSkiOworICAgIH0KIAogICAgIG15ICRJRExUeXBlID0gR2V0SURMVHlwZSgkaW50ZXJm
YWNlLCAkdHlwZSwgJGNvbnRleHQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2Jq
Yy9XZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdl
L29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tCShyZXZpc2lvbiAyMTEzOTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9icmlkZ2Uvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2ltcG9ydCAiQnJpZGdlSlNDLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgor
I2ltcG9ydCAiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIKICNpbXBvcnQgIkpTRE9NV2luZG93Lmgi
CiAjaW1wb3J0ICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2ltcG9ydCAiSlNIVE1MRWxlbWVudC5o
IgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJ
KHJldmlzaW9uIDIxMTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVu
dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklk
aW9tcy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGlu
Z1NlY3VyaXR5LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5o
IgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVmlkZW9FbGVtZW50LmNwcAkocmV2aXNpb24gMjExMzkyKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUxvYWRlci5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjExMzkyKQorKysgU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1
NCw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgogI2luY2x1ZGUgIklu
c3BlY3RvcldvcmtlckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgor
I2luY2x1ZGUgIkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cu
aCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVh
ZEV4ZWNTdGF0ZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyMTEzOTIpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3
IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVu
dGluZ0FnZW50cy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRp
bmdTZWN1cml0eS5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkpT
Tm9kZS5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDIxMTM5
MikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZy
b250ZW5kQ2xpZW50LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2lu
Y2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KIAogI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIK
ICNpbmNsdWRlICJXZWJDb3JlVGhyZWFkSW50ZXJuYWwuaCIKICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5j
cHAJKHJldmlzaW9uIDIxMTM5MikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJT
Y3JpcHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5oIgog
Ci0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5k
bGluZy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUu
aCIKICNpbmNsdWRlICJXb3JrZXJSdW5Mb29wLmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAy
MTEzOTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMyBAQAorMjAxNy0wMS0zMCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisg
ICAgICAgIEpTRE9NQmluZGluZyBpcyB0b28gYmlnLiBTcGxpdCBpdCB1cCEKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzYwMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1
bWVudENvZGVycy5jcHA6CisgICAgICAgIFJlcGxhY2UgaW5jbHVkZSBvZiBKU0RPTUJpbmRpbmcg
d2l0aCBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLgorCiAyMDE3LTAxLTMwICBBbmRlcnMgQ2FybHNz
b24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHNvbWUgbW9yZSBjcmFzaCBy
ZXBvcnRlciBpbmZvcm1hdGlvbiB0byBkaWFnbm9zZSBhIGZhaWxlZCBtYWNoX21zZwpJbmRleDog
U291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJl
dmlzaW9uIDIxMTM5MikKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0xheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJHZXRSZXN1bHQuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9KU0RPTUJpbmRp
bmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0xlbmd0aC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGF0aC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUGx1Z2luRGF0YS5oPgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDIxMTM5MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDcg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9j
dXNEaXJlY3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NQmluZGluZy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSlNET01FeGNlcHRpb25IYW5kbGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
TUlNRVR5cGVSZWdpc3RyeS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyRW1iZWRkZWRPYmpl
Y3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmg+CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcAkocmV2aXNpb24gMjExMzkyKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dlb2xvY2F0aW9uQ2xp
ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0dlb2xvY2F0aW9uUG9zaXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9KU05vdGlmaWNhdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
TWFpbkZyYW1lLmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAyMTEzOTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsNyBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvSGlzdG9yeUl0ZW0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hp
dFRlc3RSZXN1bHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0pTRE9NV2luZG93Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9MaWJXZWJSVENQcm92aWRlci5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300166</attachid>
            <date>2017-01-30 17:26:06 -0800</date>
            <delta_ts>2017-01-30 19:20:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-167601-20170130172356.patch</filename>
            <type>text/plain</type>
            <size>741254</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTM5NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBACisyMDE3LTAxLTMwICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgSlNET01CaW5kaW5nIGlzIHRvbyBiaWcu
IFNwbGl0IGl0IHVwIQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY3NjAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU3BsaXRzIEpTRE9NQmluZGluZy5oL2NwcCB1cCBhIGJpdCBieSBzcGxpdHRpbmcgb3V0
OgorICAgICAgICAtIEpTRE9NQmluZGluZ0NhbGxlci5oCisgICAgICAgIC0gSlNET01CaW5kaW5n
U2VjdXJpdHkuaC9jcHAKKyAgICAgICAgLSBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgvY3BwCisg
ICAgICAgIC0gSlNET01XcmFwcGVyQ2FjaGUuaC9jcHAKKworICAgICAgICBBbHNvOgorICAgICAg
ICAtIE1vdmVzIGFsbCBjb25zdHJ1Y3RvciBvYmplY3RzIHRvIEpTRE9NQ29uc3RydWN0b3IuaC9j
cHAsICAKKyAgICAgICAgLSBNb3ZlcyBzcGVjaWFsIERPTVdpbmRvdyBhY2Nlc3NvcnMgdG8gSlNE
T01XaW5kb3dCYXNlLgorICAgICAgICAtIERlbGV0ZXMgdW51c2VkIENhbGxiYWNrRnVuY3Rpb24u
aC9jcHAKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE1vZHVsZXMvd2Vi
ZGF0YWJhc2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmg6IFJlbW92
ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NyeXB0b0N1c3RvbS5jcHA6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nQ2FsbGVyLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oLgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5LmNwcDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcC4KKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUNvbnN0cnVjdG9yLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmNwcC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUNvbnN0
cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0Lmg6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAuCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9K
U0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FsbGVyRE9NV2luZG93KTog
TW92ZWQgZnJvbSBKU0RPTUJpbmRpbmcuaAorICAgICAgICAoV2ViQ29yZTo6YWN0aXZlRE9NV2lu
ZG93KTogTW92ZWQgZnJvbSBKU0RPTUJpbmRpbmcuaAorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RE
T01XaW5kb3cpOiBNb3ZlZCBmcm9tIEpTRE9NQmluZGluZy5oCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNET01XaW5kb3dCYXNlLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oLgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRXZlbnRUYXJnZXRDdXN0b20uaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0hUTUxFbGVt
ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0xvY2F0aW9uQ3VzdG9tLmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFja0N1c3RvbS5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNYUGF0aE5TUmVzb2x2ZXJDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjaGVk
dWxlZEFjdGlvbi5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5j
cHA6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NjcmlwdEdsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JpcHRHbG9iYWxPYmplY3Q6OnNldCk6CisgICAgICAgICogYmluZGluZ3MvanMvU3RydWN0dXJl
ZENsb25lLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAoR2VuZXJhdGVD
YWxsV2l0aCk6CisgICAgICAgIChHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjayk6CisgICAgICAgIChH
ZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250ZW50KToKKyAgICAgICAgKE5hdGl2ZVRv
SlNWYWx1ZSk6CisgICAgICAgICogYnJpZGdlL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1tOgorICAg
ICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwOgorICAgICAgICAqIGh0bWwvSFRN
TFZpZGVvRWxlbWVudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgICogaW5z
cGVjdG9yL1dvcmtlclNjcmlwdERlYnVnU2VydmVyLmNwcDoKKwogMjAxNy0wMS0zMCAgQ2hyaXMg
RHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIERyb3AgbGVnYWN5IEF0dHJpYnV0
ZXMuaXNJZCBhdHRyaWJ1dGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMTEz
OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MTA2OSw3ICsxMDY5LDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogCiAgICAgYmluZGluZ3MvanMv
Q2FjaGVkTW9kdWxlU2NyaXB0TG9hZGVyLmNwcAogICAgIGJpbmRpbmdzL2pzL0NhY2hlZFNjcmlw
dEZldGNoZXIuY3BwCi0gICAgYmluZGluZ3MvanMvQ2FsbGJhY2tGdW5jdGlvbi5jcHAKICAgICBi
aW5kaW5ncy9qcy9Db21tb25WTS5jcHAKICAgICBiaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQu
Y3BwCiAgICAgYmluZGluZ3MvanMvR0NDb250cm9sbGVyLmNwcApAQCAtMTEwMCw2ICsxMDk5LDkg
QEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGJpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0
b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCiAgICAg
YmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAorICAgIGJpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Z1NlY3VyaXR5LmNwcAorICAgIGJpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3IuY3BwCisgICAg
YmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAKICAgICBiaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdFRh
c2suY3BwCiAgICAgYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcApAQCAtMTEwOSw2ICsxMTEx
LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGJpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJv
cGVydGllcy5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcAogICAgIGJp
bmRpbmdzL2pzL0pTRE9NV3JhcHBlci5jcHAKKyAgICBiaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXJD
YWNoZS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAogICAgIGJpbmRp
bmdzL2pzL0pTRG9jdW1lbnRGcmFnbWVudEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0Vs
ZW1lbnRDdXN0b20uY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRh
dGFiYXNlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gMjExMzk3KQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYg
KzQwLDcgQEAKICNpbmNsdWRlICJEYXRhYmFzZVRocmVhZC5oIgogI2luY2x1ZGUgIkRhdGFiYXNl
VHJhY2tlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIlNRTEVycm9yLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI4MzcsNiArMjgzNywxNCBAQAogCQk3QzNFNTEwQjE4REY4RjM1MDBDMTEyRjcgLyogSFRNTENv
bnZlcnRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdDM0U1MTA5MThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVyLm1tICovOyB9OwogCQk3
QzNGMDFDMTFDOEU1QUJBMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MzRjAxQzAxQzhFNUFCMTAw
QUREOTYyIC8qIFVzZXJDb250ZW50UHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzNGMDFDMjFDOEU1QUMyMDBBREQ5NjIgLyogVXNl
ckNvbnRlbnRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QzNGMDFCRjFDOEU1QUIxMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92aWRl
ci5jcHAgKi87IH07CisJCTdDNDVDOUNGMUUzRUZERjcwMEFBQjU1OCAvKiBKU0RPTUJpbmRpbmdT
ZWN1cml0eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzQ1QzlDQTFFM0U4RDJFMDBBQUI1NTggLyogSlNET01CaW5kaW5nU2VjdXJpdHkuY3BwICov
OyB9OworCQk3QzQ1QzlEMDFFM0VGREZCMDBBQUI1NTggLyogSlNET01XcmFwcGVyQ2FjaGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0NUM5Q0Ix
RTNFOEU0OTAwQUFCNTU4IC8qIEpTRE9NV3JhcHBlckNhY2hlLmNwcCAqLzsgfTsKKwkJN0M0NUM5
RDExRTNFRkUwNTAwQUFCNTU4IC8qIEpTRE9NQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0NUM5Q0QxRTNFOTAwQjAwQUFCNTU4
IC8qIEpTRE9NQ29uc3RydWN0b3IuY3BwICovOyB9OworCQk3QzQ1QzlEMjFFM0VGRTA4MDBBQUI1
NTggLyogSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ1QzlDQzFFM0U4RjA4MDBBQUI1NTggLyogSlNET01F
eGNlcHRpb25IYW5kbGluZy5jcHAgKi87IH07CisJCTdDNDVDOUQzMUUzRkNCRDcwMEFBQjU1OCAv
KiBKU0RPTVdyYXBwZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0M0NUM5QzgxRTNFOEI1MTAwQUFCNTU4IC8qIEpTRE9NV3JhcHBlckNhY2hl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0M0
NUM5RDQxRTNGQ0JERjAwQUFCNTU4IC8qIEpTRE9NQmluZGluZ1NlY3VyaXR5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzQ1QzlDOTFFM0U4Q0Q3MDBB
QUI1NTggLyogSlNET01CaW5kaW5nU2VjdXJpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3QzQ1QzlENTFFM0ZDQkU0MDBBQUI1NTggLyogSlNE
T01CaW5kaW5nQ2FsbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzQ1QzlDNjFFM0U4QUJBMDBBQUI1NTggLyogSlNET01CaW5kaW5nQ2FsbGVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0M0NUM5
RDYxRTNGQ0JGODAwQUFCNTU4IC8qIEpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDNDVDOUM3MUUzRThBRkYwMEFB
QjU1OCAvKiBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0M0OEE2RDAxOTFDOUQ2NTAwMDI2Njc0IC8qIFdl
YktpdE5hbWVzcGFjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzQ4QTZDRTE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmNwcCAq
LzsgfTsKIAkJN0M0OEE2RDExOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0M0OEE2Q0YxOTFD
OUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5oICovOyB9OwogCQk3QzRDOTZEQzFBRDQ0
ODM1MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzRDOTZEODFBRDQ0ODM1MDAzNjVBNTAgLyogSlNS
ZWFkYWJsZVN0cmVhbS5jcHAgKi87IH07CkBAIC00NTYyLDEwICs0NTcwLDggQEAKIAkJQjEwQjY5
ODAxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMTBCNjk3RDE0MEMxNzQwMDBCQzFDMjYgLyogV2Vi
VlRUVG9rZW4uaCAqLzsgfTsKIAkJQjEwQjY5ODExNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRv
a2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMTBCNjk3RTE0MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmNwcCAqLzsgfTsK
IAkJQjEwQjY5ODIxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjEwQjY5N0YxNDBDMTc0MDAw
QkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5oICovOyB9OwotCQlCMTgyNzQ5MzEzNENBNEMxMDBC
OThDMkQgLyogQ2FsbGJhY2tGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMTgyNzQ5MjEzNENBNEMxMDBCOThDMkQgLyogQ2FsbGJhY2tG
dW5jdGlvbi5jcHAgKi87IH07CiAJCUIxQUQ0RTczMTNBMTJBNDYwMDg0NkIyNyAvKiBUZXh0VHJh
Y2tMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjFBRDRFNzExM0ExMkE0NjAwODQ2QjI3IC8qIFRleHRUcmFja0xvYWRlci5jcHAgKi87IH07
CiAJCUIxQUQ0RTc0MTNBMTJBNDYwMDg0NkIyNyAvKiBUZXh0VHJhY2tMb2FkZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxQUQ0RTcyMTNBMTJBNDYw
MDg0NkIyNyAvKiBUZXh0VHJhY2tMb2FkZXIuaCAqLzsgfTsKLQkJQjFENUVDQjUxMzRCNThEQTAw
ODdDNzhGIC8qIENhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIxRDVFQ0I0MTM0QjU4REEwMDg3Qzc4RiAvKiBDYWxsYmFja0Z1
bmN0aW9uLmggKi87IH07CiAJCUIyMDExMTA3MEFCNzc0MDUwMERCMEU2OCAvKiBKU1NWR0FFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIy
MDExMTA1MEFCNzc0MDUwMERCMEU2OCAvKiBKU1NWR0FFbGVtZW50LmNwcCAqLzsgfTsKIAkJQjIw
MTExMDgwQUI3NzQwNTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyMDExMTA2MEFCNzc0MDUwMERCMEU2OCAv
KiBKU1NWR0FFbGVtZW50LmggKi87IH07CiAJCUIyMjI3OTY0MEQwMEJGMjIwMDcxQjc4MiAvKiBH
cmFkaWVudEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEIyMjI3N0NEMEQwMEJGMUYwMDcxQjc4MiAvKiBHcmFkaWVudEF0dHJpYnV0ZXMu
aCAqLzsgfTsKQEAgLTUxMzgsNyArNTE0NCw2IEBACiAJCUI1NDNCODU3MTdFQjc1OEYwMDNCRTkz
QSAvKiBTVkdQcm9wZXJ0eUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQjU0M0I4NTYxN0VCNzU4RjAwM0JFOTNBIC8qIFNWR1Byb3BlcnR5SW5m
by5jcHAgKi87IH07CiAJCUI1NjJEQjYwMTdEM0NENjMwMDEwQUY5NiAvKiBIVE1MRWxlbWVudFR5
cGVIZWxwZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCNTYyREI1RTE3RDNDRDU2MDAxMEFGOTYgLyogSFRNTEVsZW1lbnRUeXBlSGVscGVycy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUI1NjJEQjYx
MTdEM0NENjYwMDEwQUY5NiAvKiBTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NjJEQjVGMTdEM0NENTYwMDEwQUY5
NiAvKiBTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCAqLzsgfTsKLQkJQjU2NTc2RTgxN0RBOTRFMjAw
QTU2QkRDIC8qIERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNTY1NzZFNzE3REE5NEUyMDBBNTZCREMgLyog
RE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCAqLzsgfTsKIAkJQjU2NTc5QjUxODI0RDEyQTAw
RTc5RjIzIC8qIFJlbmRlckNoaWxkSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1NjU3OUI0MTgyNEQxMkEwMEU3OUYyMyAvKiBSZW5kZXJD
aGlsZEl0ZXJhdG9yLmggKi87IH07CiAJCUI1N0NCNTJEMTgyQTNFRUQwMDc5QTY0NyAvKiBJbmxp
bmVFbGVtZW50Qm94LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEI1N0NCNTJDMTgyQTNFRUQwMDc5QTY0NyAvKiBJbmxpbmVFbGVtZW50Qm94LmNwcCAq
LzsgfTsKIAkJQjU3Q0I1MkUxODJBM0VGQzAwNzlBNjQ3IC8qIElubGluZUVsZW1lbnRCb3guaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1N0NCNTJCMTgy
QTM3RjYwMDc5QTY0NyAvKiBJbmxpbmVFbGVtZW50Qm94LmggKi87IH07CkBAIC0xMDM2Miw2ICsx
MDM2NywxNCBAQAogCQk3QzNGMDFDMDFDOEU1QUIxMDBBREQ5NjIgLyogVXNlckNvbnRlbnRQcm92
aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudFByb3Zp
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNDE4OUFCMUIwN0MxNzAwMDBG
QTc1NyAvKiBHbG9iYWxFdmVudEhhbmRsZXJzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBHbG9iYWxFdmVudEhhbmRsZXJz
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M0MTg5QUMxQjA3Q0JGMjAwMEZB
NzU3IC8qIFdpbmRvd0V2ZW50SGFuZGxlcnMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdpbmRvd0V2ZW50SGFuZGxlcnMu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzQ1QzlDNjFFM0U4QUJBMDBBQUI1
NTggLyogSlNET01CaW5kaW5nQ2FsbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTRE9NQmluZGluZ0NhbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QzQ1QzlDNzFFM0U4QUZGMDBBQUI1NTggLyogSlNET01FeGNlcHRpb25IYW5kbGluZy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDNDVDOUM4MUUzRThCNTEwMEFBQjU1OCAvKiBK
U0RPTVdyYXBwZXJDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RP
TVdyYXBwZXJDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QzQ1QzlDOTFF
M0U4Q0Q3MDBBQUI1NTggLyogSlNET01CaW5kaW5nU2VjdXJpdHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNET01CaW5kaW5nU2VjdXJpdHkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJN0M0NUM5Q0ExRTNFOEQyRTAwQUFCNTU4IC8qIEpTRE9NQmluZGluZ1Nl
Y3VyaXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NQmlu
ZGluZ1NlY3VyaXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M0NUM5Q0Ix
RTNFOEU0OTAwQUFCNTU4IC8qIEpTRE9NV3JhcHBlckNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NV3JhcHBlckNhY2hlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0M0NUM5Q0MxRTNFOEYwODAwQUFCNTU4IC8qIEpTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNE
T01FeGNlcHRpb25IYW5kbGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdD
NDVDOUNEMUUzRTkwMEIwMEFBQjU1OCAvKiBKU0RPTUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QzQ4QTZDRTE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0
TmFtZXNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktp
dE5hbWVzcGFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDNDhBNkNGMTkx
QzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViS2l0TmFtZXNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdDNDhBNkQyMTkxQzlEOEUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFdlYktpdE5hbWVzcGFjZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjMz
MiwxMiArMTIzNDUsMTAgQEAKIAkJQjEwQjY5N0QxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRv
a2VuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZUVFRva2VuLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxMEI2OTdFMTQwQzE3NDAwMEJDMUMyNiAvKiBX
ZWJWVFRUb2tlbml6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViVlRUVG9rZW5pemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjEwQjY5
N0YxNDBDMTc0MDAwQkMxQzI2IC8qIFdlYlZUVFRva2VuaXplci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJWVFRUb2tlbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQjE4Mjc0OTIxMzRDQTRDMTAwQjk4QzJEIC8qIENhbGxiYWNrRnVuY3Rpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbGJhY2tGdW5jdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxQTk0MkUxMTVCNUNFMjIwMEQ1MjVE
MSAvKiBNZWRpYVNvdXJjZVJlZ2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IE1lZGlhU291cmNlUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMUE5NDJFMjE1QjVDRTIyMDBENTI1RDEgLyogTWVkaWFTb3VyY2VSZWdpc3RyeS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVNvdXJjZVJlZ2lzdHJ5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxQUQ0RTcxMTNBMTJBNDYwMDg0NkIyNyAv
KiBUZXh0VHJhY2tMb2FkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVGV4dFRyYWNrTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjFB
RDRFNzIxM0ExMkE0NjAwODQ2QjI3IC8qIFRleHRUcmFja0xvYWRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0VHJhY2tMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQjFENUVDQjQxMzRCNThEQTAwODdDNzhGIC8qIENhbGxiYWNrRnVuY3Rpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbGJhY2tGdW5jdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjAxMTEwNTBBQjc3NDA1MDBEQjBFNjggLyog
SlNTVkdBRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNTVkdBRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyMDExMTA2
MEFCNzc0MDUwMERCMEU2OCAvKiBKU1NWR0FFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1NWR0FFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyMjI3N0NEMEQwMEJGMUYwMDcxQjc4MiAvKiBHcmFkaWVudEF0dHJpYnV0ZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYWRpZW50QXR0cmlidXRlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMwNTEsNyArMTMwNjIsNiBAQAogCQlCNTYyREI1
RTE3RDNDRDU2MDAxMEFGOTYgLyogSFRNTEVsZW1lbnRUeXBlSGVscGVycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBIVE1MRWxlbWVudFR5cGVIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUI1NjJEQjVGMTdEM0NENTYwMDEwQUY5NiAvKiBTVkdFbGVtZW50VHlwZUhlbHBlcnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU1ZHRWxlbWVudFR5cGVIZWxwZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUI1NjU3NkU0MTdEQTU5OUYwMEE1NkJEQyAvKiBKU01haW5UaHJlYWRFeGVj
U3RhdGVJbnN0cnVtZW50YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNNYWluVGhyZWFkRXhlY1N0YXRlSW5zdHJ1bWVudGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUI1NjU3NkU3MTdEQTk0RTIwMEE1NkJEQyAvKiBET01Db25zdHJ1Y3Rvcldp
dGhEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01Db25zdHJ1
Y3RvcldpdGhEb2N1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCNTY1NzlC
NDE4MjREMTJBMDBFNzlGMjMgLyogUmVuZGVyQ2hpbGRJdGVyYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJDaGlsZEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUI1N0NCNTJCMTgyQTM3RjYwMDc5QTY0NyAvKiBJbmxpbmVFbGVtZW50
Qm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUVsZW1lbnRCb3gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjU3Q0I1MkMxODJBM0VFRDAwNzlBNjQ3
IC8qIElubGluZUVsZW1lbnRCb3guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5saW5lRWxlbWVudEJveC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yMjEzNiw3ICsyMjE0Niw2IEBACiAJCQkJQkNENTMzNjMwRUQ2ODQ4OTAwODg3NDY4IC8qIENh
Y2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmggKi8sCiAJCQkJMEY2MEYzMjkxREZCQjEwNDAwNDE2
RDZDIC8qIENvbW1vblZNLmNwcCAqLywKIAkJCQkwRjYwRjMyQTFERkJCMTA0MDA0MTZENkMgLyog
Q29tbW9uVk0uaCAqLywKLQkJCQlCNTY1NzZFNzE3REE5NEUyMDBBNTZCREMgLyogRE9NQ29uc3Ry
dWN0b3JXaXRoRG9jdW1lbnQuaCAqLywKIAkJCQlCQzUzREE0NzExNDMxMzREMDAwRDgxN0UgLyog
RE9NV3JhcHBlcldvcmxkLmNwcCAqLywKIAkJCQlCQzUzREEyRDExNDMxMjFFMDAwRDgxN0UgLyog
RE9NV3JhcHBlcldvcmxkLmggKi8sCiAJCQkJMTQzMkU4NDgwQzUxNDkzRjAwQjE1MDBGIC8qIEdD
Q29udHJvbGxlci5jcHAgKi8sCkBAIC0yMjE1NSw4ICsyMjE2NCwxNCBAQAogCQkJCTlCRDRFOTE1
MUM0NjI4NzIwMDUwNjVCQyAvKiBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuaCAqLywKIAkJCQk5
M0I3MEQ0NzA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmNwcCAqLywKIAkJCQk5M0I3
MEQ0ODA5RUIwQzdDMDA5RDg0NjggLyogSlNET01CaW5kaW5nLmggKi8sCisJCQkJN0M0NUM5QzYx
RTNFOEFCQTAwQUFCNTU4IC8qIEpTRE9NQmluZGluZ0NhbGxlci5oICovLAorCQkJCTdDNDVDOUNB
MUUzRThEMkUwMEFBQjU1OCAvKiBKU0RPTUJpbmRpbmdTZWN1cml0eS5jcHAgKi8sCisJCQkJN0M0
NUM5QzkxRTNFOENENzAwQUFCNTU4IC8qIEpTRE9NQmluZGluZ1NlY3VyaXR5LmggKi8sCisJCQkJ
N0M0NUM5Q0QxRTNFOTAwQjAwQUFCNTU4IC8qIEpTRE9NQ29uc3RydWN0b3IuY3BwICovLAogCQkJ
CTQxM0MyQzMzMUJDMjlBN0IwMDc1MjA0QyAvKiBKU0RPTUNvbnN0cnVjdG9yLmggKi8sCiAJCQkJ
OTMwODQxMzMxQ0REQjE1NTAwQjA5NThDIC8qIEpTRE9NQ29udmVydC5oICovLAorCQkJCTdDNDVD
OUNDMUUzRThGMDgwMEFBQjU1OCAvKiBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcCAqLywKKwkJ
CQk3QzQ1QzlDNzFFM0U4QUZGMDBBQUI1NTggLyogSlNET01FeGNlcHRpb25IYW5kbGluZy5oICov
LAogCQkJCUUxQzM2Q0JDMEVCMDgwNjIwMDc0MTBCQyAvKiBKU0RPTUdsb2JhbE9iamVjdC5jcHAg
Ki8sCiAJCQkJRTFDMzZDMDIwRUIwNzZENjAwNzQxMEJDIC8qIEpTRE9NR2xvYmFsT2JqZWN0Lmgg
Ki8sCiAJCQkJN0MyQkREM0IxN0M3Rjk4QjAwMzhGRjE1IC8qIEpTRE9NR2xvYmFsT2JqZWN0VGFz
ay5jcHAgKi8sCkBAIC0yMjE3Myw2ICsyMjE4OCw4IEBACiAJCQkJQkNCRkI1M0IwRENEMjlDRjAw
MTlCM0U1IC8qIEpTRE9NV2luZG93U2hlbGwuaCAqLywKIAkJCQk0MTcwQTJFOTFEOEMwQ0MwMDAz
MTg0NTIgLyogSlNET01XcmFwcGVyLmNwcCAqLywKIAkJCQk2NUUwRTk0MzExMzNDODlGMDBCNENC
MTAgLyogSlNET01XcmFwcGVyLmggKi8sCisJCQkJN0M0NUM5Q0IxRTNFOEU0OTAwQUFCNTU4IC8q
IEpTRE9NV3JhcHBlckNhY2hlLmNwcCAqLywKKwkJCQk3QzQ1QzlDODFFM0U4QjUxMDBBQUI1NTgg
LyogSlNET01XcmFwcGVyQ2FjaGUuaCAqLywKIAkJCQlFM0E1ODcyRTFEQzNGNTI2MDBGNjA3QTYg
LyogSlNEeW5hbWljRG93bmNhc3QuaCAqLywKIAkJCQlCQzYwOTAxRTBFOTFCOEVDMDAwQzY4QjUg
LyogSlNFdmVudFRhcmdldEN1c3RvbS5jcHAgKi8sCiAJCQkJNDZCNjNGNkIxQzZFOENERjAwMkU5
MTRCIC8qIEpTRXZlbnRUYXJnZXRDdXN0b20uaCAqLywKQEAgLTIyNTY5LDggKzIyNTg2LDYgQEAK
IAkJQkNDRTU4QTcxMDYxRTgyRjAwOEZCMzVBIC8qIENhbGxiYWNrIE9iamVjdHMgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUIxODI3NDkyMTM0Q0E0QzEw
MEI5OEMyRCAvKiBDYWxsYmFja0Z1bmN0aW9uLmNwcCAqLywKLQkJCQlCMUQ1RUNCNDEzNEI1OERB
MDA4N0M3OEYgLyogQ2FsbGJhY2tGdW5jdGlvbi5oICovLAogCQkJCTE0NDlFMjg2MTA3RDREQjQw
MEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0YS5jcHAgKi8sCiAJCQkJMTQ0OUUyNEExMDdENEE4NDAw
QjU3OTNGIC8qIEpTQ2FsbGJhY2tEYXRhLmggKi8sCiAJCQkJRTEwQjkzQzIwQjczQzI5MTAwM0VE
ODkwIC8qIEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcCAqLywKQEAgLTI1MTg1LDcgKzI1MjAw
LDYgQEAKIAkJCQk5M0YxOTk1MDA4MjQ1RTU5MDAxRTlBQkMgLyogQ2FjaGVQb2xpY3kuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUU0M0FGOEU3MUFDNUI3RUMwMENBNzE3RSAvKiBDYWNoZVZhbGlkYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QUUyRDk3MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxj
dWxhdGlvblZhbHVlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCMUQ1RUNCNTEzNEI1OERBMDA4N0M3
OEYgLyogQ2FsbGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk0ODRGQzIxMDJD
RjIzQzAwMTg3REQzIC8qIENhbnZhc0dyYWRpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk0Njcx
RTA2NjFENjdBNTk2MDBDNkI0OTcgLyogQ2FudmFzUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDk0ODRGQzUxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BhdHRlcm4uaCBpbiBIZWFkZXJzICov
LApAQCAtMjUzNjIsNiArMjUzNzYsNyBAQAogCQkJCUUxMjVGODM2MTgyMkYxOEEwMEQ4NENEOSAv
KiBDcnlwdG9LZXlITUFDLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUY4MEI4ODE4MzE3MjUyMDA3
ODg1QzMgLyogQ3J5cHRvS2V5UGFpci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE2NEZBQTMxODMx
NUJGNDAwREI0RTYxIC8qIENyeXB0b0tleVJTQS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0M0NUM5
RDUxRTNGQ0JFNDAwQUFCNTU4IC8qIEpTRE9NQmluZGluZ0NhbGxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTEyNUY4NTYxODJDMEY4MzAwRDg0Q0Q5IC8qIENyeXB0b0tleVNlcmlhbGl6YXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUUxMjVGODVBMTgyQzFBQTYwMEQ4NENEOSAvKiBDcnlwdG9L
ZXlTZXJpYWxpemF0aW9uUmF3LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTk3MjcxNjE4MjA1NDlF
MDA1OTJENTEgLyogQ3J5cHRvS2V5VHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTU4NSw3ICsy
NTYwMCw2IEBACiAJCQkJQTgxODVGMzkwOTc2NTc2NjAwNTgyNkQ5IC8qIERvY3VtZW50VHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTczODg5QTExMTZFQTlEQzAwQURGMzEzIC8qIERvY3VtZW50
V3JpdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQThGNkJDMzBEQjU1Q0RDMDAxREI3OTQgLyog
RE9NQXBwbGljYXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQjU2NTc2RTgxN0RBOTRF
MjAwQTU2QkRDIC8qIERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzYwRDZFOTBEMjhEODM0MDBCOTkxOEYgLyogRE9NQ29yZUV4Y2VwdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkM5QTBGNzUxNjQwOTRDRjAwM0Q2QjhEIC8qIERPTUNTU05hbWVzcGFj
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUIzQTg4NzIxNDU2MzJGOTAwM0FFOEY1IC8qIERPTURP
TVNldHRhYmxlVG9rZW5MaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI2Njk2LDYgKzI2NzEwLDcg
QEAKIAkJCQk0NDk2RTNBMDEzOTgxM0E1MDAzRUUzMkEgLyogSlNTVkdNUGF0aEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTg1NDJBNzk3MEFFNUM5NDMwMERGNThERiAvKiBKU1NWR051bWJl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJGQTNEQjEwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZH
TnVtYmVyTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0M0NUM5RDMxRTNGQ0JENzAwQUFCNTU4
IC8qIEpTRE9NV3JhcHBlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkZBM0RCNTBBQjc1
QTZGMDAwRTVBQzQgLyogSlNTVkdQYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJG
QTNEQjcwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjJGQTNEQjkwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHUGF0aFNlZ0FyY0Ficy5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yNzc5Nyw2ICsyNzgxMiw3IEBACiAJCQkJOTdCQzZBNTIxNTA1RjA4MTAw
MUI3NEFDIC8qIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTk3
QkM2QTU3MTUwNUYwODEwMDFCNzRBQyAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5N0JDNkE1ODE1MDVGMDgxMDAxQjc0QUMgLyogU1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzQ1QzlENDFFM0ZDQkRGMDBB
QUI1NTggLyogSlNET01CaW5kaW5nU2VjdXJpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzZG
RDE4MTZDNzgyNjUwMEY4ODdDMSAvKiBTUUxUcmFuc2FjdGlvblN0YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGRTM2RkQxNzE2Qzc4MjY1MDBGODg3QzEgLyogU1FMVHJhbnNhY3Rpb25TdGF0ZU1h
Y2hpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBMkU2RTVBMENDNTUyMTMwMDRBMjA2MiAvKiBT
UUxWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzg0Niw2ICsyNzg2Miw3IEBACiAJCQkJMEZG
NTAyNzIxMDJCQTk2QTAwNjZGMzlBIC8qIFN0eWxlTWVkaWEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDNUVCNzRFMEU4MUUwNjcwMEIyNTk2NSAvKiBTdHlsZU11bHRpQ29sRGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTREQUNFNkExRDEyRTEwQjAwNzU5ODBGIC8qIFN0eWxlUGVuZGluZ1Jlc291
cmNlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0M0NUM5RDYxRTNGQ0JGODAwQUFCNTU4IC8qIEpT
RE9NRXhjZXB0aW9uSGFuZGxpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2REZDMEExOTkw
NjcwMDdGQjhDNSAvKiBTdHlsZVByb3BlcnRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxQjI1
MTA3MTUyQTBCQjAwMDY5Qjc3OSAvKiBTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4M0MwNUE1QjFBNjg2MjEyMDA3RTVERUEgLyogU3R5bGVQcm9wZXJ0eVNob3J0
aGFuZEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTA4NSw3ICsyOTEwMiw2IEBACiAJ
CQkJQkNCMTZDMjcwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFhTTFN0eWxlU2hlZXQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTQzQUY4RTYxQUM1QjdFODAwQ0E3MTdFIC8qIENhY2hlVmFsaWRh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUFFMkQ5NjEzNEVFNUY5MDA3MjkyMEEgLyog
Q2FsY3VsYXRpb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMTgyNzQ5MzEzNENBNEMx
MDBCOThDMkQgLyogQ2FsbGJhY2tGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTQ4
NEZDMTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNDY3MUUwNjUxRDY3QTU5NjAwQzZCNDk3IC8qIENhbnZhc1BhdGguY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDk0ODRGQzQxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BhdHRlcm4uY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0yOTI0Niw2ICsyOTI2Miw3IEBACiAJCQkJRkJCMEM1QjcxN0JC
RDYyNjAwM0QzNjc3IC8qIENTU0ZpbHRlckltYWdlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM2NEI0RDUwQ0I0Mjk4QTAwNUYyQjYyIC8qIENTU0ZvbnRGYWNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQwOUVCREIyMTZCN0VFNzQwMENCQTNGQyAvKiBDU1NGb250RmFjZUxvYWRFdmVu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3QzQ1QzlEMTFFM0VGRTA1MDBBQUI1NTggLyogSlNE
T01Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODBFNkNFNzBBMTk4OUNBMDA3
RkI4QzUgLyogQ1NTRm9udEZhY2VSdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNjAxN0Ez
MUM3MkRDOTkwMEY3NEExNiAvKiBDU1NGb250RmFjZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzY0QjRENzBDQjQyOThBMDA1RjJCNjIgLyogQ1NTRm9udEZhY2VTb3VyY2UuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yOTU3OCw2ICsyOTU5NSw3IEBACiAJCQkJQjJBRkZDN0MwRDAwQTVDMTAw
MzAwNzREIC8qIEZvbnRDYWNoZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTYwMEQw
MDZDRDYwMEVGNkYyNiAvKiBGb250Q2FzY2FkZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkFG
RkM4MDBEMDBBNUMxMDAzMDA3NEQgLyogRm9udENhc2NhZGVDb2NvYS5tbSBpbiBTb3VyY2VzICov
LAorCQkJCTdDNDVDOUQwMUUzRUZERkIwMEFBQjU1OCAvKiBKU0RPTVdyYXBwZXJDYWNoZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMkMzREE2NzBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udENhc2Nh
ZGVGb250cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzRFREQ3NDFBN0I2MDc4MDAxOThDNEQg
LyogRm9udENvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJBRkZDN0QwRDAwQTVDMTAwMzAw
NzREIC8qIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMTU0
Niw2ICszMTU2NCw3IEBACiAJCQkJQjIyMjc5QTQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3
QjA1MEQwMEJGRjEwMDcxQjc4MiAvKiBTVkdDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5QTcwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0N1cnNv
ckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJN0M0NUM5RDIxRTNFRkUwODAwQUFCNTU4
IC8qIEpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5
QUQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0RlZnNFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUIyMjI3OUIwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdEZXNjRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCMjIyNzlCMzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRG9jdW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0zMTU2MCw2ICszMTU3OSw3IEBACiAJCQkJQjIyMjc5Q0QwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyMjI3OUQwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUNvbXBvc2l0ZUVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTkyMTMyNzQxMUMwRTZCQjAwNDU2MjM4IC8q
IFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTdDNDVD
OUNGMUUzRUZERjcwMEFBQjU1OCAvKiBKU0RPTUJpbmRpbmdTZWN1cml0eS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMjIyNzlEMzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUQ2MEQwMEJGMjIwMDcxQjc4
MiAvKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIyMjc5RDkwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhbGxiYWNr
RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0Nh
bGxiYWNrRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDUyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhbGxi
YWNrRnVuY3Rpb24uaCIKLQotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlIDxydW50aW1lL0NhbGxEYXRhLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotYm9vbCBjaGVja0Z1bmN0aW9uT25seUNhbGxiYWNrKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBDYWxsYmFja0FsbG93ZWRWYWx1ZUZsYWdz
IGFjY2VwdGVkVmFsdWVzKQotewotICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpICYmIChhY2Nl
cHRlZFZhbHVlcyAmIENhbGxiYWNrQWxsb3dVbmRlZmluZWQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAodmFsdWUuaXNOdWxsKCkgJiYgKGFjY2VwdGVkVmFsdWVzICYgQ2FsbGJh
Y2tBbGxvd051bGwpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU0M6OkNhbGxEYXRh
IGNhbGxEYXRhOwotICAgIGlmIChnZXRDYWxsRGF0YSh2YWx1ZSwgY2FsbERhdGEpID09IEpTQzo6
Q2FsbFR5cGU6Ok5vbmUpIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoc3RhdGUtPnZtKCkpOwotICAgICAgICB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKCpzdGF0ZSwg
c2NvcGUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhbGxiYWNrRnVuY3Rpb24uY3BwCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVs
ZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvQ2FsbGJh
Y2tGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0Nh
bGxiYWNrRnVuY3Rpb24uaAkocmV2aXNpb24gMjExMzk3KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvQ2FsbGJhY2tGdW5jdGlvbi5oCShub25leGlzdGVudCkKQEAgLTEsNTUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
Ci0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmpl
Y3QuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci1jbGFzcyBFeGVjU3RhdGU7Ci19Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7Ci0KLWVudW0gQ2FsbGJhY2tB
bGxvd2VkVmFsdWVGbGFnIHsKLSAgICBDYWxsYmFja0FsbG93VW5kZWZpbmVkID0gMSwKLSAgICBD
YWxsYmFja0FsbG93TnVsbCA9IDEgPDwgMQotfTsKLQotdHlwZWRlZiB1bnNpZ25lZCBDYWxsYmFj
a0FsbG93ZWRWYWx1ZUZsYWdzOwotCi1ib29sIGNoZWNrRnVuY3Rpb25Pbmx5Q2FsbGJhY2soSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIENhbGxiYWNrQWxsb3dlZFZhbHVlRmxhZ3MpOwot
Ci0vLyBDcmVhdGVzIGNhbGxiYWNrIG9iamVjdHMgZm9yIGNhbGxiYWNrcyBtYXJrZWQgYXMgRnVu
Y3Rpb25Pbmx5IGluIFdlYklETC4KLXRlbXBsYXRlIDx0eXBlbmFtZSBKU0NhbGxiYWNrVHlwZT4K
LVJlZlB0cjxKU0NhbGxiYWNrVHlwZT4gY3JlYXRlRnVuY3Rpb25Pbmx5Q2FsbGJhY2soSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSwgQ2FsbGJhY2tBbGxvd2VkVmFsdWVGbGFncyBhY2NlcHRlZFZhbHVlcyA9IDAp
Ci17Ci0gICAgaWYgKGNoZWNrRnVuY3Rpb25Pbmx5Q2FsbGJhY2soZXhlYywgdmFsdWUsIGFjY2Vw
dGVkVmFsdWVzKSkKLSAgICAgICAgcmV0dXJuIEpTQ2FsbGJhY2tUeXBlOjpjcmVhdGUoYXNPYmpl
Y3QodmFsdWUpLCBnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9DYWxsYmFja0Z1bmN0aW9uLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9s
LXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3Bl
cnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01Db25zdHJ1Y3RvcldpdGhE
b2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTUNv
bnN0cnVjdG9yV2l0aERvY3VtZW50LmgJKHJldmlzaW9uIDIxMTM5NykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmgJKG5vbmV4aXN0ZW50
KQpAQCAtMSw0OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJKU0RPTUJp
bmRpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBDb25zdHJ1Y3RvcnMgdXNpbmcg
dGhpcyBiYXNlIGNsYXNzIGRlcGVuZCBvbiBiZWluZyBpbiBhIERvY3VtZW50IGFuZAotLy8gY2Fu
IG5ldmVyIGJlIHVzZWQgZnJvbSBhIFdvcmtlckdsb2JhbFNjb3BlLgotY2xhc3MgRE9NQ29uc3Ry
dWN0b3JXaXRoRG9jdW1lbnQgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotICAgIHR5
cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKLXB1YmxpYzoKLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PERvY3VtZW50
PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIERP
TUNvbnN0cnVjdG9yV2l0aERvY3VtZW50KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgICAgIDogRE9NQ29uc3RydWN0b3JPYmpl
Y3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLSAgICB7Ci0gICAg
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbE9iamVjdC52bSgpKTsKLSAgICAgICAgQVNT
RVJUKGdsb2JhbE9iamVjdC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmlzRG9jdW1lbnQoKSk7
Ci0gICAgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNCaW5kaW5nc0FsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUuY3BwCShyZXZpc2lvbiAy
MTEzOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0JpbmRpbmdzQWxsSW5PbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAvLyBUaGlzIGFsbC1pbi1vbmUg
Y3BwIGZpbGUgY3V0cyBkb3duIG9uIHRlbXBsYXRlIGJsb2F0IHRvIGFsbG93IHVzIHRvIGJ1aWxk
IG91ciBXaW5kb3dzIHJlbGVhc2UgYnVpbGQuCiAKICNpbmNsdWRlICJDYWNoZWRNb2R1bGVTY3Jp
cHRMb2FkZXIuY3BwIgotI2luY2x1ZGUgIkNhbGxiYWNrRnVuY3Rpb24uY3BwIgogI2luY2x1ZGUg
IkRPTVdyYXBwZXJXb3JsZC5jcHAiCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmNwcCIKICNpbmNs
dWRlICJKU0FuaW1hdGlvblRpbWVsaW5lQ3VzdG9tLmNwcCIKQEAgLTQ2LDYgKzQ1LDkgQEAKICNp
bmNsdWRlICJKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2tDdXN0b20uY3BwIgogI2luY2x1ZGUg
IkpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuY3Bw
IgorI2luY2x1ZGUgIkpTRE9NQmluZGluZ1NlY3VyaXR5LmNwcCIKKyNpbmNsdWRlICJKU0RPTUNv
bnN0cnVjdG9yLmNwcCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcCIKICNp
bmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5jcHAiCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmpl
Y3RUYXNrLmNwcCIKICNpbmNsdWRlICJKU0RPTVByb21pc2UuY3BwIgpAQCAtNTUsNiArNTcsNyBA
QAogI2luY2x1ZGUgIkpTRE9NV2luZG93UHJvcGVydGllcy5jcHAiCiAjaW5jbHVkZSAiSlNET01X
aW5kb3dTaGVsbC5jcHAiCiAjaW5jbHVkZSAiSlNET01XcmFwcGVyLmNwcCIKKyNpbmNsdWRlICJK
U0RPTVdyYXBwZXJDYWNoZS5jcHAiCiAjaW5jbHVkZSAiSlNEb2N1bWVudEN1c3RvbS5jcHAiCiAj
aW5jbHVkZSAiSlNEb2N1bWVudEZyYWdtZW50Q3VzdG9tLmNwcCIKICNpbmNsdWRlICJKU0VsZW1l
bnRDdXN0b20uY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9D
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5
cHRvQ3VzdG9tLmNwcAkocmV2aXNpb24gMjExMzk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDcnlwdG9DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNDcnlwdG8uaCIKIAotI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJK
U0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSA8cnVudGltZS9BcnJheUJ1ZmZlclZp
ZXcuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0Fy
cmF5QnVmZmVyVmlldy5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0
b21YUGF0aE5TUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMjExMzk3KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKICNpbmNsdWRlICJDb21tb25WTS5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1
ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRl
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuY3BwCShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw0MiArMjQs
MTkgQEAKIAogI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkNvbW1vblZNLmgi
Ci0jaW5jbHVkZSAiRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFeGNl
cHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCi0jaW5j
bHVkZSAiRXhjZXB0aW9uSGVhZGVycy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkludGVyZmFjZXMu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKLSNp
bmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydC5o
IgotI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgotI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9t
LmgiCi0jaW5jbHVkZSAiSlNFeGNlcHRpb25CYXNlLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKLSNpbmNsdWRlIDxieXRlY29kZS9Db2RlQmxvY2suaD4KLSNpbmNsdWRlIDxpbnNwZWN0
b3IvU2NyaXB0Q2FsbFN0YWNrLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFj
a0ZhY3RvcnkuaD4KICNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9ySGFuZGxpbmdTY29wZS5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
RXhjZXB0aW9uLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1l
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwotdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9NQ29uc3RydWN0b3JPYmplY3QpOwotU1RB
VElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yV2l0aERv
Y3VtZW50KTsKLQogdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIHBy
b3BlcnR5TmFtZSkKIHsKICAgICBjb21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5
TmFtZSk7CkBAIC0xODQsMTcwICsxNjEsNiBAQCBkb3VibGUgdmFsdWVUb0RhdGUoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHZhbHVl
LnRvT2JqZWN0KGV4ZWMpKS0+aW50ZXJuYWxOdW1iZXIoKTsKIH0KIAotdm9pZCByZXBvcnRFeGNl
cHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBDYWNoZWRTY3Jp
cHQqIGNhY2hlZFNjcmlwdCkKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIFJFTEVB
U0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIGF1dG8q
IGV4Y2VwdGlvbiA9IGpzRHluYW1pY0Rvd25jYXN0PEpTQzo6RXhjZXB0aW9uKj4odm0sIGV4Y2Vw
dGlvblZhbHVlKTsKLSAgICBpZiAoIWV4Y2VwdGlvbikgewotICAgICAgICBleGNlcHRpb24gPSB2
bS5sYXN0RXhjZXB0aW9uKCk7Ci0gICAgICAgIGlmICghZXhjZXB0aW9uKQotICAgICAgICAgICAg
ZXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGNlcHRpb25W
YWx1ZSwgSlNDOjpFeGNlcHRpb246OkRvTm90Q2FwdHVyZVN0YWNrKTsKLSAgICB9Ci0KLSAgICBy
ZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBjYWNoZWRTY3JpcHQpOwotfQotCi1TdHJp
bmcgcmV0cmlldmVFcnJvck1lc3NhZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgVk0mIHZtLCBKU1ZhbHVl
IGV4Y2VwdGlvbiwgQ2F0Y2hTY29wZSYgY2F0Y2hTY29wZSkKLXsKLSAgICBpZiAoYXV0byogZXhj
ZXB0aW9uQmFzZSA9IHRvRXhjZXB0aW9uQmFzZSh2bSwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbkJhc2UtPnRvU3RyaW5nKCk7Ci0KLSAgICAvLyBGSVhNRTogPGh0dHA6Ly93
ZWJraXQub3JnL2IvMTE1MDg3PiBXZWIgSW5zcGVjdG9yOiBXZWJDb3JlOjpyZXBvcnRFeGNlcHRp
b24gc2hvdWxkIG5vdCBldmFsdWF0ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKLSAg
ICAvLyBJZiB0aGlzIGlzIGEgY3VzdG9tIGV4Y2VwdGlvbiBvYmplY3QsIGNhbGwgdG9TdHJpbmcg
b24gaXQgdG8gdHJ5IGFuZCBnZXQgYSBuaWNlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhl
IGV4Y2VwdGlvbi4KLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlmIChhdXRvKiBlcnJv
ciA9IGpzRHluYW1pY0Rvd25jYXN0PEVycm9ySW5zdGFuY2UqPih2bSwgZXhjZXB0aW9uKSkKLSAg
ICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3ItPnNhbml0aXplZFRvU3RyaW5nKCZzdGF0ZSk7Ci0g
ICAgZWxzZQotICAgICAgICBlcnJvck1lc3NhZ2UgPSBleGNlcHRpb24udG9XVEZTdHJpbmcoJnN0
YXRlKTsKLQotICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIgYW55IG5ldyBleGNlcHRpb24gdGhhdCBt
YXkgYmUgdGhyb3duIGluIHRoZSB0b1N0cmluZygpIGNhbGwgYWJvdmUuCi0gICAgLy8gcmVwb3J0
RXhjZXB0aW9uKCkgaXMgbm90IHN1cHBvc2VkIHRvIGJlIG1ha2luZyBuZXcgZXhjZXB0aW9ucy4K
LSAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgdm0uY2xlYXJMYXN0RXhjZXB0
aW9uKCk7Ci0gICAgcmV0dXJuIGVycm9yTWVzc2FnZTsKLX0KLQotdm9pZCByZXBvcnRFeGNlcHRp
b24oRXhlY1N0YXRlKiBleGVjLCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3Jp
cHQqIGNhY2hlZFNjcmlwdCwgRXhjZXB0aW9uRGV0YWlscyogZXhjZXB0aW9uRGV0YWlscykKLXsK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKLQotICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdBUElMb2NrKCkpOwotICAgIGlmIChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24odm0s
IGV4Y2VwdGlvbikpCi0gICAgICAgIHJldHVybjsKLQotICAgIEVycm9ySGFuZGxpbmdTY29wZSBl
cnJvclNjb3BlKGV4ZWMtPnZtKCkpOwotCi0gICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2Fs
bFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21FeGNlcHRpb24oZXhlYywgZXhjZXB0aW9u
LCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVUb0NhcHR1cmUpKTsKLSAgICBzY29w
ZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOwotCi0gICAg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Ci0gICAgaWYgKEpTRE9NV2luZG93KiB3
aW5kb3cgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0RPTVdpbmRvdyo+KHZtLCBnbG9iYWxPYmplY3Qp
KSB7Ci0gICAgICAgIGlmICghd2luZG93LT53cmFwcGVkKCkuaXNDdXJyZW50bHlEaXNwbGF5ZWRJ
bkZyYW1lKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGxpbmVOdW1i
ZXIgPSAwOwotICAgIGludCBjb2x1bW5OdW1iZXIgPSAwOwotICAgIFN0cmluZyBleGNlcHRpb25T
b3VyY2VVUkw7Ci0gICAgaWYgKGNvbnN0IFNjcmlwdENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2Fs
bFN0YWNrLT5maXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIGxpbmVOdW1iZXIg
PSBjYWxsRnJhbWUtPmxpbmVOdW1iZXIoKTsKLSAgICAgICAgY29sdW1uTnVtYmVyID0gY2FsbEZy
YW1lLT5jb2x1bW5OdW1iZXIoKTsKLSAgICAgICAgZXhjZXB0aW9uU291cmNlVVJMID0gY2FsbEZy
YW1lLT5zb3VyY2VVUkwoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gcmV0
cmlldmVFcnJvck1lc3NhZ2UoKmV4ZWMsIHZtLCBleGNlcHRpb24tPnZhbHVlKCksIHNjb3BlKTsK
LSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2xv
YmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1u
TnVtYmVyLCBleGNlcHRpb25Tb3VyY2VVUkwsIGV4Y2VwdGlvbiwgY2FsbFN0YWNrLT5zaXplKCkg
PyBjYWxsU3RhY2sgOiBudWxscHRyLCBjYWNoZWRTY3JpcHQpOwotCi0gICAgaWYgKGV4Y2VwdGlv
bkRldGFpbHMpIHsKLSAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+bWVzc2FnZSA9IGVycm9yTWVz
c2FnZTsKLSAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+bGluZU51bWJlciA9IGxpbmVOdW1iZXI7
Ci0gICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPmNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJlcjsK
LSAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+c291cmNlVVJMID0gZXhjZXB0aW9uU291cmNlVVJM
OwotICAgIH0KLX0KLQotdm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKHZtKTsKLSAgICBhdXRvKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24o
KTsKLSAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIHJlcG9ydEV4Y2VwdGlvbihleGVj
LCBleGNlcHRpb24pOwotfQotCi1zdGF0aWMgSlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhl
Y1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVjLCBjb25zdCBTdHJpbmcqIG1lc3NhZ2UgPSBu
dWxscHRyKQotewotICAgIGlmICghZWMgfHwgZWMgPT0gRXhpc3RpbmdFeGNlcHRpb25FcnJvcikK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0KLSAgICAvLyBGSVhNRTogSGFuZGxlIG90
aGVyIFdlYklETCBleGNlcHRpb24gdHlwZXMuCi0gICAgaWYgKGVjID09IFR5cGVFcnJvcikgewot
ICAgICAgICBpZiAoIW1lc3NhZ2UgfHwgbWVzc2FnZS0+aXNFbXB0eSgpKQotICAgICAgICAgICAg
cmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAqbWVzc2FnZSk7Ci0gICAgfQotCi0gICAgaWYgKGVjID09IFJhbmdlRXJyb3Ip
IHsKLSAgICAgICAgaWYgKCFtZXNzYWdlIHx8IG1lc3NhZ2UtPmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQmFkIHZhbHVl
IikpOwotICAgICAgICByZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAqbWVzc2FnZSk7Ci0g
ICAgfQotCi0gICAgaWYgKGVjID09IFN0YWNrT3ZlcmZsb3dFcnJvcikKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsKLQotICAgIC8vIEZJWE1FOiBBbGwgY2Fs
bGVycyB0byBjcmVhdGVET01FeGNlcHRpb24gbmVlZCB0byBwYXNzIGluIHRoZSBjb3JyZWN0IGds
b2JhbCBvYmplY3QuCi0gICAgLy8gRm9yIG5vdywgd2UncmUgZ29pbmcgdG8gYXNzdW1lIHRoZSBs
ZXhpY2FsR2xvYmFsT2JqZWN0LiBXaGljaCBpcyB3cm9uZyBpbiBjYXNlcyBsaWtlIHRoaXM6Ci0g
ICAgLy8gZnJhbWVzWzBdLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobnVsbCwgbnVsbCk7IC8vIHRo
cm93cyBhbiBleGNlcHRpb24gd2hpY2ggc2hvdWxkIGhhdmUgdGhlIHN1YmZyYW1lJ3MgcHJvdG90
eXBlcy4KLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZGVwcmVjYXRlZEds
b2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKTsKLQotICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlw
dGlvbiBkZXNjcmlwdGlvbihlYyk7Ci0KLSAgICBDU3RyaW5nIG1lc3NhZ2VDU3RyaW5nOwotICAg
IGlmIChtZXNzYWdlKQotICAgICAgICBtZXNzYWdlQ1N0cmluZyA9IG1lc3NhZ2UtPnV0ZjgoKTsK
LSAgICBpZiAobWVzc2FnZSAmJiAhbWVzc2FnZS0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEl0
IGlzIHNhZmUgdG8gZG8gdGhpcyBiZWNhdXNlIHRoZSBjaGFyKiBjb250ZW50cyBvZiB0aGUgQ1N0
cmluZyBhcmUgY29waWVkIGludG8gYSBuZXcgV1RGOjpTdHJpbmcgYmVmb3JlIHRoZSBDU3RyaW5n
IGlzIGRlc3Ryb3llZC4KLSAgICAgICAgZGVzY3JpcHRpb24uZGVzY3JpcHRpb24gPSBtZXNzYWdl
Q1N0cmluZy5kYXRhKCk7Ci0gICAgfQotCi0gICAgSlNWYWx1ZSBlcnJvck9iamVjdDsKLSAgICBz
d2l0Y2ggKGRlc2NyaXB0aW9uLnR5cGUpIHsKLSAgICBjYXNlIERPTUNvcmVFeGNlcHRpb25UeXBl
OgotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIGNhc2UgSURCRGF0YWJhc2VFeGNl
cHRpb25UeXBlOgotI2VuZGlmCi0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIERPTUNvcmVFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEZpbGVFeGNlcHRpb25UeXBlOgotICAgICAgICBlcnJvck9iamVj
dCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBGaWxlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3Jp
cHRpb24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTUUxFeGNlcHRpb25UeXBlOgotICAg
ICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTUUxFeGNlcHRpb246
OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR0V4Y2Vw
dGlvblR5cGU6Ci0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IFNWR0V4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgWFBhdGhFeGNlcHRpb25UeXBlOgotICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBYUGF0aEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoZXJyb3JPYmplY3QpOwotICAg
IGFkZEVycm9ySW5mbyhleGVjLCBhc09iamVjdChlcnJvck9iamVjdCksIHRydWUpOwotICAgIHJl
dHVybiBlcnJvck9iamVjdDsKLX0KLQotSlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0
YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0g
ICAgcmV0dXJuIGNyZWF0ZURPTUV4Y2VwdGlvbihleGVjLCBlYywgJm1lc3NhZ2UpOwotfQotCi1K
U1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb24mJiBl
eGNlcHRpb24pCi17Ci0gICAgcmV0dXJuIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIGV4Y2Vw
dGlvbi5jb2RlKCksIGV4Y2VwdGlvbi5yZWxlYXNlTWVzc2FnZSgpKTsKLX0KLQotdm9pZCBwcm9w
YWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQotewotICAgIEFTU0VSVCgh
dGhyb3dTY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCB0aHJv
d1Njb3BlLCBjcmVhdGVET01FeGNlcHRpb24oc3RhdGUsIFdURk1vdmUoZXhjZXB0aW9uKSkpOwot
fQotCiBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKQogewogICAgIGF1dG8mIHZtID0gc3RhdGUudm0oKTsKQEAgLTM2NSw0MyAr
MTc4LDYgQEAgYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYgcwogICAgIHJl
dHVybiAhYXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKTsKIH0KIAotYm9vbCBCaW5kaW5nU2VjdXJp
dHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShFeGVjU3RhdGUmIHN0YXRlLCBGcmFtZSYgZnJh
bWUsIFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRB
bGxvd0FjY2Vzc1RvRnJhbWUoJnN0YXRlLCAmZnJhbWUsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJv
cikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIG1lc3NhZ2UgPSBmcmFtZS5kb2N1bWVudCgp
LT5kb21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2lu
ZG93KCZzdGF0ZSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJp
dHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coRXhlY1N0YXRlJiBzdGF0ZSwgRE9NV2lu
ZG93JiBnbG9iYWxPYmplY3QsIFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAoQmluZGluZ1Nl
Y3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0
LCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBt
ZXNzYWdlID0gZ2xvYmFsT2JqZWN0LmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2
ZURPTVdpbmRvdygmc3RhdGUpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgcHJpbnRF
cnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
LXsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgZnJhbWUtPmRvY3VtZW50
KCktPmRvbVdpbmRvdygpLT5wcmludEVycm9yTWVzc2FnZShtZXNzYWdlKTsKLX0KLQotU3RydWN0
dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCi17Ci0gICAgSlNET01TdHJ1Y3R1cmVNYXAm
IHN0cnVjdHVyZXMgPSBnbG9iYWxPYmplY3Quc3RydWN0dXJlcyhOb0xvY2tpbmdOZWNlc3Nhcnkp
OwotICAgIHJldHVybiBzdHJ1Y3R1cmVzLmdldChjbGFzc0luZm8pLmdldCgpOwotfQotCi1TdHJ1
Y3R1cmUqIGNhY2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKLXsKLSAg
ICBhdXRvIGxvY2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKGdsb2JhbE9iamVjdC52bSgpLmhlYXAs
IGdsb2JhbE9iamVjdC5nY0xvY2soKSk7Ci0gICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVy
ZXMgPSBnbG9iYWxPYmplY3Quc3RydWN0dXJlcyhsb2NrZXIpOwotICAgIEFTU0VSVCghc3RydWN0
dXJlcy5jb250YWlucyhjbGFzc0luZm8pKTsKLSAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xh
c3NJbmZvLCBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPihnbG9iYWxPYmplY3Qudm0oKSwgJmdsb2Jh
bE9iamVjdCwgc3RydWN0dXJlKSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotfQotCiBzdGF0aWMg
Y29uc3QgaW50MzJfdCBrTWF4SW50MzIgPSAweDdmZmZmZmZmOwogc3RhdGljIGNvbnN0IGludDMy
X3Qga01pbkludDMyID0gLWtNYXhJbnQzMiAtIDE7CiBzdGF0aWMgY29uc3QgdWludDMyX3Qga01h
eFVJbnQzMiA9IDB4ZmZmZmZmZmZVOwpAQCAtNzE1LDMyMCArNDkxLDQgQEAgdWludDY0X3QgdG9V
SW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYQogICAgIHJldHVybiBuOwogfQogCi1jbGFzcyBH
ZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yIHsKLXB1YmxpYzoKLSAgICBHZXRDYWxsZXJHbG9i
YWxPYmplY3RGdW5jdG9yKCkgPSBkZWZhdWx0OwotCi0gICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMg
b3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0Ci0gICAgewotICAgICAgICBp
ZiAoIW1faGFzU2tpcHBlZEZpcnN0RnJhbWUpIHsKLSAgICAgICAgICAgIG1faGFzU2tpcHBlZEZp
cnN0RnJhbWUgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGlu
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXV0byogY29kZUJsb2NrID0gdmlzaXRvci0+
Y29kZUJsb2NrKCkpCi0gICAgICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHZpc2l0b3It
PmNhbGxlZSgpKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBDYWxsZWUgaXMgbm90IGFuIG9iamVj
dCBpZiB0aGUgY2FsbGVyIGlzIFdlYiBBc3NlbWJseS4KLSAgICAgICAgICAgIC8vIEZpZ3VyZSBv
dXQgd2hhdCB0byBkbyBoZXJlLiBXZSBjYW4gcHJvYmFibHkgZ2V0IHRoZSBnbG9iYWwgb2JqZWN0
Ci0gICAgICAgICAgICAvLyBmcm9tIHRoZSB0b3AtbW9zdCBXYXNtIEluc3RhbmNlLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzIxCi0gICAgICAgICAgICBpZiAo
dmlzaXRvci0+Y2FsbGVlKCktPmlzT2JqZWN0KCkpCi0gICAgICAgICAgICAgICAgbV9nbG9iYWxP
YmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPih2aXNpdG9yLT5jYWxsZWUoKSktPmdsb2JhbE9iamVj
dCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7Ci0gICAg
fQotCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
Z2xvYmFsT2JqZWN0OyB9Ci0KLXByaXZhdGU6Ci0gICAgbXV0YWJsZSBib29sIG1faGFzU2tpcHBl
ZEZpcnN0RnJhbWUgeyBmYWxzZSB9OwotICAgIG11dGFibGUgSlNHbG9iYWxPYmplY3QqIG1fZ2xv
YmFsT2JqZWN0IHsgbnVsbHB0ciB9OwotfTsKLQotRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3co
RXhlY1N0YXRlKiBleGVjKQotewotICAgIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgaXRl
cjsKLSAgICBleGVjLT5pdGVyYXRlKGl0ZXIpOwotICAgIHJldHVybiBpdGVyLmdsb2JhbE9iamVj
dCgpID8gYXNKU0RPTVdpbmRvdyhpdGVyLmdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpIDogZmly
c3RET01XaW5kb3coZXhlYyk7Ci19Ci0KLURPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT53cmFwcGVkKCk7Ci19Ci0KLURPTVdpbmRvdyYgZmlyc3RET01XaW5kb3co
RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPnZtRW50
cnlHbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGNh
bkFjY2Vzc0RvY3VtZW50KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRG9jdW1lbnQqIHRhcmdldERv
Y3VtZW50LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCi17Ci0gICAg
Vk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwotCi0gICAgaWYgKCF0YXJnZXREb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgRE9NV2luZG93JiBhY3RpdmUgPSBhY3RpdmVET01XaW5kb3coc3RhdGUpOwotCi0g
ICAgaWYgKGFjdGl2ZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLmNhbkFjY2Vzcyh0YXJn
ZXREb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgc3dpdGNoIChyZXBvcnRpbmdPcHRpb24pIHsKLSAgICBjYXNlIFRocm93U2VjdXJpdHlFcnJv
cjoKLSAgICAgICAgdGhyb3dTZWN1cml0eUVycm9yKCpzdGF0ZSwgc2NvcGUsIHRhcmdldERvY3Vt
ZW50LT5kb21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTG9nU2VjdXJpdHlFcnJvcjoKLSAgICAgICAgcHJp
bnRFcnJvck1lc3NhZ2VGb3JGcmFtZSh0YXJnZXREb2N1bWVudC0+ZnJhbWUoKSwgdGFyZ2V0RG9j
dW1lbnQtPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmUp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3I6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBET01XaW5kb3cmIHRhcmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0
aW5nT3B0aW9uKQotewotICAgIHJldHVybiBjYW5BY2Nlc3NEb2N1bWVudChzdGF0ZSwgdGFyZ2V0
LmRvY3VtZW50KCksIHJlcG9ydGluZ09wdGlvbik7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5
OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBGcmFtZSog
dGFyZ2V0LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCi17Ci0gICAg
cmV0dXJuIHRhcmdldCAmJiBjYW5BY2Nlc3NEb2N1bWVudChzdGF0ZSwgdGFyZ2V0LT5kb2N1bWVu
dCgpLCByZXBvcnRpbmdPcHRpb24pOwotfQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxk
QWxsb3dBY2Nlc3NUb05vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBOb2RlKiB0YXJnZXQpCi17
Ci0gICAgcmV0dXJuICF0YXJnZXQgfHwgY2FuQWNjZXNzRG9jdW1lbnQoJnN0YXRlLCAmdGFyZ2V0
LT5kb2N1bWVudCgpLCBMb2dTZWN1cml0eUVycm9yKTsKLX0KLSAgICAKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSB0aHJvd1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dT
Y29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQotewotICAgIHJldHVybiB0
aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGVycm9yTWVzc2FnZSk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGFwcGVuZEFyZ3VtZW50TXVzdEJlKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIHVuc2ln
bmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQotewotICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiQXJndW1lbnQgIik7Ci0gICAgYnVpbGRlci5hcHBlbmROdW1iZXIoYXJn
dW1lbnRJbmRleCArIDEpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICgnIik7Ci0gICAg
YnVpbGRlci5hcHBlbmQoYXJndW1lbnROYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
IicpIHRvICIpOwotICAgIGlmICghZnVuY3Rpb25OYW1lKSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgidGhlICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChpbnRlcmZhY2VOYW1l
KTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgY29uc3RydWN0b3IiKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBidWlsZGVyLmFwcGVuZChpbnRlcmZhY2VOYW1lKTsKLSAgICAgICAg
YnVpbGRlci5hcHBlbmQoJy4nKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoZnVuY3Rpb25OYW1l
KTsKLSAgICB9Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgbXVzdCBiZSAiKTsKLX0KLQot
SlNDOjpFbmNvZGVkSlNWYWx1ZSByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRy
aWJ1dGVOYW1lKQotewotICAgIGF1dG8mIGNvbnRleHQgPSAqanNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOwotICAgIGNvbnRleHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1l
c3NhZ2VMZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nl
c3MgcHJvcGVydHkgJyIsIGF0dHJpYnV0ZU5hbWUsICInIG9uIGEgbm9uLSIsIGludGVyZmFjZU5h
bWUsICIgb2JqZWN0LiIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotfQotICAgIAotdm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRy
aWJ1dGVOYW1lKQotewotICAgIGF1dG8mIGNvbnRleHQgPSAqanNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oc3RhdGUubGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOwotICAgIGNvbnRleHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1l
c3NhZ2VMZXZlbDo6RXJyb3IsIG1ha2VTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBzZXQg
cHJvcGVydHkgJyIsIGF0dHJpYnV0ZU5hbWUsICInIG9uIGEgbm9uLSIsIGludGVyZmFjZU5hbWUs
ICIgb2JqZWN0LiIpKTsKLX0KLQotdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICBBU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVh
dGVET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUikpOwotfQotCi12b2lkIHRo
cm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZXNzYWdlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhj
ZXB0aW9uKCkpOwotICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOwotICAgIHRocm93
RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9T
VVBQT1JURURfRVJSLCAmbWVzc2FnZVN0cmluZykpOwotfQotCi12b2lkIHRocm93SW52YWxpZFN0
YXRlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBj
b25zdCBjaGFyKiBtZXNzYWdlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwot
ICAgIFN0cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOwotICAgIHRocm93RXhjZXB0aW9uKCZz
dGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElOVkFMSURfU1RBVEVfRVJS
LCAmbWVzc2FnZVN0cmluZykpOwotfQotCi12b2lkIHRocm93U2VjdXJpdHlFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTRUNVUklUWV9F
UlIsIG1lc3NhZ2UpKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVz
dEJlRW51bUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25z
dCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgY2hhciogZXhwZWN0ZWRWYWx1ZXMpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OwotICAgIGFwcGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3Vt
ZW50TmFtZSwgZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOwotICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgib25lIG9mOiAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChleHBlY3Rl
ZFZhbHVlcyk7Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVp
bGRlci50b1N0cmluZygpKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50
TXVzdEJlRnVuY3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFt
ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQot
ewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBhcHBlbmRBcmd1bWVudE11c3RCZShi
dWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGludGVyZmFjZU5hbWUsIGZ1bmN0
aW9uTmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJhIGZ1bmN0aW9uIik7Ci0gICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygp
KTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1l
bnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbklu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0
ZWRUeXBlKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBhcHBlbmRBcmd1bWVu
dE11c3RCZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50
ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImFu
IGluc3RhbmNlIG9mICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVHlwZSk7Ci0gICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygp
KTsKLX0KLQotdm9pZCB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgdGhyb3dUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkludmFsaWQgQXJyYXkgZWxlbWVudCB0eXBlIikpOwot
fQotCi12b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogYXR0cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQotewotICAgIHRo
cm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5h
bWUsICcuJywgYXR0cmlidXRlTmFtZSwgIiBhdHRyaWJ1dGUgbXVzdCBiZSBhbiBpbnN0YW5jZSBv
ZiAiLCBleHBlY3RlZFR5cGUpKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1JlcXVp
cmVkTWVtYmVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSwgY29uc3QgY2hhciogbWVtYmVyTmFtZSwgY29uc3QgY2hhciogZGljdGlvbmFyeU5h
bWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJNZW1iZXIgIik7Ci0gICAgYnVpbGRlci5h
cHBlbmQoZGljdGlvbmFyeU5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7Ci0gICAgYnVp
bGRlci5hcHBlbmQobWVtYmVyTmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgaXMg
cmVxdWlyZWQgYW5kIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIik7Ci0gICAgYnVpbGRlci5hcHBl
bmQoZXhwZWN0ZWRUeXBlKTsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNj
b3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93
Q29uc3RydWN0b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVy
ZmFjZU5hbWUpCi17Ci0gICAgcmV0dXJuIHRocm93Vk1FcnJvcigmc3RhdGUsIHNjb3BlLCBjcmVh
dGVSZWZlcmVuY2VFcnJvcigmc3RhdGUsIG1ha2VTdHJpbmcoaW50ZXJmYWNlTmFtZSwgIiBjb25z
dHJ1Y3RvciBhc3NvY2lhdGVkIGV4ZWN1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIikpKTsK
LX0KLQotdm9pZCB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2Nv
cGUsIEFTQ0lJTGl0ZXJhbCgiVmFsdWUgaXMgbm90IGEgc2VxdWVuY2UiKSk7Ci19Ci0KLXZvaWQg
dGhyb3dOb25GaW5pdGVUeXBlRXJyb3IoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSkKLXsKLSAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVy
YWwoIlRoZSBwcm92aWRlZCB2YWx1ZSBpcyBub24tZmluaXRlIikpOwotfQotCi1TdHJpbmcgbWFr
ZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiVGhlICIsIGlu
dGVyZmFjZU5hbWUsICcuJywgYXR0cmlidXRlTmFtZSwgIiBnZXR0ZXIgY2FuIG9ubHkgYmUgdXNl
ZCBvbiBpbnN0YW5jZXMgb2YgIiwgaW50ZXJmYWNlTmFtZSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpT
VmFsdWUgdGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBh
dHRyaWJ1dGVOYW1lKQotewotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUsIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGF0dHJpYnV0ZU5h
bWUpKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5
cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVk
UHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGlu
dGVyZmFjZU5hbWUsIGF0dHJpYnV0ZU5hbWUpKTsKLX0KLQotYm9vbCB0aHJvd1NldHRlclR5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAg
dGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNl
TmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIHNldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGlu
c3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1T
dHJpbmcgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygiQ2Fu
IG9ubHkgY2FsbCAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGZ1bmN0aW9uTmFtZSwgIiBvbiBpbnN0
YW5jZXMgb2YgIiwgaW50ZXJmYWNlTmFtZSk7Ci19Ci0KLUVuY29kZWRKU1ZhbHVlIHRocm93VGhp
c1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUs
IGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsK
LSAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlVGhpc1R5cGVFcnJv
ck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKSk7Ci19Ci0KLUpTQzo6RW5jb2Rl
ZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKERlZmVycmVkUHJvbWlzZSYg
cHJvbWlzZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFt
ZSkKLXsKLSAgICBwcm9taXNlLnJlamVjdChUeXBlRXJyb3IsIG1ha2VUaGlzVHlwZUVycm9yTWVz
c2FnZShpbnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9t
aXNlV2l0aFRoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBp
bnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lKQotewotICAgIHJldHVybiBjcmVh
dGVSZWplY3RlZFByb21pc2VXaXRoVHlwZUVycm9yKHN0YXRlLCBtYWtlVGhpc1R5cGVFcnJvck1l
c3NhZ2UoaW50ZXJmYWNlTmFtZSwgbWV0aG9kTmFtZSkpOwotfQotCi12b2lkIGNhbGxGdW5jdGlv
bldpdGhDdXJyZW50QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVj
dCYgdGhpc09iamVjdCwgSlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAgICBKU0M6OkNh
bGxEYXRhIGNhbGxEYXRhOwotICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENh
bGxEYXRhKCZmdW5jdGlvbiwgY2FsbERhdGEpOwotICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxs
VHlwZTo6Tm9uZSk7Ci0KLSAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGUuYXJndW1lbnRDb3VudCgpOyArK2kp
Ci0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOwot
ICAgIEpTQzo6Y2FsbCgmc3RhdGUsICZmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmdGhp
c09iamVjdCwgYXJndW1lbnRzKTsKLX0KLQotdm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYg
dmlzaXRvcikKLXsKLSAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PERPTUNvbnN0cnVjdG9y
SlNCdWlsdGluT2JqZWN0Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7Ci0gICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVu
Y3Rpb24pOwotfQotCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsVGhy
b3dUeXBlRXJyb3IoRXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICdu
ZXcnIG9wZXJhdG9yIikpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwot
fQotCi1DYWxsVHlwZSBET01Db25zdHJ1Y3Rvck9iamVjdDo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwg
Q2FsbERhdGEmIGNhbGxEYXRhKQotewotICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNh
bGxUaHJvd1R5cGVFcnJvcjsKLSAgICByZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7Ci19Ci0KLXZvaWQg
dGhyb3dET01TeW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU1lOVEFY
X0VSUikpOwotfQotCi12b2lkIHRocm93RGF0YUNsb25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2Vw
dGlvbigmc3RhdGUsIERBVEFfQ0xPTkVfRVJSKSk7Ci19Ci0KLXZvaWQgdGhyb3dJbmRleFNpemVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0g
ICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRl
LCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5ERVhfU0laRV9FUlIpKTsKLX0K
LQotdm9pZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
LSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0
YXRlLCBUWVBFX01JU01BVENIX0VSUikpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24g
MjExMzk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzLDI1ICsyMywxNCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIkRPTVdyYXBwZXJXb3JsZC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNs
dWRlICJFeGNlcHRpb25Pci5oIgotI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCi0jaW5j
bHVkZSAiSlNET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiSlNEeW5hbWljRG93bmNhc3QuaCIKLSNp
bmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKLSNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGVJbmxp
bmVzLmgiCi0jaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKICNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPGhl
YXAvSGVhcElubGluZXMuaD4KICNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgot
I2luY2x1ZGUgPGhlYXAvV2Vhay5oPgotI2luY2x1ZGUgPGhlYXAvV2Vha0lubGluZXMuaD4KICNp
bmNsdWRlIDxydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg+CiAj
aW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVm
ZmVyLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3RJbmxp
bmVzLmg+CkBAIC00OSw4ICszOCw2IEBACiAjaW5jbHVkZSA8cnVudGltZS9Mb29rdXAuaD4KICNp
bmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1dy
aXRlQmFycmllci5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0dl
dFB0ci5oPgpAQCAtNjYsMTQwICs1MywxMCBAQCBjbGFzcyBKU0Z1bmN0aW9uOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIENhY2hlZFNjcmlwdDsKLWNsYXNzIERlZmVycmVkUHJvbWlz
ZTsKLWNsYXNzIERPTVdpbmRvdzsKLWNsYXNzIEZyYW1lOwogY2xhc3MgVVJMOwotY2xhc3MgTm9k
ZTsKLQotc3RydWN0IEV4Y2VwdGlvbkRldGFpbHMgewotICAgIFN0cmluZyBtZXNzYWdlOwotICAg
IGludCBsaW5lTnVtYmVyIHsgMCB9OwotICAgIGludCBjb2x1bW5OdW1iZXIgeyAwIH07Ci0gICAg
U3RyaW5nIHNvdXJjZVVSTDsKLX07Ci0KLS8vIEJhc2UgY2xhc3MgZm9yIGFsbCBjb25zdHJ1Y3Rv
ciBvYmplY3RzIGluIHRoZSBKU0MgYmluZGluZ3MuCi1jbGFzcyBET01Db25zdHJ1Y3Rvck9iamVj
dCA6IHB1YmxpYyBKU0RPTU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0RPTU9iamVj
dCBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6
OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6OkltcGxl
bWVudHNEZWZhdWx0SGFzSW5zdGFuY2UgfCBKU0M6OlR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0
YTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiwg
SlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNWYWx1ZSk7Ci0KLXByb3RlY3RlZDoKLSAgICBE
T01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7
Ci0KLSAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwotICAgIHN0
YXRpYyBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIEpTQzo6Q2FsbERhdGEmKTsK
LX07Ci0KLWNsYXNzIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0IDogcHVibGljIERPTUNv
bnN0cnVjdG9yT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2Jq
ZWN0IEJhc2U7Ci0KLXByb3RlY3RlZDoKLSAgICBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVj
dChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKLQotICAgIEpT
Qzo6SlNGdW5jdGlvbiogaW5pdGlhbGl6ZUZ1bmN0aW9uKCk7Ci0gICAgdm9pZCBzZXRJbml0aWFs
aXplRnVuY3Rpb24oSlNDOjpWTSYsIEpTQzo6SlNGdW5jdGlvbiYpOwotCi1wcml2YXRlOgotICAg
IEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNGdW5jdGlvbj4gbV9pbml0aWFsaXplRnVuY3Rpb247
Ci19OwotCi1ET01XaW5kb3cmIGNhbGxlckRPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwotRE9N
V2luZG93JiBhY3RpdmVET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKLURPTVdpbmRvdyYgZmly
c3RET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKLQotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLVdF
QkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0
YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFt
ZSk7Ci0KLXZvaWQgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRy
aWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOwotV0VCQ09SRV9FWFBPUlQgYm9v
bCB0aHJvd1NldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYs
IGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwot
Ci12b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJik7Ci12b2lkIHRocm93RGF0YUNsb25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmKTsKLXZvaWQgdGhyb3dET01TeW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYpOyAvLyBOb3QgdGhlIHNhbWUgYXMgYSBKYXZhU2NyaXB0IHN5
bnRheCBlcnJvci4KLXZvaWQgdGhyb3dJbmRleFNpemVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogbWVzc2FnZSk7Ci1XRUJDT1JFX0VY
UE9SVCB2b2lkIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJik7Ci12b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmKTsKLXZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwotdm9pZCB0
aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCB0aHJvd1NlcXVlbmNlVHlw
ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93VHlw
ZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLQotV0VC
Q09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJ
bmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVy
ZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRW
YWx1ZXMpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25F
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50
SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlND
OjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJn
dW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKLVdFQkNPUkVfRVhQT1JU
IEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0
IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOwotSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZh
aWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFy
KiBpbnRlcmZhY2VOYW1lKTsKLQotU3RyaW5nIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotU3Ry
aW5nIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLQotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVk
SlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5h
bWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJy
b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZh
Y2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOwotCi1XRUJDT1JFX0VYUE9SVCBKU0M6
OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRl
TmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VX
aXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5j
b2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7
Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUo
SlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwotV0VCQ09SRV9FWFBP
UlQgSlNDOjpTdHJ1Y3R1cmUqIGNhY2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0Jiwg
SlNDOjpTdHJ1Y3R1cmUqLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6U3RydWN0dXJlKiBnZXRET01TdHJ1Y3R1cmUoSlNDOjpW
TSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+
IEpTQzo6U3RydWN0dXJlKiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRl
Kik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldERP
TVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotCi12b2lkIGNhbGxG
dW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU09iamVj
dCYgdGhpc09iamVjdCwgSlNDOjpKU0Z1bmN0aW9uJik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpT
Q2xhc3M+IEpTQzo6RW5jb2RlZEpTVmFsdWUgY3JlYXRlSlNCdWlsdGluKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU0Z1bmN0aW9uJiBpbml0aWFsaXplRnVuY3Rpb24sIEpTRE9NR2xvYmFsT2JqZWN0
Jik7Ci0KLUpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxk
JiwgSlNDOjpBcnJheUJ1ZmZlciopOwotdm9pZCogd3JhcHBlcktleShKU0M6OkFycmF5QnVmZmVy
Kik7Ci0KLUpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYsIHZvaWQqKTsKLUpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBw
ZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSopOwotSlNDOjpKU0FycmF5QnVmZmVyKiBnZXRJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKLQot
Ym9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RP
TU9iamVjdCosIEpTQzo6V2Vha0hhbmRsZU93bmVyKik7Ci1ib29sIHNldElubGluZUNhY2hlZFdy
YXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgU2NyaXB0V3JhcHBhYmxlKiwgSlNET01PYmplY3QqIHdy
YXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpOwotYm9vbCBzZXRJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqLCBKU0M6
OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3du
ZXIpOwotCi1ib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2
b2lkKiwgSlNET01PYmplY3QqKTsKLWJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdy
YXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9NT2JqZWN0KiB3cmFwcGVyKTsKLWJv
b2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlC
dWZmZXIqLCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIpOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBET01DbGFzcz4gSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29y
bGQmLCBET01DbGFzcyYpOwotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6
OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFJlZjxE
T01DbGFzcz4mIG9iamVjdCkgeyByZXR1cm4gZ2V0Q2FjaGVkV3JhcHBlcih3b3JsZCwgb2JqZWN0
LmdldCgpKTsgfQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJD
bGFzcz4gdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MqLCBXcmFw
cGVyQ2xhc3MqKTsKLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVy
Q2xhc3M+IHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MqLCBX
cmFwcGVyQ2xhc3MqKTsKLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBh
dXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVu
YW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+
Ojp0eXBlOwotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGF1dG8gY3Jl
YXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUPiYmKSAtPiB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBl
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gSlNDOjpKU1ZhbHVlIHdyYXAoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIERPTUNsYXNzJik7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEpTQ2xhc3M+IEpTQ2xhc3MmIGNhc3RUaGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUmKTsK
IAogdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmKTsKIAotY29uc3Qg
SlNDOjpIYXNoVGFibGUmIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoSlNDOjpWTSYsIGNvbnN0
IEpTQzo6SGFzaFRhYmxlJiBzdGF0aWNUYWJsZSk7Ci0KLVN0cmluZyByZXRyaWV2ZUVycm9yTWVz
c2FnZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBK
U0M6OkNhdGNoU2NvcGUmKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiA9IG51
bGxwdHIpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkV4Y2VwdGlvbiosIENhY2hlZFNjcmlwdCogPSBudWxscHRyLCBFeGNlcHRpb25E
ZXRhaWxzKiA9IG51bGxwdHIpOwotdm9pZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEpTQzo6RXhl
Y1N0YXRlKik7Ci0KLUpTQzo6SlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGVjU3Rh
dGUmLCBFeGNlcHRpb24mJik7Ci1KU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpTQzo6
RXhlY1N0YXRlKiwgRXhjZXB0aW9uQ29kZSwgY29uc3QgU3RyaW5nJik7Ci0KLS8vIENvbnZlcnQg
YSBET00gaW1wbGVtZW50YXRpb24gZXhjZXB0aW9uIGludG8gYSBKYXZhU2NyaXB0IGV4Y2VwdGlv
biBpbiB0aGUgZXhlY3V0aW9uIHN0YXRlLgotdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb24mJik7Ci1XRUJDT1JFX0VYUE9S
VCB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOwotCiBKU0M6OkpTVmFsdWUganNTdHJpbmcoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBVUkwmKTsgLy8gZW1wdHkgaWYgdGhlIFVSTCBpcyBudWxsCiAKIEpT
Qzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3Ry
aW5nJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgc3RyaW5nIGlzIG51bGwKQEAgLTIxMCw3ICs2Nyw2
IEBAIEpTQzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXgKIEpTQzo6SlNWYWx1
ZSBqc093bmVkU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CiAK
IFN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7Ci0KIEF0b21p
Y1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7CiAK
IFdFQkNPUkVfRVhQT1JUIFN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEpTQzo6RXhlY1N0
YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CkBAIC0yNTQsOSArMTEwLDYgQEAgSlNDOjpK
U1ZhbHVlIGpzRGF0ZShKU0M6OkV4ZWNTdGF0ZSosIGRvdQogLy8gTmFOIGlmIHRoZSB2YWx1ZSBj
YW4ndCBiZSBjb252ZXJ0ZWQgdG8gYSBkYXRlLgogZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKIAotLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBv
YmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURM
IHNwZWMuCi1KU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpOwotCiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciYpOwogSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpB
cnJheUJ1ZmZlclZpZXcmKTsKIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyKik7CkBAIC0yNjcsMTAgKzEyMCw2IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEoKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCBjb25zdCBWZWN0b3I8UmVmUHRyPFQ+PiYpOwogSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5hbWUmKTsK
IAotSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFs
T2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1
ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIGNvbnN0
IFQmKTsKLUpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUmKTsKLQog
UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJW
aWV3KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bv
c3NpYmx5U2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogUmVmUHRyPEpT
Qzo6SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7CkBAIC0yOTMsMjg1ICsxNDIsMTYgQEAgUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+
IHRvVW5zaGFyZWRVaW50MwogUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVkRmxv
YXQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogUmVmUHRyPEpTQzo6RmxvYXQ2NEFy
cmF5PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1R5cGU+IFZlY3RvcjxSZWY8VD4+IHRvUmVm
TmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBP
UlQgYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
Ci0KLWVudW0gU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9ydFNlY3VyaXR5RXJy
b3IsIExvZ1NlY3VyaXR5RXJyb3IsIFRocm93U2VjdXJpdHlFcnJvciB9OwotbmFtZXNwYWNlIEJp
bmRpbmdTZWN1cml0eSB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hlY2tTZWN1cml0
eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
VCogY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUKik7Ci0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6
RXhlY1N0YXRlJiwgRXhjZXB0aW9uT3I8VCo+JiYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IEV4Y2VwdGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIEV4
Y2VwdGlvbk9yPFQmPiYmKTsKLSAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3co
SlNDOjpFeGVjU3RhdGUqLCBET01XaW5kb3cmLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9IExv
Z1NlY3VyaXR5RXJyb3IpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhK
U0M6OkV4ZWNTdGF0ZSYsIERPTVdpbmRvdyYsIFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgYm9vbCBz
aG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSosIFNlY3VyaXR5
UmVwb3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7Ci0gICAgYm9vbCBzaG91bGRBbGxv
d0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUmLCBGcmFtZSYsIFN0cmluZyYgbWVzc2FnZSk7
Ci0gICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIE5vZGUq
KTsKLX07Ci0KLXZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGNvbnN0IFN0
cmluZyYgbWVzc2FnZSk7Ci0KIFN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3Bl
cnR5TmFtZSk7CiBBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQ
cm9wZXJ0eU5hbWUpOwogCi10ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3Ro
PiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihKU0M6
OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKLQot
Ci1lbnVtIGNsYXNzIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHsgVGhyb3csIFJldHVybkVhcmx5
LCBSZWplY3RQcm9taXNlLCBBc3NlcnQgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4K
LXN0cnVjdCBCaW5kaW5nQ2FsbGVyIHsKLSAgICB1c2luZyBBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlv
biA9IGJvb2woSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlRo
cm93U2NvcGUmKTsKLSAgICB1c2luZyBBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiA9IEpTQzo6SlNW
YWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OlRocm93U2NvcGUmKTsKLSAgICB1
c2luZyBPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpF
eGVjU3RhdGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAgdXNpbmcgUHJvbWlz
ZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQ2xhc3MqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93U2NvcGUm
KTsKLQotICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RGb3JPcGVy
YXRpb24oSlNDOjpFeGVjU3RhdGUmKTsKLQotICAgIHRlbXBsYXRlPFByb21pc2VPcGVyYXRpb25D
YWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNo
b3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2U+Ci0gICAg
c3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbFByb21pc2VPcGVyYXRpb24oSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNvbnN0IGNoYXIq
IG9wZXJhdGlvbk5hbWUpCi0gICAgewotICAgICAgICBBU1NFUlQoc3RhdGUpOwotICAgICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAg
ICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsKLSAgICAgICAg
aWYgKHNob3VsZFRocm93ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5M
SUtFTFkoIXRoaXNPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRo
VGhpc1R5cGVFcnJvcihwcm9taXNlLmdldCgpLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwg
b3BlcmF0aW9uTmFtZSk7Ci0gICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKLSAgICAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZvKCkpOwotICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBj
b2RlIHRvIHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KLSAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhpc09iamVjdCwgV1RGTW92ZShwcm9taXNl
KSwgdGhyb3dTY29wZSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8T3BlcmF0aW9uQ2FsbGVyRnVu
Y3Rpb24gb3BlcmF0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJv
dyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KLSAgICBzdGF0aWMgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBjYWxsT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgY2hh
ciogb3BlcmF0aW9uTmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAg
ICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3RhdGUpOwotICAgICAg
ICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCAmJiBV
TkxJS0VMWSghdGhpc09iamVjdCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBD
YXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
cm93VGhpc1R5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xh
c3NOYW1lLCBvcGVyYXRpb25OYW1lKTsKLSAgICAgICAgICAgIC8vIEZvciBjdXN0b20gcHJvbWlz
ZS1yZXR1cm5pbmcgb3BlcmF0aW9ucwotICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VX
aXRoVGhpc1R5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVy
YXRpb25OYW1lKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7Ci0gICAg
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygp
KTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5l
cmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNPYmplY3QuCi0g
ICAgICAgIHJldHVybiBvcGVyYXRpb25DYWxsZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2Nv
cGUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9uIHNldHRl
ciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6VGhyb3c+Ci0gICAgc3RhdGljIGJvb2wgc2V0QXR0cmlidXRlKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0
Rm9yQXR0cmlidXRlKCpzdGF0ZSwgdGhpc1ZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCF0
aGlzT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3I6OlRocm93KSA/IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhy
b3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpIDogZmFs
c2U7Ci0gICAgICAgIHJldHVybiBzZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgSlNDOjpKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdGhyb3dTY29wZSk7Ci0gICAgfQorV0VCQ09SRV9F
WFBPUlQgYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7CiAKLSAgICB0ZW1wbGF0ZTxBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiBnZXR0ZXIsIENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6
OlRocm93PgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGF0dHJpYnV0ZShKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBjaGFy
KiBhdHRyaWJ1dGVOYW1lKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAg
ICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yQXR0cmlidXRlKCpzdGF0ZSwgdGhpc1ZhbHVl
KTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgewotICAgICAgICAgICAgaWYg
KHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBK
U0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSk7Ci0gICAgICAgICAgICBp
ZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2Up
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9y
KCpzdGF0ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOwotICAg
ICAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNVbmRlZmluZWQoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKGdldHRlcigq
c3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7Ci0gICAgfQotfTsKK3RlbXBsYXRlPEpT
Qzo6TmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9uQ2Fj
aGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNW
YWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwogCi0vLyBFeGNlcHRpb25PciBoYW5kbGluZy4KLXZv
aWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
RXhjZXB0aW9uT3I8dm9pZD4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3Bl
JiwgRXhjZXB0aW9uT3I8VD4mJik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUg
dG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlND
OjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VD4mJiB2YWx1ZSk7CiAKIC8vIElubGluZSBmdW5j
dGlvbnMgYW5kIHRlbXBsYXRlIGRlZmluaXRpb25zLgogCi1pbmxpbmUgSlNDOjpTdHJ1Y3R1cmUq
IERPTUNvbnN0cnVjdG9yT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKLXsK
LSAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7Ci19Ci0KLWlubGluZSBET01Db25zdHJ1Y3Rvck9iamVjdDo6RE9NQ29uc3RydWN0b3JP
YmplY3QoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2Jh
bE9iamVjdCkKLSAgICA6IEpTRE9NT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQotewot
fQotCi1pbmxpbmUgU3RyaW5nIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpjbGFzc05hbWUoY29uc3Qg
SlNPYmplY3QqKQotewotICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIkZ1bmN0aW9uIik7Ci19Ci0K
LWlubGluZSBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6RE9NQ29uc3RydWN0b3JKU0J1
aWx0aW5PYmplY3QoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3Qm
IGdsb2JhbE9iamVjdCkKLSAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwgZ2xv
YmFsT2JqZWN0KQotewotfQotCi1pbmxpbmUgSlNDOjpKU0Z1bmN0aW9uKiBET01Db25zdHJ1Y3Rv
ckpTQnVpbHRpbk9iamVjdDo6aW5pdGlhbGl6ZUZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gbV9p
bml0aWFsaXplRnVuY3Rpb24uZ2V0KCk7Ci19Ci0KLWlubGluZSB2b2lkIERPTUNvbnN0cnVjdG9y
SlNCdWlsdGluT2JqZWN0OjpzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYgdm0sIEpTQzo6
SlNGdW5jdGlvbiYgZnVuY3Rpb24pCi17Ci0gICAgbV9pbml0aWFsaXplRnVuY3Rpb24uc2V0KHZt
LCB0aGlzLCAmZnVuY3Rpb24pOwotfQotCi1pbmxpbmUgSlNET01HbG9iYWxPYmplY3QqIGRlcHJl
Y2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgLy8gRklYTUU6IENhbGxlcnMgdG8gdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNpbmcgdGhl
IGdsb2JhbCBvYmplY3QKLSAgICAvLyBmcm9tIHdoaWNoIHRoZSBvYmplY3QgaXMgYmVpbmcgY3Jl
YXRlZCwgaW5zdGVhZCBvZiBhc3N1bWluZyB0aGUgbGV4aWNhbCBvbmUuCi0gICAgLy8gZS5nLiBz
dWJmcmFtZS5kb2N1bWVudC5ib2R5IHNob3VsZCB1c2UgdGhlIHN1YmZyYW1lJ3MgZ2xvYmFsIG9i
amVjdCwgbm90IHRoZSBsZXhpY2FsIG9uZS4KLSAgICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewot
ICAgIGlmIChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0Q2FjaGVkRE9NU3RydWN0dXJl
KGdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjppbmZvKCkpKQotICAgICAgICByZXR1cm4gc3Ry
dWN0dXJlOwotICAgIHJldHVybiBjYWNoZURPTVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIFdyYXBw
ZXJDbGFzczo6Y3JlYXRlU3RydWN0dXJlKHZtLCAmZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6
OmNyZWF0ZVByb3RvdHlwZSh2bSwgJmdsb2JhbE9iamVjdCkpLCBXcmFwcGVyQ2xhc3M6OmluZm8o
KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3Ry
dWN0dXJlKiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQot
ewotICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGlzIHdyb25nLiBJdCB1c2VzIHRoZSB3cm9u
ZyBnbG9iYWwgb2JqZWN0IGZvciBjcmVhdGluZyB0aGUgcHJvdG90eXBlIHN0cnVjdHVyZS4KLSAg
ICByZXR1cm4gZ2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFzcz4oZXhlYy0+dm0oKSwgKmRlcHJl
Y2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoZXhlYykpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRET01Qcm90b3R5cGUo
SlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICBy
ZXR1cm4gSlNDOjpqc0Nhc3Q8SlNDOjpKU09iamVjdCo+KGFzT2JqZWN0KGdldERPTVN0cnVjdHVy
ZTxXcmFwcGVyQ2xhc3M+KHZtLCAqSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9i
YWxPYmplY3QpKS0+c3RvcmVkUHJvdG90eXBlKCkpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
SlNDbGFzcz4gaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUgY3JlYXRlSlNCdWlsdGluKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU0Z1bmN0aW9uJiBpbml0aWFsaXplRnVuY3Rpb24sIEpT
RE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi17Ci0gICAgSlNDOjpKU09iamVjdCogb2Jq
ZWN0ID0gSlNDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxKU0NsYXNzPihnbG9iYWxPYmpl
Y3Qudm0oKSwgZ2xvYmFsT2JqZWN0KSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgY2FsbEZ1bmN0aW9u
V2l0aEN1cnJlbnRBcmd1bWVudHMoc3RhdGUsICpvYmplY3QsIGluaXRpYWxpemVGdW5jdGlvbik7
Ci0gICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKG9iamVjdCk7Ci19Ci0KLWlubGluZSBK
U0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQs
IEpTQzo6QXJyYXlCdWZmZXIqKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlVHlw
ZWRBcnJheUNvbnRyb2xsZXIqPih3b3JsZC52bSgpLm1fdHlwZWRBcnJheUNvbnRyb2xsZXIuZ2V0
KCkpLT53cmFwcGVyT3duZXIoKTsKLX0KLQotaW5saW5lIHZvaWQqIHdyYXBwZXJLZXkoSlNDOjpB
cnJheUJ1ZmZlciogZG9tT2JqZWN0KQotewotICAgIHJldHVybiBkb21PYmplY3Q7Ci19Ci0KLWlu
bGluZSBKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQm
LCB2b2lkKikgeyByZXR1cm4gbnVsbHB0cjsgfQotaW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVk
V3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqLCBKU0M6OldlYWtI
YW5kbGVPd25lciopIHsgcmV0dXJuIGZhbHNlOyB9Ci1pbmxpbmUgYm9vbCBjbGVhcklubGluZUNh
Y2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0KikgeyByZXR1
cm4gZmFsc2U7IH0KLQotaW5saW5lIEpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVy
KERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0KQotewot
ICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIGRvbU9iamVjdC0+d3JhcHBlcigpOwotfQotCi1pbmxpbmUgSlNDOjpKU0FycmF5QnVm
ZmVyKiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6
QXJyYXlCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXItPm1fd3JhcHBlci5nZXQoKTsK
LX0KLQotaW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQm
IHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01PYmplY3QqIHdyYXBwZXIs
IEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5p
c05vcm1hbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0LT5zZXRXcmFw
cGVyKHdyYXBwZXIsIHdyYXBwZXJPd25lciwgJndvcmxkKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotaW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6SlNBcnJheUJ1ZmZlciogd3Jh
cHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcikKLXsKLSAgICBpZiAoIXdv
cmxkLmlzTm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkb21PYmplY3QtPm1f
d3JhcHBlciA9IEpTQzo6V2VhazxKU0M6OkpTQXJyYXlCdWZmZXI+KHdyYXBwZXIsIHdyYXBwZXJP
d25lciwgJndvcmxkKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIGJvb2wgY2xlYXJJ
bmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJs
ZSogZG9tT2JqZWN0LCBKU0RPTU9iamVjdCogd3JhcHBlcikKLXsKLSAgICBpZiAoIXdvcmxkLmlz
Tm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkb21PYmplY3QtPmNsZWFyV3Jh
cHBlcih3cmFwcGVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIGJvb2wgY2xlYXJJ
bmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZm
ZXIqIGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKQotewotICAgIGlmICgh
d29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHdlYWtDbGVhcihk
b21PYmplY3QtPm1fd3JhcHBlciwgd3JhcHBlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVk
V3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyYgZG9tT2JqZWN0KQotewot
ICAgIGlmIChhdXRvKiB3cmFwcGVyID0gZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgJmRv
bU9iamVjdCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiB3b3JsZC5tX3dy
YXBwZXJzLmdldCh3cmFwcGVyS2V5KCZkb21PYmplY3QpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQgY2FjaGVXcmFw
cGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QsIFdyYXBwZXJD
bGFzcyogd3JhcHBlcikKLXsKLSAgICBKU0M6OldlYWtIYW5kbGVPd25lciogb3duZXIgPSB3cmFw
cGVyT3duZXIod29ybGQsIGRvbU9iamVjdCk7Ci0gICAgaWYgKHNldElubGluZUNhY2hlZFdyYXBw
ZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlciwgb3duZXIpKQotICAgICAgICByZXR1cm47Ci0g
ICAgd2Vha0FkZCh3b3JsZC5tX3dyYXBwZXJzLCB3cmFwcGVyS2V5KGRvbU9iamVjdCksIEpTQzo6
V2VhazxKU0M6OkpTT2JqZWN0Pih3cmFwcGVyLCBvd25lciwgJndvcmxkKSk7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lk
IHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzKiBkb21PYmpl
Y3QsIFdyYXBwZXJDbGFzcyogd3JhcHBlcikKLXsKLSAgICBpZiAoY2xlYXJJbmxpbmVDYWNoZWRX
cmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBwZXIpKQotICAgICAgICByZXR1cm47Ci0gICAg
d2Vha1JlbW92ZSh3b3JsZC5tX3dyYXBwZXJzLCB3cmFwcGVyS2V5KGRvbU9iamVjdCksIHdyYXBw
ZXIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gaW5saW5l
IGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8
VD4mJiBkb21PYmplY3QpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxE
T01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8
RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZQotewotICAgIHVzaW5nIFdyYXBwZXJDbGFz
cyA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBw
ZXJDbGFzczsKLQotICAgIEFTU0VSVCghZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndv
cmxkKCksIGRvbU9iamVjdCkpOwotICAgIGF1dG8qIGRvbU9iamVjdFB0ciA9IGRvbU9iamVjdC5w
dHIoKTsKLSAgICBhdXRvKiB3cmFwcGVyID0gV3JhcHBlckNsYXNzOjpjcmVhdGUoZ2V0RE9NU3Ry
dWN0dXJlPFdyYXBwZXJDbGFzcz4oZ2xvYmFsT2JqZWN0LT52bSgpLCAqZ2xvYmFsT2JqZWN0KSwg
Z2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGRvbU9iamVjdCkpOwotICAgIGNhY2hlV3JhcHBlcihnbG9i
YWxPYmplY3QtPndvcmxkKCksIGRvbU9iamVjdFB0ciwgd3JhcHBlcik7Ci0gICAgcmV0dXJuIHdy
YXBwZXI7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBpbmxp
bmUgYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJl
ZjxUPiYmIGRvbU9iamVjdCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2Ft
ZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFp
dHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZQotewotICAgIHJldHVybiBjcmVhdGVX
cmFwcGVyPERPTUNsYXNzPihnbG9iYWxPYmplY3QsIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxET01D
bGFzcz4oV1RGTW92ZShkb21PYmplY3QpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNs
YXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHdyYXAoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBET01DbGFzcyYgZG9tT2JqZWN0KQotewotICAg
IGlmIChhdXRvKiB3cmFwcGVyID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxk
KCksIGRvbU9iamVjdCkpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiB0b0pT
TmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmplY3QsIFJlZjxET01DbGFzcz4oZG9tT2JqZWN0
KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0NsYXNzJiBjYXN0
VGhpc1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKLXsKLSAgICBhdXRvIHRoaXNWYWx1ZSA9
IHN0YXRlLnRoaXNWYWx1ZSgpOwotICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Rvd25j
YXN0PEpTQ2xhc3MqPihzdGF0ZS52bSgpLCB0aGlzVmFsdWUpOwotICAgIEFTU0VSVChjYXN0ZWRU
aGlzKTsKLSAgICByZXR1cm4gKmNhc3RlZFRoaXM7Ci19Ci0KIGlubGluZSBpbnQzMl90IGZpbml0
ZUludDMyVmFsdWUoSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgYm9v
bCYgb2theSkKIHsKICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUudG9OdW1iZXIoZXhlYyk7CkBA
IC01NzksMzIgKzE1OSw2IEBAIGlubGluZSBpbnQzMl90IGZpbml0ZUludDMyVmFsdWUoSlNDOjpK
U1YKICAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7CiB9CiAKLS8vIFZhbGlkYXRlcyB0
aGF0IHRoZSBwYXNzZWQgb2JqZWN0IGlzIGEgc2VxdWVuY2UgdHlwZSBwZXIgc2VjdGlvbiA0LjEu
MTMgb2YgdGhlIFdlYklETCBzcGVjLgotaW5saW5lIEpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5j
ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCYgbGVu
Z3RoKQotewotICAgIEpTQzo6Vk0mIHZtID0gZXhlYy52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IHZh
bHVlLmdldE9iamVjdCgpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIHRocm93U2VxdWVu
Y2VUeXBlRXJyb3IoZXhlYywgc2NvcGUpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0KLSAgICBKU0M6OkpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBvYmplY3QtPmdldCgmZXhlYywgZXhl
Yy5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKLQotICAgIGlmIChsZW5ndGhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7
Ci0gICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoZXhlYywgc2NvcGUpOwotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBsZW5ndGggPSBsZW5ndGhWYWx1ZS50b1VJbnQz
MigmZXhlYyk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0KLSAg
ICByZXR1cm4gb2JqZWN0OwotfQotCiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5
QnVmZmVyJiBidWZmZXIpCiB7CiAgICAgaWYgKGF1dG8gcmVzdWx0ID0gZ2V0Q2FjaGVkV3JhcHBl
cihnbG9iYWxPYmplY3QtPndvcmxkKCksIGJ1ZmZlcikpCkBAIC02NzYsMjEgKzIzMCw2IEBAIGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSoKICAgICByZXR1cm4gSlNDOjpT
eW1ib2w6OmNyZWF0ZShleGVjLT52bSgpLCBwcml2YXRlTmFtZS51aWQoKSk7CiB9CiAKLWlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUl0
ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwgdmFsdWUsIGZhbHNlKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB0b0pT
KCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUpLCBmYWxzZSk7Ci19Ci0KLWlubGluZSBKU0M6
OkpTVmFsdWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSkKLXsKLSAgICBy
ZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCBKU0M6OmpzVW5kZWZpbmVk
KCksIHRydWUpOwotfQotCiBpbmxpbmUgUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bv
c3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFs
dWUpCiB7CiAgICAgYXV0byogd3JhcHBlciA9IGpzRHluYW1pY0Rvd25jYXN0PEpTQzo6SlNBcnJh
eUJ1ZmZlclZpZXcqPih2bSwgdmFsdWUpOwpAQCAtNzI3LDMwICsyNjYsNiBAQCBpbmxpbmUgUmVm
UHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVW5zaGFyCiBpbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQz
MkFycmF5PiB0b1Vuc2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0
MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CiBpbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5
PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUp
IHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFw
dG9yPih2bSwgdmFsdWUpOyB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEpTVD4g
aW5saW5lIFZlY3RvcjxSZWY8VD4+IHRvUmVmTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgp
OwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkgewotICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRl
LCBzY29wZSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgVmVjdG9yPFJlZjxU
Pj4gcmVzdWx0OwotICAgIGZvckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwgdmFsdWUsIFsmcmVzdWx0
XShKU0M6OlZNJiB2bSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1
ZSkgewotICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICAgICAgaWYgKGpzVmFsdWUuaW5oZXJpdHModm0sIEpTVDo6aW5mbygpKSkgewotICAgICAgICAg
ICAgYXV0byogb2JqZWN0ID0gSlNUOjp0b1dyYXBwZWQodm0sIGpzVmFsdWUpOwotICAgICAgICAg
ICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCpvYmplY3QpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9yKCpz
dGF0ZSwgc2NvcGUpOwotICAgIH0pOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIGlubGluZSBT
dHJpbmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KQogewogICAgIEFTU0VSVCghcHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpOwpAQCAtNzY3LDU5ICsy
ODIsNCBAQCB0ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0CiAgICAgcmV0
dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZt
KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9wZXJ0eU5hbWUucHVi
bGljTmFtZSgpLCBuYXRpdmVGdW5jdGlvbikpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgcHJv
cGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCi17Ci0gICAgaWYgKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBwcm9wYWdhdGVFeGNlcHRpb25TbG93
UGF0aChzdGF0ZSwgdGhyb3dTY29wZSwgV1RGTW92ZShleGNlcHRpb24pKTsKLX0KLQotaW5saW5l
IHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25Pcjx2b2lkPiYmIHZhbHVlKQotewotICAgIGlm
IChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpCi0gICAgICAgIHByb3BhZ2F0ZUV4Y2Vw
dGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJ
S0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9u
KHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICBy
ZXR1cm4geyB9OwotICAgIH0KLSAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3Qs
IHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQotewotICAgIGlmIChVTkxJS0VMWSh2YWx1
ZS5oYXNFeGNlcHRpb24oKSkpIHsKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0
aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm4geyB9
OwotICAgIH0KLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBUJiBub2RlKQotewotICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vz
c1RvTm9kZShzdGF0ZSwgJm5vZGUpID8gJm5vZGUgOiBudWxscHRyOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9k
ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQqIG5vZGUpCi17Ci0gICAgcmV0dXJuIHNob3VsZEFs
bG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBub2RlKSA/IG5vZGUgOiBudWxscHRyOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0eTo6
Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb25PcjxU
Kj4mJiB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGNoZWNrU2VjdXJpdHlG
b3JOb2RlKHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5OjpjaGVj
a1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQmPiYm
IHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJu
IHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZvck5v
ZGUoc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5n
Q2FsbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nQ2FsbGVyLmgJKHJldmlzaW9uIDIxMTM1MykJKGZyb20gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nLmg6MjExMzUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nQ2FsbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MjUg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiwgMjAwOC0yMDA5LCAyMDEzLCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAx
MiBFcmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTMgTWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgi
CisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCisj
aW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIK
KyNpbmNsdWRlICJKU0R5bmFtaWNEb3duY2FzdC5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJs
ZS5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCIKKyNpbmNsdWRlICJXZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUg
PGhlYXAvSGVhcElubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5o
PgorI2luY2x1ZGUgPGhlYXAvV2Vhay5oPgorI2luY2x1ZGUgPGhlYXAvV2Vha0lubGluZXMuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+CisjaW5jbHVkZSA8
cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg+
CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5
QnVmZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3RJ
bmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8
cnVudGltZS9Mb29rdXAuaD4KKyNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+
CisjaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGlt
ZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4K
KyNpbmNsdWRlIDxydW50aW1lL1dyaXRlQmFycmllci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhp
cyBmaWxlIGEgbG90IGVhc2llciB0byByZWFkIGJ5IHB1dHRpbmcgYWxsIGZ1bmN0aW9uIGRlY2xh
cmF0aW9ucyBhdCB0aGUgdG9wLAorLy8gYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zIGJlbG93LCBl
dmVuIGZvciB0ZW1wbGF0ZSBhbmQgaW5saW5lIGZ1bmN0aW9ucy4KKworbmFtZXNwYWNlIEpTQyB7
CitjbGFzcyBKU0Z1bmN0aW9uOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENh
Y2hlZFNjcmlwdDsKK2NsYXNzIERlZmVycmVkUHJvbWlzZTsKK2NsYXNzIERPTVdpbmRvdzsKK2Ns
YXNzIEZyYW1lOworY2xhc3MgVVJMOworY2xhc3MgTm9kZTsKKworc3RydWN0IEV4Y2VwdGlvbkRl
dGFpbHMgeworICAgIFN0cmluZyBtZXNzYWdlOworICAgIGludCBsaW5lTnVtYmVyIHsgMCB9Owor
ICAgIGludCBjb2x1bW5OdW1iZXIgeyAwIH07CisgICAgU3RyaW5nIHNvdXJjZVVSTDsKK307CisK
Ky8vIEJhc2UgY2xhc3MgZm9yIGFsbCBjb25zdHJ1Y3RvciBvYmplY3RzIGluIHRoZSBKU0MgYmlu
ZGluZ3MuCitjbGFzcyBET01Db25zdHJ1Y3Rvck9iamVjdCA6IHB1YmxpYyBKU0RPTU9iamVjdCB7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0RPTU9iamVjdCBCYXNlOworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJ
bXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6OkltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2Ug
fCBKU0M6OlR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpT
Qzo6SlNWYWx1ZSk7CisKK3Byb3RlY3RlZDoKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdChKU0M6
OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKKyAgICBzdGF0aWMgU3RyaW5nIGNs
YXNzTmFtZShjb25zdCBKU09iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkNhbGxUeXBlIGdldENh
bGxEYXRhKEpTQ2VsbCosIEpTQzo6Q2FsbERhdGEmKTsKK307CisKK2NsYXNzIERPTUNvbnN0cnVj
dG9ySlNCdWlsdGluT2JqZWN0IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoK
KyAgICBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSosIEpTRE9N
R2xvYmFsT2JqZWN0Jik7CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2Vs
bCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKKworICAgIEpTQzo6SlNGdW5jdGlvbiogaW5pdGlhbGl6
ZUZ1bmN0aW9uKCk7CisgICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYsIEpT
Qzo6SlNGdW5jdGlvbiYpOworCitwcml2YXRlOgorICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6
SlNGdW5jdGlvbj4gbV9pbml0aWFsaXplRnVuY3Rpb247Cit9OworCitET01XaW5kb3cmIGNhbGxl
ckRPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworRE9NV2luZG93JiBhY3RpdmVET01XaW5kb3co
SlNDOjpFeGVjU3RhdGUqKTsKK0RPTVdpbmRvdyYgZmlyc3RET01XaW5kb3coSlNDOjpFeGVjU3Rh
dGUqKTsKKworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZXBvcnREZXByZWNh
dGVkR2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1l
LCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0
RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CisKK3ZvaWQgdGhyb3dBdHRyaWJ1
dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFy
KiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBl
eHBlY3RlZFR5cGUpOworV0VCQ09SRV9FWFBPUlQgYm9vbCB0aHJvd1NldHRlclR5cGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworCit2b2lkIHRocm93QXJyYXlFbGVtZW50
VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93
RGF0YUNsb25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKK3ZvaWQg
dGhyb3dET01TeW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOyAv
LyBOb3QgdGhlIHNhbWUgYXMgYSBKYXZhU2NyaXB0IHN5bnRheCBlcnJvci4KK3ZvaWQgdGhyb3dJ
bmRleFNpemVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0
aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
Y29uc3QgY2hhciogbWVzc2FnZSk7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHRocm93Tm9uRmluaXRl
VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93
Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKK3Zv
aWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29w
ZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwordm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworV0VC
Q09SRV9FWFBPUlQgdm9pZCB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKKworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVk
SlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1l
bnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRWYWx1ZXMpOworSlNDOjpFbmNvZGVkSlNW
YWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3Vt
ZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0Fy
Z3VtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWdu
ZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBm
dW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hh
ciogZXhwZWN0ZWRUeXBlKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhy
b3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29w
ZSYsIGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBj
b25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0
cnVjdG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKTsKKworU3Ry
aW5nIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworU3RyaW5nIG1ha2VUaGlzVHlwZUVycm9yTWVz
c2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1l
KTsKKworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVy
ZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlND
OjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUpOworCitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFBy
b21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBK
U0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJl
ZFByb21pc2UmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBvcGVyYXRp
b25OYW1lKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlz
ZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6
U3RydWN0dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmLCBjb25z
dCBKU0M6OkNsYXNzSW5mbyopOworV0VCQ09SRV9FWFBPUlQgSlNDOjpTdHJ1Y3R1cmUqIGNhY2hl
RE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpTdHJ1Y3R1cmUqLCBjb25zdCBK
U0M6OkNsYXNzSW5mbyopOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6
U3RydWN0dXJlKiBnZXRET01TdHJ1Y3R1cmUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6U3RydWN0dXJlKiBkZXByZWNh
dGVkR2V0RE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRlKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBX
cmFwcGVyQ2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldERPTVByb3RvdHlwZShKU0M6OlZNJiwgSlND
OjpKU0dsb2JhbE9iamVjdCopOworCit2b2lkIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1l
bnRzKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgSlNDOjpKU0Z1
bmN0aW9uJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IEpTQzo6RW5jb2RlZEpTVmFs
dWUgY3JlYXRlSlNCdWlsdGluKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU0Z1bmN0aW9uJiBpbml0
aWFsaXplRnVuY3Rpb24sIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKK0pTQzo6V2Vha0hhbmRsZU93
bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciopOwor
dm9pZCogd3JhcHBlcktleShKU0M6OkFycmF5QnVmZmVyKik7CisKK0pTRE9NT2JqZWN0KiBnZXRJ
bmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqKTsKK0pTRE9NT2JqZWN0
KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJs
ZSopOworSlNDOjpKU0FycmF5QnVmZmVyKiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBw
ZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKKworYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFw
cGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCosIEpTQzo6V2Vha0hhbmRs
ZU93bmVyKik7Citib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwg
U2NyaXB0V3JhcHBhYmxlKiwgSlNET01PYmplY3QqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93
bmVyKiB3cmFwcGVyT3duZXIpOworYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBw
ZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqLCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIs
IEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpOworCitib29sIGNsZWFySW5saW5l
Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqKTsKK2Jv
b2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBw
YWJsZSosIEpTRE9NT2JqZWN0KiB3cmFwcGVyKTsKK2Jvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFw
cGVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqLCBKU0M6OkpTQXJyYXlCdWZm
ZXIqIHdyYXBwZXIpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gSlNDOjpKU09iamVj
dCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyYpOwordGVtcGxh
dGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFw
cGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFJlZjxET01DbGFzcz4mIG9iamVjdCkgeyByZXR1
cm4gZ2V0Q2FjaGVkV3JhcHBlcih3b3JsZCwgb2JqZWN0LmdldCgpKTsgfQordGVtcGxhdGU8dHlw
ZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gdm9pZCBjYWNoZVdyYXBwZXIo
RE9NV3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MqLCBXcmFwcGVyQ2xhc3MqKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IHZvaWQgdW5jYWNoZVdyYXBw
ZXIoRE9NV3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MqLCBXcmFwcGVyQ2xhc3MqKTsKK3RlbXBsYXRl
PHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01H
bG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRl
clRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlOwordGVtcGxhdGU8dHlwZW5h
bWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9i
amVjdCosIFJlZjxUPiYmKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1l
PERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBE
T01DbGFzcz4gSlNDOjpKU1ZhbHVlIHdyYXAoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCosIERPTUNsYXNzJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IEpTQ2xhc3Mm
IGNhc3RUaGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUmKTsKKwordm9pZCBhZGRJbXB1cmVQcm9wZXJ0
eShjb25zdCBBdG9taWNTdHJpbmcmKTsKKworY29uc3QgSlNDOjpIYXNoVGFibGUmIGdldEhhc2hU
YWJsZUZvckdsb2JhbERhdGEoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SGFzaFRhYmxlJiBzdGF0aWNU
YWJsZSk7CisKK1N0cmluZyByZXRyaWV2ZUVycm9yTWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBKU0M6OkNhdGNoU2NvcGUmKTsKK1dFQkNP
UkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIpOworV0VCQ09SRV9FWFBPUlQg
dm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiosIENh
Y2hlZFNjcmlwdCogPSBudWxscHRyLCBFeGNlcHRpb25EZXRhaWxzKiA9IG51bGxwdHIpOwordm9p
ZCByZXBvcnRDdXJyZW50RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CisKK0pTQzo6SlNWYWx1
ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb24mJik7CitKU0M6
OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgRXhjZXB0aW9uQ29k
ZSwgY29uc3QgU3RyaW5nJik7CisKKy8vIENvbnZlcnQgYSBET00gaW1wbGVtZW50YXRpb24gZXhj
ZXB0aW9uIGludG8gYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBpbiB0aGUgZXhlY3V0aW9uIHN0YXRl
Lgordm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2Nv
cGUmLCBFeGNlcHRpb24mJik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlv
blNsb3dQYXRoKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYp
OworCitKU0M6OkpTVmFsdWUganNTdHJpbmcoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBVUkwmKTsg
Ly8gZW1wdHkgaWYgdGhlIFVSTCBpcyBudWxsCisKK0pTQzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5k
ZWZpbmVkKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7IC8vIHVuZGVmaW5lZCBpZiB0
aGUgc3RyaW5nIGlzIG51bGwKK0pTQzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6
RXhlY1N0YXRlKiwgY29uc3QgVVJMJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgVVJMIGlzIG51bGwK
KworLy8gU2VlIEphdmFTY3JpcHRDb3JlIGZvciBleHBsYW5hdGlvbjogU2hvdWxkIGJlIHVzZWQg
Zm9yIGFueSBzdHJpbmcgdGhhdCBpcyBhbHJlYWR5IG93bmVkIGJ5IGFub3RoZXIKKy8vIG9iamVj
dCwgdG8gbGV0IHRoZSBlbmdpbmUga25vdyB0aGF0IGNvbGxlY3RpbmcgdGhlIEpTU3RyaW5nIHdy
YXBwZXIgaXMgdW5saWtlbHkgdG8gc2F2ZSBtZW1vcnkuCitKU0M6OkpTVmFsdWUganNPd25lZFN0
cmluZ09yTnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOworCitTdHJpbmcgcHJv
cGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOworCitBdG9taWNTdHJpbmcgcHJv
cGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOworCitXRUJDT1JFX0VY
UE9SVCBTdHJpbmcgaWRlbnRpZmllclRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9CeXRlU3Ry
aW5nKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmlu
ZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50
aWZpZXImKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6
SlNWYWx1ZSwgSlNDOjpFeGVjU3RhdGUqLCBib29sJiBva2F5KTsKKworLy8gVGhlIGZvbGxvd2lu
ZyBmdW5jdGlvbnMgY29udmVydCB2YWx1ZXMgdG8gaW50ZWdlcnMgYXMgcGVyIHRoZSBXZWJJREwg
c3BlY2lmaWNhdGlvbi4KKy8vIFRoZSBjb252ZXJzaW9uIGZhaWxzIGlmIHRoZSB2YWx1ZSBjYW5u
b3QgYmUgY29udmVydGVkIHRvIGEgbnVtYmVyIG9yLCBpZiBFbmZvcmNlUmFuZ2UgaXMgc3BlY2lm
aWVkLAorLy8gdGhlIHZhbHVlIGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSBkZXN0aW5hdGlv
biBpbnRlZ2VyIHR5cGUuCisKK1dFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDhFbmZvcmNlUmFu
Z2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDhf
dCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dF
QkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VS
YW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQz
Ml90IHRvSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
V0VCQ09SRV9FWFBPUlQgdWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0RW5mb3Jj
ZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVp
bnQ2NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKKworV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQx
NkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVp
bnQxNl90IHRvVUludDE2Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VC
Q09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgdG9VSW50MzJDbGFtcChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjRDbGFt
cChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRf
dCB0b1VJbnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworV0VCQ09S
RV9FWFBPUlQgaW50OF90IHRvSW50OChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitX
RUJDT1JFX0VYUE9SVCB1aW50OF90IHRvVUludDgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOworV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2KEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2KEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJ
bnQ2NChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK0pTQzo6SlNWYWx1ZSBqc0Rh
dGUoSlNDOjpFeGVjU3RhdGUqLCBkb3VibGUgdmFsdWUpOworCisvLyBOYU4gaWYgdGhlIHZhbHVl
IGNhbid0IGJlIGNvbnZlcnRlZCB0byBhIGRhdGUuCitkb3VibGUgdmFsdWVUb0RhdGUoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOworCisvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2Vk
IG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJ
REwgc3BlYy4KK0pTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSwgdW5zaWduZWQmIGxlbmd0aCk7CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyJik7CitKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkFycmF5QnVmZmVyVmlldyYpOworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBK
U0RPTUdsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXIqKTsKK0pTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXJW
aWV3Kik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IFJlZlB0cjxUPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBWZWN0b3I8VD4mKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqLCBjb25zdCBWZWN0b3I8UmVmUHRyPFQ+PiYpOworSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6UHJp
dmF0ZU5hbWUmKTsKKworSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9i
amVjdCYsIGNvbnN0IFQmKTsKK0pTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVj
U3RhdGUmKTsKKworUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVk
QXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50
OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUp
OworUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDE2QXJyYXkoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5
U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVp
bnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOworUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50
OENsYW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQx
NkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7CitSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQzMkFycmF5
KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Bv
c3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRy
PEpTQzo6RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0m
LCBKU0M6OkpTVmFsdWUpOworCitSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5zaGFy
ZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJ
bnQ4QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitS
ZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiwgSlND
OjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5
KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9VbnNo
YXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50
OENsYW1wZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6
OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvVW5zaGFyZWRVaW50MTZBcnJh
eShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vu
c2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpG
bG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7CitSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEpT
VHlwZT4gVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworZW51bSBTZWN1cml0eVJlcG9ydGluZ09wdGlv
biB7IERvTm90UmVwb3J0U2VjdXJpdHlFcnJvciwgTG9nU2VjdXJpdHlFcnJvciwgVGhyb3dTZWN1
cml0eUVycm9yIH07CituYW1lc3BhY2UgQmluZGluZ1NlY3VyaXR5IHsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIFQmKTsK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4
ZWNTdGF0ZSYsIFQqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNlcHRpb25PcjxUKj4g
Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb25PcjxUKj4mJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlG
b3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uT3I8VCY+JiYpOworICAgIGJvb2wgc2hv
dWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSosIERPTVdpbmRvdyYsIFNl
Y3VyaXR5UmVwb3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7CisgICAgYm9vbCBzaG91
bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlJiwgRE9NV2luZG93JiwgU3Ry
aW5nJiBtZXNzYWdlKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4
ZWNTdGF0ZSosIEZyYW1lKiwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1cml0eUVy
cm9yKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSYs
IEZyYW1lJiwgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9O
b2RlKEpTQzo6RXhlY1N0YXRlJiwgTm9kZSopOworfTsKKwordm9pZCBwcmludEVycm9yTWVzc2Fn
ZUZvckZyYW1lKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworU3RyaW5nIHByb3Bl
cnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKK0F0b21pY1N0cmluZyBwcm9wZXJ0
eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7CisKK3RlbXBsYXRlPEpTQzo6
TmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9uQ2FjaGlu
Z1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1
ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOworCisKK2VudW0gY2xhc3MgQ2FzdGVkVGhpc0Vycm9yQmVo
YXZpb3IgeyBUaHJvdywgUmV0dXJuRWFybHksIFJlamVjdFByb21pc2UsIEFzc2VydCB9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPgorc3RydWN0IEJpbmRpbmdDYWxsZXIgeworICAgIHVz
aW5nIEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9uID0gYm9vbChKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xh
c3MmLCBKU0M6OkpTVmFsdWUsIEpTQzo6VGhyb3dTY29wZSYpOworICAgIHVzaW5nIEF0dHJpYnV0
ZUdldHRlckZ1bmN0aW9uID0gSlNDOjpKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgSlNDbGFzcyYs
IEpTQzo6VGhyb3dTY29wZSYpOworICAgIHVzaW5nIE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0g
SlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBKU0M6OlRocm93
U2NvcGUmKTsKKyAgICB1c2luZyBQcm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6
OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDbGFzcyosIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOworCisgICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RG
b3JBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKyAgICBz
dGF0aWMgSlNDbGFzcyogY2FzdEZvck9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYpOworCisgICAg
dGVtcGxhdGU8UHJvbWlzZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNhbGxlciwg
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6UmVqZWN0UHJvbWlzZT4KKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxs
UHJvbWlzZU9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21p
c2U+JiYgcHJvbWlzZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9w
ZXJhdGlvbigqc3RhdGUpOworICAgICAgICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3I6OkFzc2VydCAmJiBVTkxJS0VMWSghdGhpc09iamVjdCkpCisgICAgICAgICAg
ICByZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKHByb21pc2UuZ2V0KCksIEpT
Q2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25OYW1lKTsKKyAgICAgICAgQVNTRVJU
KHRoaXNPYmplY3QpOworICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIEpTQ2xhc3M6OmluZm8oKSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0
b3IgdGhlIGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgdG8gdXNlIHJlZmVyZW5jZXMgZm9yIHN0YXRl
IGFuZCB0aGlzT2JqZWN0LgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uQ2FsbGVyKHN0YXRlLCB0
aGlzT2JqZWN0LCBXVEZNb3ZlKHByb21pc2UpLCB0aHJvd1Njb3BlKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTxPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRo
aXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRo
cm93PgorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxPcGVyYXRpb24oSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHN0YXRlKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9y
T3BlcmF0aW9uKCpzdGF0ZSk7CisgICAgICAgIGlmIChzaG91bGRUaHJvdyAhPSBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvcjo6QXNzZXJ0ICYmIFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgeworICAgICAg
ICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dT
Y29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOworICAgICAg
ICAgICAgLy8gRm9yIGN1c3RvbSBwcm9taXNlLXJldHVybmluZyBvcGVyYXRpb25zCisgICAgICAg
ICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFz
czo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOworICAgICAgICB9CisgICAgICAg
IEFTU0VSVCh0aGlzT2JqZWN0KTsKKyAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZvKCkpOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2RlIHRvIHVzZSByZWZlcmVuY2VzIGZv
ciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkNhbGxlcihz
dGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8QXR0
cmlidXRlU2V0dGVyRnVuY3Rpb24gc2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91
bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0aWMgYm9v
bCBzZXRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhdGUpOworICAgICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAg
ICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JBdHRyaWJ1dGUoKnN0YXRlLCB0aGlzVmFsdWUp
OworICAgICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJu
IChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpID8gdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNz
TmFtZSwgYXR0cmlidXRlTmFtZSkgOiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHNldHRlcigqc3Rh
dGUsICp0aGlzT2JqZWN0LCBKU0M6OkpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0aHJv
d1Njb3BlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiBn
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3I6OlRocm93PgorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGF0dHJp
YnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRl
KTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+
dm0oKSk7CisgICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yQXR0cmlidXRlKCpzdGF0
ZSwgdGhpc1ZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgeworICAg
ICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJv
dykKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0
aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSk7Cisg
ICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJl
amVjdFByb21pc2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoR2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0
ZU5hbWUpOworICAgICAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNV
bmRlZmluZWQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5j
b2RlKGdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7CisgICAgfQorfTsK
KworLy8gRXhjZXB0aW9uT3IgaGFuZGxpbmcuCit2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYpOwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RP
TUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+JiYpOwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9y
PFQ+JiYgdmFsdWUpOworCisvLyBJbmxpbmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0ZSBkZWZpbml0
aW9ucy4KKworaW5saW5lIEpTQzo6U3RydWN0dXJlKiBET01Db25zdHJ1Y3Rvck9iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitpbmxpbmUgRE9NQ29u
c3RydWN0b3JPYmplY3Q6OkRPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgOiBKU0RPTU9iamVj
dChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3sKK30KKworaW5saW5lIFN0cmluZyBET01Db25z
dHJ1Y3Rvck9iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KikKK3sKKyAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJGdW5jdGlvbiIpOworfQorCitpbmxpbmUgRE9NQ29uc3RydWN0b3JKU0J1
aWx0aW5PYmplY3Q6OkRPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgOiBET01D
b25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3sKK30KKworaW5saW5l
IEpTQzo6SlNGdW5jdGlvbiogRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OmluaXRpYWxp
emVGdW5jdGlvbigpCit7CisgICAgcmV0dXJuIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLmdldCgpOwor
fQorCitpbmxpbmUgdm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6c2V0SW5pdGlh
bGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mIHZtLCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQorewor
ICAgIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLnNldCh2bSwgdGhpcywgJmZ1bmN0aW9uKTsKK30KKwor
aW5saW5lIEpTRE9NR2xvYmFsT2JqZWN0KiBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90
eXBlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIC8vIEZJWE1FOiBDYWxsZXJzIHRvIHRo
aXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzaW5nIHRoZSBnbG9iYWwgb2JqZWN0CisgICAgLy8gZnJv
bSB3aGljaCB0aGUgb2JqZWN0IGlzIGJlaW5nIGNyZWF0ZWQsIGluc3RlYWQgb2YgYXNzdW1pbmcg
dGhlIGxleGljYWwgb25lLgorICAgIC8vIGUuZy4gc3ViZnJhbWUuZG9jdW1lbnQuYm9keSBzaG91
bGQgdXNlIHRoZSBzdWJmcmFtZSdzIGdsb2JhbCBvYmplY3QsIG5vdCB0aGUgbGV4aWNhbCBvbmUu
CisgICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBp
bmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBpZiAoSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGdldENhY2hlZERPTVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFz
czo6aW5mbygpKSkKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICByZXR1cm4gY2FjaGVE
T01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVN0cnVjdHVyZSh2
bSwgJmdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVQcm90b3R5cGUodm0sICZnbG9i
YWxPYmplY3QpKSwgV3JhcHBlckNsYXNzOjppbmZvKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0
cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBmdW5j
dGlvbiBpcyB3cm9uZy4gSXQgdXNlcyB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdCBmb3IgY3JlYXRp
bmcgdGhlIHByb3RvdHlwZSBzdHJ1Y3R1cmUuCisgICAgcmV0dXJuIGdldERPTVN0cnVjdHVyZTxX
cmFwcGVyQ2xhc3M+KGV4ZWMtPnZtKCksICpkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90
eXBlKGV4ZWMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUg
SlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTQzo6SlNP
YmplY3QqPihhc09iamVjdChnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPih2bSwgKkpTQzo6
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSktPnN0b3JlZFByb3RvdHlw
ZSgpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNG
dW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQoreworICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQ2xhc3M6OmNyZWF0ZShnZXRE
T01TdHJ1Y3R1cmU8SlNDbGFzcz4oZ2xvYmFsT2JqZWN0LnZtKCksIGdsb2JhbE9iamVjdCksICZn
bG9iYWxPYmplY3QpOworICAgIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKHN0YXRl
LCAqb2JqZWN0LCBpbml0aWFsaXplRnVuY3Rpb24pOworICAgIHJldHVybiBKU0M6OkpTVmFsdWU6
OmVuY29kZShvYmplY3QpOworfQorCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBw
ZXJPd25lcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKikKK3sKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKj4od29ybGQu
dm0oKS5tX3R5cGVkQXJyYXlDb250cm9sbGVyLmdldCgpKS0+d3JhcHBlck93bmVyKCk7Cit9CisK
K2lubGluZSB2b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCkKK3sK
KyAgICByZXR1cm4gZG9tT2JqZWN0OworfQorCitpbmxpbmUgSlNET01PYmplY3QqIGdldElubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCopIHsgcmV0dXJuIG51bGxwdHI7
IH0KK2lubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwg
dm9pZCosIEpTRE9NT2JqZWN0KiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqKSB7IHJldHVybiBmYWxz
ZTsgfQoraW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYsIHZvaWQqLCBKU0RPTU9iamVjdCopIHsgcmV0dXJuIGZhbHNlOyB9CisKK2lubGluZSBKU0RP
TU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBT
Y3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCkKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb21PYmplY3QtPndyYXBwZXIo
KTsKK30KKworaW5saW5lIEpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCit7Cisg
ICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gYnVmZmVyLT5tX3dyYXBwZXIuZ2V0KCk7Cit9CisKK2lubGluZSBib29sIHNldElubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBk
b21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3Jh
cHBlck93bmVyKQoreworICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGRvbU9iamVjdC0+c2V0V3JhcHBlcih3cmFwcGVyLCB3cmFwcGVyT3duZXIs
ICZ3b3JsZCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIHNldElubGluZUNh
Y2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogZG9t
T2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVy
KiB3cmFwcGVyT3duZXIpCit7CisgICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgZG9tT2JqZWN0LT5tX3dyYXBwZXIgPSBKU0M6OldlYWs8SlNDOjpK
U0FycmF5QnVmZmVyPih3cmFwcGVyLCB3cmFwcGVyT3duZXIsICZ3b3JsZCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2lubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01PYmplY3Qq
IHdyYXBwZXIpCit7CisgICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgZG9tT2JqZWN0LT5jbGVhcldyYXBwZXIod3JhcHBlcik7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2lubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6SlNBcnJh
eUJ1ZmZlciogd3JhcHBlcikKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB3ZWFrQ2xlYXIoZG9tT2JqZWN0LT5tX3dyYXBwZXIsIHdyYXBw
ZXIpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4g
aW5saW5lIEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3
b3JsZCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGdl
dElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsICZkb21PYmplY3QpKQorICAgICAgICByZXR1cm4g
d3JhcHBlcjsKKyAgICByZXR1cm4gd29ybGQubV93cmFwcGVycy5nZXQod3JhcHBlcktleSgmZG9t
T2JqZWN0KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFw
cGVyQ2xhc3M+IGlubGluZSB2b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxk
LCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCit7CisgICAgSlND
OjpXZWFrSGFuZGxlT3duZXIqIG93bmVyID0gd3JhcHBlck93bmVyKHdvcmxkLCBkb21PYmplY3Qp
OworICAgIGlmIChzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBw
ZXIsIG93bmVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdlYWtBZGQod29ybGQubV93cmFwcGVy
cywgd3JhcHBlcktleShkb21PYmplY3QpLCBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4od3JhcHBl
ciwgb3duZXIsICZ3b3JsZCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlw
ZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVy
V29ybGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIp
Cit7CisgICAgaWYgKGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3
cmFwcGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdlYWtSZW1vdmUod29ybGQubV93cmFwcGVy
cywgd3JhcHBlcktleShkb21PYmplY3QpLCB3cmFwcGVyKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5h
bWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46
OnR5cGUKK3sKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICBBU1NFUlQoIWdl
dENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKTsKKyAgICBh
dXRvKiBkb21PYmplY3RQdHIgPSBkb21PYmplY3QucHRyKCk7CisgICAgYXV0byogd3JhcHBlciA9
IFdyYXBwZXJDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGdsb2Jh
bE9iamVjdC0+dm0oKSwgKmdsb2JhbE9iamVjdCksIGdsb2JhbE9iamVjdCwgV1RGTW92ZShkb21P
YmplY3QpKTsKKyAgICBjYWNoZVdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmpl
Y3RQdHIsIHdyYXBwZXIpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gaW5saW5lIGF1dG8gY3JlYXRlV3JhcHBlcihKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VD4mJiBkb21PYmplY3QpIC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlw
ZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNz
Kj46OnR5cGUKK3sKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxET01DbGFzcz4oZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8RE9NQ2xhc3M+KFdURk1vdmUoZG9tT2JqZWN0KSkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSB3
cmFwKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGdldENh
Y2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKQorICAgICAgICBy
ZXR1cm4gd3JhcHBlcjsKKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBSZWY8RE9NQ2xhc3M+KGRvbU9iamVjdCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBKU0NsYXNzPiBpbmxpbmUgSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUpCit7CisgICAgYXV0byB0aGlzVmFsdWUgPSBzdGF0ZS50aGlzVmFsdWUoKTsKKyAgICBh
dXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0NsYXNzKj4oc3RhdGUudm0oKSwg
dGhpc1ZhbHVlKTsKKyAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CisgICAgcmV0dXJuICpjYXN0ZWRU
aGlzOworfQorCitpbmxpbmUgaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rYXkpCit7CisgICAgZG91YmxlIG51
bWJlciA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgIG9rYXkgPSBzdGQ6OmlzZmluaXRlKG51
bWJlcik7CisgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOworfQorCisvLyBWYWxpZGF0
ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24g
NC4xLjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KK2lubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTU2Vx
dWVuY2UoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQm
IGxlbmd0aCkKK3sKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3Qg
PSB2YWx1ZS5nZXRPYmplY3QoKTsKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICB0aHJvd1Nl
cXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgSlNDOjpKU1ZhbHVlIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoJmV4ZWMs
IGV4ZWMucHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CisKKyAgICBpZiAobGVuZ3RoVmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkgeworICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgbGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9V
SW50MzIoJmV4ZWMpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwor
CisgICAgcmV0dXJuIG9iamVjdDsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpB
cnJheUJ1ZmZlciYgYnVmZmVyKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGdldENhY2hlZFdy
YXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBidWZmZXIpKQorICAgICAgICByZXR1cm4gcmVz
dWx0OworCisgICAgLy8gVGhlIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSBmdW5jdGlvbiB3aWxsIHJl
Z2lzdGVyIHRoZSB3cmFwcGVyIGluIGZpbmlzaENyZWF0aW9uLgorICAgIHJldHVybiBKU0M6OkpT
QXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0ZS0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZl
clN0cnVjdHVyZShidWZmZXIuc2hhcmluZ01vZGUoKSksICZidWZmZXIpOworfQorCitpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3JiB2aWV3KQoreworICAgIHJl
dHVybiB2aWV3LndyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCk7Cit9CisKK2lubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGds
b2JhbE9iamVjdCwgKmJ1ZmZlcik7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCit7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1
cm4gSlNDOjpqc051bGwoKTsKKyAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAq
dmlldyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmPFQ+JiYgcHRyKQoreworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRy
LmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWZQdHI8VD4mJiBwdHIpCit7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBwdHIuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQoreworICAgIEpTQzo6Vk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMs
IG51bGxwdHIsIHZlY3Rvci5zaXplKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IEpTQzo6SlNWYWx1ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXpl
KCk7ICsraSkgeworICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBhcnJheTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0
b3I8UmVmUHRyPFQ+PiYgdmVjdG9yKQoreworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIs
IHZlY3Rvci5zaXplKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNW
YWx1ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkg
eworICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIHZlY3RvcltpXS5nZXQoKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBhcnJheTsKK30KKwor
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2Jh
bE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5hbWUmIHByaXZhdGVOYW1lKQoreworICAgIHJl
dHVybiBKU0M6OlN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHByaXZhdGVOYW1lLnVpZCgpKTsK
K30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB2YWx1ZSwgZmFsc2UpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IFQmIHZhbHVlKQoreworICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgm
c3RhdGUsIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZSksIGZhbHNlKTsKK30KKwor
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
KQoreworICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIEpTQzo6
anNVbmRlZmluZWQoKSwgdHJ1ZSk7Cit9CisKK2lubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZl
clZpZXc+IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNhc3Q8
SlNDOjpKU0FycmF5QnVmZmVyVmlldyo+KHZtLCB2YWx1ZSk7CisgICAgaWYgKCF3cmFwcGVyKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gd3JhcHBlci0+cG9zc2libHlTaGFy
ZWRJbXBsKCk7Cit9CisKK2lubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5z
aGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBhdXRvIHJlc3VsdCA9IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcodm0sIHZh
bHVlKTsKKyAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPmlzU2hhcmVkKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBSZWZQdHI8SlND
OjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRW
aWV3PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJ
bnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZp
ZXc8SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJ
bnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZp
ZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpV
aW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZp
ZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpV
aW50OENsYW1wZWRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJl
ZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0K
K2lubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQxNkFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3Nz
aWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7
IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQz
MkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Q
b3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1
ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRG
bG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZt
LCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlT
aGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1
cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0
b3I+KHZtLCB2YWx1ZSk7IH0KKworaW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9VbnNo
YXJlZEludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0sIHZhbHVl
KTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFycmF5
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJl
ZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5l
IFJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mIHZt
LCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVk
VmlldzxKU0M6OkludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6
OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVp
bnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBl
ZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6
VWludDhDbGFtcGVkQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVp
bnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWlu
dDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5
PiB0b1Vuc2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkg
eyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDMyQWRhcHRv
cj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNo
YXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0s
IHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZs
b2F0NjRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6
OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVl
KTsgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1Q+IGlubGluZSBWZWN0b3I8
UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQoreworICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0
KCkpIHsKKyAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFZlY3RvcjxSZWY8VD4+IHJlc3VsdDsKKyAg
ICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0s
IEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmIChqc1Zh
bHVlLmluaGVyaXRzKHZtLCBKU1Q6OmluZm8oKSkpIHsKKyAgICAgICAgICAgIGF1dG8qIG9iamVj
dCA9IEpTVDo6dG9XcmFwcGVkKHZtLCBqc1ZhbHVlKTsKKyAgICAgICAgICAgIEFTU0VSVChvYmpl
Y3QpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqb2JqZWN0KTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcigqc3RhdGUsIHNjb3BlKTsK
KyAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgU3RyaW5nIHByb3BlcnR5
TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBBU1NF
UlQoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKTsKKyAgICByZXR1cm4gcHJvcGVydHlOYW1lLnVp
ZCgpID8gcHJvcGVydHlOYW1lLnVpZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKK30K
KworaW5saW5lIEF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIEF0b21pY1N0cmluZyhwcm9w
ZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlkKCkgOiBwcm9wZXJ0eU5hbWUucHVibGlj
TmFtZSgpKTsKK30KKwordGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlv
biwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rp
b25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjpl
bmNvZGUoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBsZW5ndGgsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5hdGl2ZUZ1
bmN0aW9uKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlv
biYmIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKHN0YXRlLCB0aHJvd1Nj
b3BlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpOworfQorCitpbmxpbmUgdm9pZCBwcm9wYWdhdGVFeGNl
cHRpb24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUs
IEV4Y2VwdGlvbk9yPHZvaWQ+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhh
c0V4Y2VwdGlvbigpKSkKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Nj
b3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4
Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2Vw
dGlvbigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUs
IHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQor
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVy
blZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9y
PFQ+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkg
eworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJl
bGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJl
dHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGlu
Z1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQm
IG5vZGUpCit7CisgICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCAmbm9k
ZSkgPyAmbm9kZSA6IG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBU
KiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgVCogbm9kZSkKK3sKKyAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3Rh
dGUsIG5vZGUpID8gbm9kZSA6IG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9k
ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQqPiYmIHZhbHVlKQoreworICAg
IGlmICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVhc2VF
eGNlcHRpb24oKTsKKyAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIHZhbHVl
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IEV4Y2VwdGlvbk9yPFQqPiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uT3I8VCY+JiYgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlLmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gdmFsdWUucmVsZWFzZUV4Y2Vw
dGlvbigpOworICAgIHJldHVybiBjaGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgdmFsdWUucmVs
ZWFzZVJldHVyblZhbHVlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmdDYWxsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdDYWxsZXIuaAkocmV2aXNpb24gMjExMzUzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nQ2FsbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDMwMCArMjMsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJET01X
cmFwcGVyV29ybGQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhj
ZXB0aW9uT3IuaCIKLSNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpT
RE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIkpTRHluYW1pY0Rvd25jYXN0LmgiCi0jaW5jbHVkZSAi
U2NyaXB0V3JhcHBhYmxlLmgiCi0jaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oIgot
I2luY2x1ZGUgIldlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oIgotI2luY2x1ZGUgPGNzdGRk
ZWY+Ci0jaW5jbHVkZSA8aGVhcC9IZWFwSW5saW5lcy5oPgotI2luY2x1ZGUgPGhlYXAvU2xvdFZp
c2l0b3JJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8aGVhcC9XZWFrLmg+Ci0jaW5jbHVkZSA8aGVhcC9X
ZWFrSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMu
aD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9JdGVyYXRv
ck9wZXJhdGlvbnMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxp
bmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NlbGxJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9KU09iamVjdElubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMu
aD4KLSNpbmNsdWRlIDxydW50aW1lL0xvb2t1cC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0
Q29uc3RydWN0b3IuaD4KLSNpbmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KLSNp
bmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9U
eXBlZEFycmF5cy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi0vLyBGSVhNRTogV2Ug
Y291bGQgbWFrZSB0aGlzIGZpbGUgYSBsb3QgZWFzaWVyIHRvIHJlYWQgYnkgcHV0dGluZyBhbGwg
ZnVuY3Rpb24gZGVjbGFyYXRpb25zIGF0IHRoZSB0b3AsCi0vLyBhbmQgZnVuY3Rpb24gZGVmaW5p
dGlvbnMgYmVsb3csIGV2ZW4gZm9yIHRlbXBsYXRlIGFuZCBpbmxpbmUgZnVuY3Rpb25zLgotCi1u
YW1lc3BhY2UgSlNDIHsKLWNsYXNzIEpTRnVuY3Rpb247Ci19CisjaW5jbHVkZSAiSlNET01FeGNl
cHRpb25IYW5kbGluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENhY2hlZFNj
cmlwdDsKLWNsYXNzIERlZmVycmVkUHJvbWlzZTsKLWNsYXNzIERPTVdpbmRvdzsKLWNsYXNzIEZy
YW1lOwotY2xhc3MgVVJMOwotY2xhc3MgTm9kZTsKLQotc3RydWN0IEV4Y2VwdGlvbkRldGFpbHMg
ewotICAgIFN0cmluZyBtZXNzYWdlOwotICAgIGludCBsaW5lTnVtYmVyIHsgMCB9OwotICAgIGlu
dCBjb2x1bW5OdW1iZXIgeyAwIH07Ci0gICAgU3RyaW5nIHNvdXJjZVVSTDsKLX07Ci0KLS8vIEJh
c2UgY2xhc3MgZm9yIGFsbCBjb25zdHJ1Y3RvciBvYmplY3RzIGluIHRoZSBKU0MgYmluZGluZ3Mu
Ci1jbGFzcyBET01Db25zdHJ1Y3Rvck9iamVjdCA6IHB1YmxpYyBKU0RPTU9iamVjdCB7Ci1wdWJs
aWM6Ci0gICAgdHlwZWRlZiBKU0RPTU9iamVjdCBCYXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbXBsZW1l
bnRzSGFzSW5zdGFuY2UgfCBKU0M6OkltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UgfCBKU0M6
OlR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YTsKLSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNW
YWx1ZSk7Ci0KLXByb3RlY3RlZDoKLSAgICBET01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVj
dHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0KLSAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFt
ZShjb25zdCBKU09iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRh
KEpTQ2VsbCosIEpTQzo6Q2FsbERhdGEmKTsKLX07Ci0KLWNsYXNzIERPTUNvbnN0cnVjdG9ySlNC
dWlsdGluT2JqZWN0IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0KLXByb3RlY3RlZDoKLSAgICBE
T01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFs
T2JqZWN0Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpT
Qzo6U2xvdFZpc2l0b3ImKTsKLQotICAgIEpTQzo6SlNGdW5jdGlvbiogaW5pdGlhbGl6ZUZ1bmN0
aW9uKCk7Ci0gICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYsIEpTQzo6SlNG
dW5jdGlvbiYpOwotCi1wcml2YXRlOgotICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNGdW5j
dGlvbj4gbV9pbml0aWFsaXplRnVuY3Rpb247Ci19OwotCi1ET01XaW5kb3cmIGNhbGxlckRPTVdp
bmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwotRE9NV2luZG93JiBhY3RpdmVET01XaW5kb3coSlNDOjpF
eGVjU3RhdGUqKTsKLURPTVdpbmRvdyYgZmlyc3RET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsK
LQotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZXBvcnREZXByZWNhdGVkR2V0
dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25z
dCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RGVwcmVj
YXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci0KLXZvaWQgdGhyb3dBdHRyaWJ1dGVUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3Rl
ZFR5cGUpOwotV0VCQ09SRV9FWFBPUlQgYm9vbCB0aHJvd1NldHRlclR5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotCi12b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93RGF0YUNs
b25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLXZvaWQgdGhyb3dE
T01TeW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOyAvLyBOb3Qg
dGhlIHNhbWUgYXMgYSBKYXZhU2NyaXB0IHN5bnRheCBlcnJvci4KLXZvaWQgdGhyb3dJbmRleFNp
emVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd0lu
dmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3Qg
Y2hhciogbWVzc2FnZSk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHRocm93Tm9uRmluaXRlVHlwZUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93Tm90U3Vw
cG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLXZvaWQgdGhy
b3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNv
bnN0IGNoYXIqIG1lc3NhZ2UpOwotdm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwotV0VCQ09SRV9F
WFBPUlQgdm9pZCB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJik7Ci12b2lkIHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmKTsKLQotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1
ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1l
LCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRWYWx1ZXMpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0
aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFt
ZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50
VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJn
dW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlv
bkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhw
ZWN0ZWRUeXBlKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dSZXF1
aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNv
bnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25zdCBj
aGFyKiBleHBlY3RlZFR5cGUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9y
U2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKTsKLQotU3RyaW5nIG1h
a2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotU3RyaW5nIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLQot
V0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5h
bWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93
U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUpOwotCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VX
aXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCBKU0M6OkVu
Y29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21p
c2UmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1l
KTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhU
aGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0
dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBKU0M6
OkNsYXNzSW5mbyopOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpTdHJ1Y3R1cmUqIGNhY2hlRE9NU3Ry
dWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpTdHJ1Y3R1cmUqLCBjb25zdCBKU0M6OkNs
YXNzSW5mbyopOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6U3RydWN0
dXJlKiBnZXRET01TdHJ1Y3R1cmUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6U3RydWN0dXJlKiBkZXByZWNhdGVkR2V0
RE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRlKik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVy
Q2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldERPTVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0ds
b2JhbE9iamVjdCopOwotCi12b2lkIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgSlNDOjpKU0Z1bmN0aW9u
Jik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IEpTQzo6RW5jb2RlZEpTVmFsdWUgY3Jl
YXRlSlNCdWlsdGluKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU0Z1bmN0aW9uJiBpbml0aWFsaXpl
RnVuY3Rpb24sIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0KLUpTQzo6V2Vha0hhbmRsZU93bmVyKiB3
cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciopOwotdm9pZCog
d3JhcHBlcktleShKU0M6OkFycmF5QnVmZmVyKik7Ci0KLUpTRE9NT2JqZWN0KiBnZXRJbmxpbmVD
YWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqKTsKLUpTRE9NT2JqZWN0KiBnZXRJ
bmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSopOwot
SlNDOjpKU0FycmF5QnVmZmVyKiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKLQotYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCosIEpTQzo6V2Vha0hhbmRsZU93bmVy
Kik7Ci1ib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgU2NyaXB0
V3JhcHBhYmxlKiwgSlNET01PYmplY3QqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3
cmFwcGVyT3duZXIpOwotYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYsIEpTQzo6QXJyYXlCdWZmZXIqLCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpTQzo6
V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpOwotCi1ib29sIGNsZWFySW5saW5lQ2FjaGVk
V3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqKTsKLWJvb2wgY2xl
YXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSos
IEpTRE9NT2JqZWN0KiB3cmFwcGVyKTsKLWJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqLCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdy
YXBwZXIpOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gSlNDOjpKU09iamVjdCogZ2V0
Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyYpOwotdGVtcGxhdGU8dHlw
ZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYgd29ybGQsIFJlZjxET01DbGFzcz4mIG9iamVjdCkgeyByZXR1cm4gZ2V0
Q2FjaGVkV3JhcHBlcih3b3JsZCwgb2JqZWN0LmdldCgpKTsgfQotdGVtcGxhdGU8dHlwZW5hbWUg
RE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkJiwgRE9NQ2xhc3MqLCBXcmFwcGVyQ2xhc3MqKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9N
V3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MqLCBXcmFwcGVyQ2xhc3MqKTsKLXRlbXBsYXRlPHR5cGVu
YW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxP
YmplY3QqLCBSZWY8VD4mJikgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1l
PERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0
czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlOwotdGVtcGxhdGU8dHlwZW5hbWUgRE9N
Q2xhc3MsIHR5cGVuYW1lIFQ+IGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCos
IFJlZjxUPiYmKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPERPTUNs
YXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01D
bGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFz
cz4gSlNDOjpKU1ZhbHVlIHdyYXAoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IERPTUNsYXNzJik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IEpTQ2xhc3MmIGNhc3RU
aGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUmKTsKLQotdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25z
dCBBdG9taWNTdHJpbmcmKTsKLQotY29uc3QgSlNDOjpIYXNoVGFibGUmIGdldEhhc2hUYWJsZUZv
ckdsb2JhbERhdGEoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SGFzaFRhYmxlJiBzdGF0aWNUYWJsZSk7
Ci0KLVN0cmluZyByZXRyaWV2ZUVycm9yTWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6Vk0m
LCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBKU0M6OkNhdGNoU2NvcGUmKTsKLVdFQkNPUkVfRVhQ
T1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4
Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIpOwotV0VCQ09SRV9FWFBPUlQgdm9pZCBy
ZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiosIENhY2hlZFNj
cmlwdCogPSBudWxscHRyLCBFeGNlcHRpb25EZXRhaWxzKiA9IG51bGxwdHIpOwotdm9pZCByZXBv
cnRDdXJyZW50RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7Ci0KLUpTQzo6SlNWYWx1ZSBjcmVh
dGVET01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb24mJik7Ci1KU0M6OkpTVmFs
dWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgRXhjZXB0aW9uQ29kZSwgY29u
c3QgU3RyaW5nJik7Ci0KLS8vIENvbnZlcnQgYSBET00gaW1wbGVtZW50YXRpb24gZXhjZXB0aW9u
IGludG8gYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBpbiB0aGUgZXhlY3V0aW9uIHN0YXRlLgotdm9p
ZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBF
eGNlcHRpb24mJik7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQ
YXRoKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOwotCi1K
U0M6OkpTVmFsdWUganNTdHJpbmcoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBVUkwmKTsgLy8gZW1w
dHkgaWYgdGhlIFVSTCBpcyBudWxsCi0KLUpTQzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVk
KEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgc3Ry
aW5nIGlzIG51bGwKLUpTQzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgVVJMJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgVVJMIGlzIG51bGwKLQotLy8g
U2VlIEphdmFTY3JpcHRDb3JlIGZvciBleHBsYW5hdGlvbjogU2hvdWxkIGJlIHVzZWQgZm9yIGFu
eSBzdHJpbmcgdGhhdCBpcyBhbHJlYWR5IG93bmVkIGJ5IGFub3RoZXIKLS8vIG9iamVjdCwgdG8g
bGV0IHRoZSBlbmdpbmUga25vdyB0aGF0IGNvbGxlY3RpbmcgdGhlIEpTU3RyaW5nIHdyYXBwZXIg
aXMgdW5saWtlbHkgdG8gc2F2ZSBtZW1vcnkuCi1KU0M6OkpTVmFsdWUganNPd25lZFN0cmluZ09y
TnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOwotCi1TdHJpbmcgcHJvcGVydHlO
YW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwotCi1BdG9taWNTdHJpbmcgcHJvcGVydHlO
YW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOwotCi1XRUJDT1JFX0VYUE9SVCBT
dHJpbmcgaWRlbnRpZmllclRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYpOwotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9CeXRlU3RyaW5nKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBpZGVu
dGlmaWVyVG9VU1ZTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXIm
KTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKLQotaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWYWx1
ZSwgSlNDOjpFeGVjU3RhdGUqLCBib29sJiBva2F5KTsKLQotLy8gVGhlIGZvbGxvd2luZyBmdW5j
dGlvbnMgY29udmVydCB2YWx1ZXMgdG8gaW50ZWdlcnMgYXMgcGVyIHRoZSBXZWJJREwgc3BlY2lm
aWNhdGlvbi4KLS8vIFRoZSBjb252ZXJzaW9uIGZhaWxzIGlmIHRoZSB2YWx1ZSBjYW5ub3QgYmUg
Y29udmVydGVkIHRvIGEgbnVtYmVyIG9yLCBpZiBFbmZvcmNlUmFuZ2UgaXMgc3BlY2lmaWVkLAot
Ly8gdGhlIHZhbHVlIGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSBkZXN0aW5hdGlvbiBpbnRl
Z2VyIHR5cGUuCi0KLVdFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJ
bnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVf
RVhQT1JUIGludDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRv
SW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09S
RV9FWFBPUlQgdWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ2NF90
IHRvVUludDY0RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQot
V0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNkNsYW1w
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQxNl90
IHRvVUludDE2Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9F
WFBPUlQgaW50MzJfdCB0b0ludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OwotV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgdG9VSW50MzJDbGFtcChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjRDbGFtcChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJ
bnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotV0VCQ09SRV9FWFBP
UlQgaW50OF90IHRvSW50OChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JF
X0VYUE9SVCB1aW50OF90IHRvVUludDgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
V0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2KEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLUpTQzo6SlNWYWx1ZSBqc0RhdGUoSlND
OjpFeGVjU3RhdGUqLCBkb3VibGUgdmFsdWUpOwotCi0vLyBOYU4gaWYgdGhlIHZhbHVlIGNhbid0
IGJlIGNvbnZlcnRlZCB0byBhIGRhdGUuCi1kb3VibGUgdmFsdWVUb0RhdGUoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUpOwotCi0vLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVj
dCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwgc3Bl
Yy4KLUpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSwgdW5zaWduZWQmIGxlbmd0aCk7Ci0KLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyJik7Ci1KU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5
QnVmZmVyVmlldyYpOwotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXIqKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Kik7
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZlB0
cjxUPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBWZWN0b3I8VD4mKTsKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9i
YWxPYmplY3QqLCBjb25zdCBWZWN0b3I8UmVmUHRyPFQ+PiYpOwotSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5h
bWUmKTsKLQotSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9N
R2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6
SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYs
IGNvbnN0IFQmKTsKLUpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUm
KTsKLQotUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlC
dWZmZXJWaWV3KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50OEFycmF5
PiB0b1Bvc3NpYmx5U2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVm
UHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVk
SW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQ4QXJy
YXk+IHRvUG9zc2libHlTaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwot
UmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OENsYW1w
ZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQxNkFycmF5
PiB0b1Bvc3NpYmx5U2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1S
ZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQzMkFycmF5KEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Bvc3NpYmx5
U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6
RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6
OkpTVmFsdWUpOwotCi1SZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5zaGFyZWRBcnJh
eUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQ4QXJy
YXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8
SlNDOjpJbnQxNkFycmF5PiB0b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1Zh
bHVlKTsKLVJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9VbnNoYXJlZFVp
bnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OENsYW1w
ZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOwotUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvVW5zaGFyZWRVaW50MTZBcnJheShKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hhcmVk
VWludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpGbG9hdDMy
QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1S
ZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEpTVHlwZT4g
VmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotZW51bSBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiB7IERv
Tm90UmVwb3J0U2VjdXJpdHlFcnJvciwgTG9nU2VjdXJpdHlFcnJvciwgVGhyb3dTZWN1cml0eUVy
cm9yIH07Ci1uYW1lc3BhY2UgQmluZGluZ1NlY3VyaXR5IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIFQmKTsKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0
ZSYsIFQqKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNlcHRpb25PcjxUKj4gY2hlY2tT
ZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb25PcjxUKj4mJik7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2Rl
KEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uT3I8VCY+JiYpOwotICAgIGJvb2wgc2hvdWxkQWxs
b3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSosIERPTVdpbmRvdyYsIFNlY3VyaXR5
UmVwb3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7Ci0gICAgYm9vbCBzaG91bGRBbGxv
d0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlJiwgRE9NV2luZG93JiwgU3RyaW5nJiBt
ZXNzYWdlKTsKLSAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0
ZSosIEZyYW1lKiwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1cml0eUVycm9yKTsK
LSAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSYsIEZyYW1l
JiwgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKEpT
Qzo6RXhlY1N0YXRlJiwgTm9kZSopOwotfTsKLQotdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZy
YW1lKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotU3RyaW5nIHByb3BlcnR5TmFt
ZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKLUF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVU
b0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7Ci0KLXRlbXBsYXRlPEpTQzo6TmF0aXZl
RnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRp
Y0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlND
OjpQcm9wZXJ0eU5hbWUpOwotCi0KIGVudW0gY2xhc3MgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Ig
eyBUaHJvdywgUmV0dXJuRWFybHksIFJlamVjdFByb21pc2UsIEFzc2VydCB9OwogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBKU0NsYXNzPgpAQCAtMzg5LDQzNyArOTksNCBAQCBzdHJ1Y3QgQmluZGluZ0Nh
bGxlciB7CiAgICAgfQogfTsKIAotLy8gRXhjZXB0aW9uT3IgaGFuZGxpbmcuCi12b2lkIHByb3Bh
Z2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlv
bk9yPHZvaWQ+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2Vw
dGlvbk9yPFQ+JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dT
Y29wZSYsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpOwotCi0vLyBJbmxpbmUgZnVuY3Rpb25zIGFu
ZCB0ZW1wbGF0ZSBkZWZpbml0aW9ucy4KLQotaW5saW5lIEpTQzo6U3RydWN0dXJlKiBET01Db25z
dHJ1Y3Rvck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi17Ci0gICAgcmV0
dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBK
U0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwot
fQotCi1pbmxpbmUgRE9NQ29uc3RydWN0b3JPYmplY3Q6OkRPTUNvbnN0cnVjdG9yT2JqZWN0KEpT
Qzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Ci0gICAgOiBKU0RPTU9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0KLQotaW5s
aW5lIFN0cmluZyBET01Db25zdHJ1Y3Rvck9iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0
KikKLXsKLSAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJGdW5jdGlvbiIpOwotfQotCi1pbmxpbmUg
RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OkRPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2Jq
ZWN0KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCi0gICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVj
dCkKLXsKLX0KLQotaW5saW5lIEpTQzo6SlNGdW5jdGlvbiogRE9NQ29uc3RydWN0b3JKU0J1aWx0
aW5PYmplY3Q6OmluaXRpYWxpemVGdW5jdGlvbigpCi17Ci0gICAgcmV0dXJuIG1faW5pdGlhbGl6
ZUZ1bmN0aW9uLmdldCgpOwotfQotCi1pbmxpbmUgdm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRp
bk9iamVjdDo6c2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mIHZtLCBKU0M6OkpTRnVuY3Rp
b24mIGZ1bmN0aW9uKQotewotICAgIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLnNldCh2bSwgdGhpcywg
JmZ1bmN0aW9uKTsKLX0KLQotaW5saW5lIEpTRE9NR2xvYmFsT2JqZWN0KiBkZXByZWNhdGVkR2xv
YmFsT2JqZWN0Rm9yUHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIEZJ
WE1FOiBDYWxsZXJzIHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzaW5nIHRoZSBnbG9iYWwg
b2JqZWN0Ci0gICAgLy8gZnJvbSB3aGljaCB0aGUgb2JqZWN0IGlzIGJlaW5nIGNyZWF0ZWQsIGlu
c3RlYWQgb2YgYXNzdW1pbmcgdGhlIGxleGljYWwgb25lLgotICAgIC8vIGUuZy4gc3ViZnJhbWUu
ZG9jdW1lbnQuYm9keSBzaG91bGQgdXNlIHRoZSBzdWJmcmFtZSdzIGdsb2JhbCBvYmplY3QsIG5v
dCB0aGUgbGV4aWNhbCBvbmUuCi0gICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVjdHVyZShK
U0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBpZiAo
SlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldENhY2hlZERPTVN0cnVjdHVyZShnbG9iYWxP
YmplY3QsIFdyYXBwZXJDbGFzczo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsK
LSAgICByZXR1cm4gY2FjaGVET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6
OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVQ
cm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpKSwgV3JhcHBlckNsYXNzOjppbmZvKCkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSog
ZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAv
LyBGSVhNRTogVGhpcyBmdW5jdGlvbiBpcyB3cm9uZy4gSXQgdXNlcyB0aGUgd3JvbmcgZ2xvYmFs
IG9iamVjdCBmb3IgY3JlYXRpbmcgdGhlIHByb3RvdHlwZSBzdHJ1Y3R1cmUuCi0gICAgcmV0dXJu
IGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMtPnZtKCksICpkZXByZWNhdGVkR2xv
YmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgV3Jh
cHBlckNsYXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90eXBlKEpTQzo6Vk0m
IHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpT
Qzo6anNDYXN0PEpTQzo6SlNPYmplY3QqPihhc09iamVjdChnZXRET01TdHJ1Y3R1cmU8V3JhcHBl
ckNsYXNzPih2bSwgKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0
KSktPnN0b3JlZFByb3RvdHlwZSgpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+
IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpT
Q2xhc3M6OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNDbGFzcz4oZ2xvYmFsT2JqZWN0LnZtKCks
IGdsb2JhbE9iamVjdCksICZnbG9iYWxPYmplY3QpOwotICAgIGNhbGxGdW5jdGlvbldpdGhDdXJy
ZW50QXJndW1lbnRzKHN0YXRlLCAqb2JqZWN0LCBpbml0aWFsaXplRnVuY3Rpb24pOwotICAgIHJl
dHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShvYmplY3QpOwotfQotCi1pbmxpbmUgSlNDOjpXZWFr
SGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFy
cmF5QnVmZmVyKikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyKj4od29ybGQudm0oKS5tX3R5cGVkQXJyYXlDb250cm9sbGVyLmdldCgpKS0+d3Jh
cHBlck93bmVyKCk7Ci19Ci0KLWlubGluZSB2b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZm
ZXIqIGRvbU9iamVjdCkKLXsKLSAgICByZXR1cm4gZG9tT2JqZWN0OwotfQotCi1pbmxpbmUgSlNE
T01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCop
IHsgcmV0dXJuIG51bGxwdHI7IH0KLWlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIo
RE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0KiwgSlNDOjpXZWFrSGFuZGxlT3du
ZXIqKSB7IHJldHVybiBmYWxzZTsgfQotaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFw
cGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCopIHsgcmV0dXJuIGZhbHNl
OyB9Ci0KLWlubGluZSBKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCkKLXsKLSAgICBpZiAo
IXdvcmxkLmlzTm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBk
b21PYmplY3QtPndyYXBwZXIoKTsKLX0KLQotaW5saW5lIEpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0
SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVm
ZmVyKiBidWZmZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyLT5tX3dyYXBwZXIuZ2V0KCk7Ci19Ci0KLWlu
bGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwg
U2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyLCBKU0M6Oldl
YWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKQotewotICAgIGlmICghd29ybGQuaXNOb3JtYWwo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRvbU9iamVjdC0+c2V0V3JhcHBlcih3cmFw
cGVyLCB3cmFwcGVyT3duZXIsICZ3b3JsZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGlu
ZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlND
OjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpT
Qzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05v
cm1hbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0LT5tX3dyYXBwZXIg
PSBKU0M6OldlYWs8SlNDOjpKU0FycmF5QnVmZmVyPih3cmFwcGVyLCB3cmFwcGVyT3duZXIsICZ3
b3JsZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIGNsZWFySW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9i
amVjdCwgSlNET01PYmplY3QqIHdyYXBwZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0LT5jbGVhcldyYXBwZXIod3Jh
cHBlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIGNsZWFySW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21P
YmplY3QsIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlcikKLXsKLSAgICBpZiAoIXdvcmxkLmlz
Tm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB3ZWFrQ2xlYXIoZG9tT2JqZWN0
LT5tX3dyYXBwZXIsIHdyYXBwZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIo
RE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKLXsKLSAgICBpZiAo
YXV0byogd3JhcHBlciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsICZkb21PYmplY3Qp
KQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gd29ybGQubV93cmFwcGVycy5n
ZXQod3JhcHBlcktleSgmZG9tT2JqZWN0KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNs
YXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIGNhY2hlV3JhcHBlcihET01X
cmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdy
YXBwZXIpCi17Ci0gICAgSlNDOjpXZWFrSGFuZGxlT3duZXIqIG93bmVyID0gd3JhcHBlck93bmVy
KHdvcmxkLCBkb21PYmplY3QpOwotICAgIGlmIChzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxk
LCBkb21PYmplY3QsIHdyYXBwZXIsIG93bmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdlYWtB
ZGQod29ybGQubV93cmFwcGVycywgd3JhcHBlcktleShkb21PYmplY3QpLCBKU0M6OldlYWs8SlND
OjpKU09iamVjdD4od3JhcHBlciwgb3duZXIsICZ3b3JsZCkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCB1bmNhY2hl
V3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFw
cGVyQ2xhc3MqIHdyYXBwZXIpCi17Ci0gICAgaWYgKGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcih3
b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdlYWtSZW1v
dmUod29ybGQubV93cmFwcGVycywgd3JhcHBlcktleShkb21PYmplY3QpLCB3cmFwcGVyKTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlubGluZSBhdXRvIGNy
ZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgZG9t
T2JqZWN0KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8RE9NQ2xhc3Ms
IFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNz
Pjo6V3JhcHBlckNsYXNzKj46OnR5cGUKLXsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSB0eXBl
bmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3M7
Ci0KLSAgICBBU1NFUlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBk
b21PYmplY3QpKTsKLSAgICBhdXRvKiBkb21PYmplY3RQdHIgPSBkb21PYmplY3QucHRyKCk7Ci0g
ICAgYXV0byogd3JhcHBlciA9IFdyYXBwZXJDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxX
cmFwcGVyQ2xhc3M+KGdsb2JhbE9iamVjdC0+dm0oKSwgKmdsb2JhbE9iamVjdCksIGdsb2JhbE9i
amVjdCwgV1RGTW92ZShkb21PYmplY3QpKTsKLSAgICBjYWNoZVdyYXBwZXIoZ2xvYmFsT2JqZWN0
LT53b3JsZCgpLCBkb21PYmplY3RQdHIsIHdyYXBwZXIpOwotICAgIHJldHVybiB3cmFwcGVyOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gaW5saW5lIGF1dG8g
Y3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VD4mJiBk
b21PYmplY3QpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8RE9NQ2xh
c3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNs
YXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGUKLXsKLSAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxE
T01DbGFzcz4oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8RE9NQ2xhc3M+KFdU
Rk1vdmUoZG9tT2JqZWN0KSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKLXsKLSAgICBpZiAoYXV0
byogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21P
YmplY3QpKQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gdG9KU05ld2x5Q3Jl
YXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBSZWY8RE9NQ2xhc3M+KGRvbU9iamVjdCkpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDbGFzcyYgY2FzdFRoaXNWYWx1
ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCi17Ci0gICAgYXV0byB0aGlzVmFsdWUgPSBzdGF0ZS50
aGlzVmFsdWUoKTsKLSAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0Ns
YXNzKj4oc3RhdGUudm0oKSwgdGhpc1ZhbHVlKTsKLSAgICBBU1NFUlQoY2FzdGVkVGhpcyk7Ci0g
ICAgcmV0dXJuICpjYXN0ZWRUaGlzOwotfQotCi1pbmxpbmUgaW50MzJfdCBmaW5pdGVJbnQzMlZh
bHVlKEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rYXkp
Ci17Ci0gICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIG9rYXkg
PSBzdGQ6OmlzZmluaXRlKG51bWJlcik7Ci0gICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIp
OwotfQotCi0vLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNlcXVlbmNl
IHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KLWlubGluZSBKU0M6
OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgdW5zaWduZWQmIGxlbmd0aCkKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0o
KTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6
OkpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsKLSAgICBpZiAoIW9iamVjdCkg
ewotICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgSlNDOjpKU1ZhbHVlIGxlbmd0aFZhbHVlID0g
b2JqZWN0LT5nZXQoJmV4ZWMsIGV4ZWMucHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Ci0gICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0KLSAgICBpZiAobGVuZ3RoVmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4
ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgbGVuZ3Ro
ID0gbGVuZ3RoVmFsdWUudG9VSW50MzIoJmV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIG51bGxwdHIpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotaW5saW5lIEpTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlciYgYnVmZmVyKQotewotICAgIGlmIChhdXRvIHJl
c3VsdCA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBidWZmZXIpKQot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8gVGhlIEpTQXJyYXlCdWZmZXI6OmNyZWF0
ZSBmdW5jdGlvbiB3aWxsIHJlZ2lzdGVyIHRoZSB3cmFwcGVyIGluIGZpbmlzaENyZWF0aW9uLgot
ICAgIHJldHVybiBKU0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0ZS0+dm0oKSwgZ2xvYmFs
T2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZShidWZmZXIuc2hhcmluZ01vZGUoKSksICZidWZm
ZXIpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3
JiB2aWV3KQotewotICAgIHJldHVybiB2aWV3LndyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCk7Ci19
Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKLXsK
LSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgcmV0
dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmJ1ZmZlcik7Ci19Ci0KLWlubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgaWYgKCF2
aWV3KQotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICByZXR1cm4gdG9KUyhzdGF0
ZSwgZ2xvYmFsT2JqZWN0LCAqdmlldyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgcHRyKQotewotICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4mJiBwdHIpCi17Ci0gICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBwdHIuZ2V0KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQotewotICAg
IEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1
Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXplKCkpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXSkpOwotICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgfQotICAg
IHJldHVybiBhcnJheTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPFQ+PiYgdmVjdG9yKQotewotICAgIEpTQzo6Vk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKLQotICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFy
cmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXplKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZl
Y3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywg
aSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXS5nZXQoKSkpOwotICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgfQotICAgIHJl
dHVybiBhcnJheTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5hbWUmIHByaXZh
dGVOYW1lKQotewotICAgIHJldHVybiBKU0M6OlN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHBy
aXZhdGVOYW1lLnVpZCgpKTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3Io
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB2
YWx1ZSwgZmFsc2UpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIHZhbHVlKQotewotICAgIHJldHVybiBjcmVhdGVJdGVy
YXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1
ZSksIGZhbHNlKTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlND
OjpFeGVjU3RhdGUmIHN0YXRlKQotewotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9i
amVjdCgmc3RhdGUsIEpTQzo6anNVbmRlZmluZWQoKSwgdHJ1ZSk7Ci19Ci0KLWlubGluZSBSZWZQ
dHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXco
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvKiB3cmFwcGVyID0g
anNEeW5hbWljRG93bmNhc3Q8SlNDOjpKU0FycmF5QnVmZmVyVmlldyo+KHZtLCB2YWx1ZSk7Ci0g
ICAgaWYgKCF3cmFwcGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gd3Jh
cHBlci0+cG9zc2libHlTaGFyZWRJbXBsKCk7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpBcnJh
eUJ1ZmZlclZpZXc+IHRvVW5zaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvIHJlc3VsdCA9IHRvUG9zc2libHlTaGFyZWRBcnJh
eUJ1ZmZlclZpZXcodm0sIHZhbHVlKTsKLSAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPmlzU2hh
cmVkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LWlubGluZSBSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXko
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5
U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlu
bGluZSBSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MTZBcnJheShK
U0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlT
aGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlu
bGluZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MzJBcnJheShK
U0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlT
aGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlu
bGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhBcnJheShK
U0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlT
aGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlu
bGluZSBSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4
Q2xhbXBlZEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpT
Qzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0
b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3Nz
aWJseVNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsg
cmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFk
YXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Q
b3NzaWJseVNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUp
IHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQz
MkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+
IHRvUG9zc2libHlTaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6
RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3
PEpTQzo6RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLQotaW5saW5lIFJlZlB0cjxKU0M6
OkludDhBcnJheT4gdG9VbnNoYXJlZEludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4
QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRv
VW5zaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4odm0s
IHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQz
MkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9V
bnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQot
aW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2
ZVR5cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0
cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlND
OjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0
aXZlVHlwZWRWaWV3PEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5s
aW5lIFJlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpW
TSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZl
VHlwZWRWaWV3PEpTQzo6VWludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0
cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3
PEpTQzo6VWludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkZs
b2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpG
bG9hdDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0NjRB
cnJheT4gdG9VbnNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0
QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBK
U1Q+IGlubGluZSBWZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUu
dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBp
ZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihz
dGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIFZlY3RvcjxS
ZWY8VD4+IHJlc3VsdDsKLSAgICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIHZhbHVlLCBbJnJl
c3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpz
VmFsdWUpIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgICAgIGlmIChqc1ZhbHVlLmluaGVyaXRzKHZtLCBKU1Q6OmluZm8oKSkpIHsKLSAgICAg
ICAgICAgIGF1dG8qIG9iamVjdCA9IEpTVDo6dG9XcmFwcGVkKHZtLCBqc1ZhbHVlKTsKLSAgICAg
ICAgICAgIEFTU0VSVChvYmplY3QpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqb2JqZWN0
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJv
cigqc3RhdGUsIHNjb3BlKTsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxp
bmUgU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkKLXsKLSAgICBBU1NFUlQoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKTsKLSAgICByZXR1
cm4gcHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVpZCgpIDogcHJvcGVydHlOYW1l
LnB1YmxpY05hbWUoKTsKLX0KLQotaW5saW5lIEF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0
b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJu
IEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlkKCkgOiBw
cm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLX0KLQotdGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5j
dGlvbiBuYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBub25D
YWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RW5j
b2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1
cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0o
KSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBsZW5ndGgsIHByb3BlcnR5TmFtZS5wdWJs
aWNOYW1lKCksIG5hdGl2ZUZ1bmN0aW9uKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBwcm9w
YWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAodGhyb3dTY29wZS5l
eGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQ
YXRoKHN0YXRlLCB0aHJvd1Njb3BlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpOwotfQotCi1pbmxpbmUg
dm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYgdmFsdWUpCi17Ci0gICAgaWYg
KFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0
aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElL
RUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24o
c3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJl
dHVybiB7IH07Ci0gICAgfQotICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwg
dmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVl
Lmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRo
cm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07
Ci0gICAgfQotICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVj
dCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgVCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIFQmIG5vZGUpCi17Ci0gICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNz
VG9Ob2RlKHN0YXRlLCAmbm9kZSkgPyAmbm9kZSA6IG51bGxwdHI7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGlubGluZSBUKiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2Rl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVCogbm9kZSkKLXsKLSAgICByZXR1cm4gc2hvdWxkQWxs
b3dBY2Nlc3NUb05vZGUoc3RhdGUsIG5vZGUpID8gbm9kZSA6IG51bGxwdHI7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5Ojpj
aGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQq
PiYmIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0
dXJuIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZv
ck5vZGUoc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gaW5saW5lIEV4Y2VwdGlvbk9yPFQqPiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNr
U2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uT3I8VCY+JiYg
dmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4g
dmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpOwotICAgIHJldHVybiBjaGVja1NlY3VyaXR5Rm9yTm9k
ZShzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkpOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdT
ZWN1cml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01CaW5kaW5nU2VjdXJpdHkuY3BwCShyZXZpc2lvbiAyMTEzNTMpCShmcm9tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6MjExMzUzKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nU2VjdXJpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAzNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDExLCAyMDEz
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAy
MDEzIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgor
I2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbkhlYWRlcnMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25JbnRlcmZhY2VzLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5j
bHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIK
KyNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5o
IgorI2luY2x1ZGUgIkpTRXhjZXB0aW9uQmFzZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCisjaW5jbHVkZSA8Ynl0ZWNvZGUvQ29kZUJsb2NrLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFjay5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tG
YWN0b3J5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9FcnJvckhhbmRsaW5nU2NvcGUuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0Vycm9ySW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxydW50aW1lL0V4
Y2VwdGlvbi5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M7Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3Rv
ck9iamVjdCk7CitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9NQ29u
c3RydWN0b3JXaXRoRG9jdW1lbnQpOworCit2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0
b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGNvbW1vblZNKCkuYWRkSW1wdXJlUHJv
cGVydHkocHJvcGVydHlOYW1lKTsKK30KKworSlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQoreworICAgIGlmIChzLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgcmV0dXJuIGpzT3duZWRTdHJpbmcoZXhlYywg
cyk7Cit9CisKK0pTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgcykKK3sKKyAgICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHMpOworfQor
CitKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCit7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Cit9CisKK0pT
VmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVSTCYgdXJs
KQoreworICAgIGlmICh1cmwuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkpOworfQor
CitzdGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgU3RyaW5nJiYgc3RyaW5nKQoreworICAgIGlmICgh
c3RyaW5nLmNvbnRhaW5zT25seUxhdGluMSgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiBz
dHJpbmc7Cit9CisKK1N0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBT
dHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmcoKTsKKyAgICByZXR1cm4gc3RyaW5nVG9C
eXRlU3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKK30KKworU3RyaW5nIHZh
bHVlVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgcmV0dXJuIHN0cmlu
Z1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBoYXNVbnBhaXJlZFN1cnJvZ2F0ZShTdHJpbmdWaWV3IHN0cmluZykKK3sK
KyAgICAvLyBGYXN0IHBhdGggZm9yIDgtYml0IHN0cmluZ3M7IHRoZXkgY2FuJ3QgaGF2ZSBhbnkg
c3Vycm9nYXRlcy4KKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsKKyAg
ICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIFN0cmlu
ZyBzdHJpbmdUb1VTVlN0cmluZyhTdHJpbmcmJiBzdHJpbmcpCit7CisgICAgLy8gRmFzdCBwYXRo
IGZvciB0aGUgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbm8gdW5wYWlyZWQgc3Vycm9nYXRlcy4KKyAg
ICBpZiAoIWhhc1VucGFpcmVkU3Vycm9nYXRlKHN0cmluZykpCisgICAgICAgIHJldHVybiBzdHJp
bmc7CisKKyAgICAvLyBTbG93IHBhdGg6IGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8j
ZGZuLW9idGFpbi11bmljb2RlCisgICAgLy8gUmVwbGFjZXMgdW5wYWlyZWQgc3Vycm9nYXRlcyB3
aXRoIHRoZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7
CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShzdHJpbmcubGVuZ3RoKCkpOworICAgIFN0cmlu
Z1ZpZXcgdmlldyB7IHN0cmluZyB9OworICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiB2aWV3LmNv
ZGVQb2ludHMoKSkgeworICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVQb2ludCk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmlu
ZyhFeGVjU3RhdGUmLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQoreworICAgIFN0cmlu
ZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOworICAgIHJldHVybiBzdHJpbmdUb1VTVlN0
cmluZyhXVEZNb3ZlKHN0cmluZykpOworfQorCitTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5n
IHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKworICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZNb3Zl
KHN0cmluZykpOworfQorCitKU1ZhbHVlIGpzRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKK30KKwor
ZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzTnVtYmVyKCk7
CisgICAgaWYgKCF2YWx1ZS5pbmhlcml0cyhleGVjLT52bSgpLCBEYXRlSW5zdGFuY2U6OmluZm8o
KSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05h
TigpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50b09iamVj
dChleGVjKSktPmludGVybmFsTnVtYmVyKCk7Cit9CisKK3ZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgQ2FjaGVkU2NyaXB0KiBjYWNo
ZWRTY3JpcHQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRvKiBleGNlcHRp
b24gPSBqc0R5bmFtaWNEb3duY2FzdDxKU0M6OkV4Y2VwdGlvbio+KHZtLCBleGNlcHRpb25WYWx1
ZSk7CisgICAgaWYgKCFleGNlcHRpb24pIHsKKyAgICAgICAgZXhjZXB0aW9uID0gdm0ubGFzdEV4
Y2VwdGlvbigpOworICAgICAgICBpZiAoIWV4Y2VwdGlvbikKKyAgICAgICAgICAgIGV4Y2VwdGlv
biA9IEpTQzo6RXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhjZXB0aW9uVmFsdWUsIEpT
Qzo6RXhjZXB0aW9uOjpEb05vdENhcHR1cmVTdGFjayk7CisgICAgfQorCisgICAgcmVwb3J0RXhj
ZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgY2FjaGVkU2NyaXB0KTsKK30KKworU3RyaW5nIHJldHJp
ZXZlRXJyb3JNZXNzYWdlKEV4ZWNTdGF0ZSYgc3RhdGUsIFZNJiB2bSwgSlNWYWx1ZSBleGNlcHRp
b24sIENhdGNoU2NvcGUmIGNhdGNoU2NvcGUpCit7CisgICAgaWYgKGF1dG8qIGV4Y2VwdGlvbkJh
c2UgPSB0b0V4Y2VwdGlvbkJhc2Uodm0sIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBleGNl
cHRpb25CYXNlLT50b1N0cmluZygpOworCisgICAgLy8gRklYTUU6IDxodHRwOi8vd2Via2l0Lm9y
Zy9iLzExNTA4Nz4gV2ViIEluc3BlY3RvcjogV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uIHNob3Vs
ZCBub3QgZXZhbHVhdGUgSmF2YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCisgICAgLy8gSWYg
dGhpcyBpcyBhIGN1c3RvbSBleGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0IHRv
IHRyeSBhbmQgZ2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGNlcHRp
b24uCisgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKKyAgICBpZiAoYXV0byogZXJyb3IgPSBqc0R5
bmFtaWNEb3duY2FzdDxFcnJvckluc3RhbmNlKj4odm0sIGV4Y2VwdGlvbikpCisgICAgICAgIGVy
cm9yTWVzc2FnZSA9IGVycm9yLT5zYW5pdGl6ZWRUb1N0cmluZygmc3RhdGUpOworICAgIGVsc2UK
KyAgICAgICAgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisK
KyAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIGFueSBuZXcgZXhjZXB0aW9uIHRoYXQgbWF5IGJlIHRo
cm93biBpbiB0aGUgdG9TdHJpbmcoKSBjYWxsIGFib3ZlLgorICAgIC8vIHJlcG9ydEV4Y2VwdGlv
bigpIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBtYWtpbmcgbmV3IGV4Y2VwdGlvbnMuCisgICAgY2F0
Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOwor
ICAgIHJldHVybiBlcnJvck1lc3NhZ2U7Cit9CisKK3ZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBjYWNo
ZWRTY3JpcHQsIEV4Y2VwdGlvbkRldGFpbHMqIGV4Y2VwdGlvbkRldGFpbHMpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9j
aygpKTsKKyAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLCBleGNlcHRp
b24pKQorICAgICAgICByZXR1cm47CisKKyAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29w
ZShleGVjLT52bSgpKTsKKworICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhj
cmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgU2NyaXB0
Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKSk7CisgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKKyAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKKworICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0g
anNEeW5hbWljRG93bmNhc3Q8SlNET01XaW5kb3cqPih2bSwgZ2xvYmFsT2JqZWN0KSkgeworICAg
ICAgICBpZiAoIXdpbmRvdy0+d3JhcHBlZCgpLmlzQ3VycmVudGx5RGlzcGxheWVkSW5GcmFtZSgp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBsaW5lTnVtYmVyID0gMDsK
KyAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsKKyAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJM
OworICAgIGlmIChjb25zdCBTY3JpcHRDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxTdGFjay0+
Zmlyc3ROb25OYXRpdmVDYWxsRnJhbWUoKSkgeworICAgICAgICBsaW5lTnVtYmVyID0gY2FsbEZy
YW1lLT5saW5lTnVtYmVyKCk7CisgICAgICAgIGNvbHVtbk51bWJlciA9IGNhbGxGcmFtZS0+Y29s
dW1uTnVtYmVyKCk7CisgICAgICAgIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGNhbGxGcmFtZS0+c291
cmNlVVJMKCk7CisgICAgfQorCisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHJldHJpZXZlRXJy
b3JNZXNzYWdlKCpleGVjLCB2bSwgZXhjZXB0aW9uLT52YWx1ZSgpLCBzY29wZSk7CisgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdsb2JhbE9iamVj
dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PnJlcG9ydEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwg
ZXhjZXB0aW9uU291cmNlVVJMLCBleGNlcHRpb24sIGNhbGxTdGFjay0+c2l6ZSgpID8gY2FsbFN0
YWNrIDogbnVsbHB0ciwgY2FjaGVkU2NyaXB0KTsKKworICAgIGlmIChleGNlcHRpb25EZXRhaWxz
KSB7CisgICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPm1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7Cisg
ICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAg
ICBleGNlcHRpb25EZXRhaWxzLT5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7CisgICAgICAg
IGV4Y2VwdGlvbkRldGFpbHMtPnNvdXJjZVVSTCA9IGV4Y2VwdGlvblNvdXJjZVVSTDsKKyAgICB9
Cit9CisKK3ZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CisgICAgYXV0byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0
aW9uKTsKK30KKworc3RhdGljIEpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgRXhjZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nKiBtZXNzYWdlID0gbnVsbHB0cikK
K3sKKyAgICBpZiAoIWVjIHx8IGVjID09IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IpCisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgLy8gRklYTUU6IEhhbmRsZSBvdGhlciBXZWJJ
REwgZXhjZXB0aW9uIHR5cGVzLgorICAgIGlmIChlYyA9PSBUeXBlRXJyb3IpIHsKKyAgICAgICAg
aWYgKCFtZXNzYWdlIHx8IG1lc3NhZ2UtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBj
cmVhdGVUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZXhl
YywgKm1lc3NhZ2UpOworICAgIH0KKworICAgIGlmIChlYyA9PSBSYW5nZUVycm9yKSB7CisgICAg
ICAgIGlmICghbWVzc2FnZSB8fCBtZXNzYWdlLT5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm4gY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkJhZCB2YWx1ZSIpKTsKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgKm1lc3NhZ2UpOworICAgIH0KKwor
ICAgIGlmIChlYyA9PSBTdGFja092ZXJmbG93RXJyb3IpCisgICAgICAgIHJldHVybiBjcmVhdGVT
dGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisKKyAgICAvLyBGSVhNRTogQWxsIGNhbGxlcnMgdG8g
Y3JlYXRlRE9NRXhjZXB0aW9uIG5lZWQgdG8gcGFzcyBpbiB0aGUgY29ycmVjdCBnbG9iYWwgb2Jq
ZWN0LgorICAgIC8vIEZvciBub3csIHdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGUgbGV4aWNhbEds
b2JhbE9iamVjdC4gV2hpY2ggaXMgd3JvbmcgaW4gY2FzZXMgbGlrZSB0aGlzOgorICAgIC8vIGZy
YW1lc1swXS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KG51bGwsIG51bGwpOyAvLyB0aHJvd3MgYW4g
ZXhjZXB0aW9uIHdoaWNoIHNob3VsZCBoYXZlIHRoZSBzdWJmcmFtZSdzIHByb3RvdHlwZXMuCisg
ICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGRlcHJlY2F0ZWRHbG9iYWxPYmpl
Y3RGb3JQcm90b3R5cGUoZXhlYyk7CisKKyAgICBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVz
Y3JpcHRpb24oZWMpOworCisgICAgQ1N0cmluZyBtZXNzYWdlQ1N0cmluZzsKKyAgICBpZiAobWVz
c2FnZSkKKyAgICAgICAgbWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlLT51dGY4KCk7CisgICAgaWYg
KG1lc3NhZ2UgJiYgIW1lc3NhZ2UtPmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJdCBpcyBzYWZl
IHRvIGRvIHRoaXMgYmVjYXVzZSB0aGUgY2hhciogY29udGVudHMgb2YgdGhlIENTdHJpbmcgYXJl
IGNvcGllZCBpbnRvIGEgbmV3IFdURjo6U3RyaW5nIGJlZm9yZSB0aGUgQ1N0cmluZyBpcyBkZXN0
cm95ZWQuCisgICAgICAgIGRlc2NyaXB0aW9uLmRlc2NyaXB0aW9uID0gbWVzc2FnZUNTdHJpbmcu
ZGF0YSgpOworICAgIH0KKworICAgIEpTVmFsdWUgZXJyb3JPYmplY3Q7CisgICAgc3dpdGNoIChk
ZXNjcmlwdGlvbi50eXBlKSB7CisgICAgY2FzZSBET01Db3JlRXhjZXB0aW9uVHlwZToKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICBjYXNlIElEQkRhdGFiYXNlRXhjZXB0aW9uVHlw
ZToKKyNlbmRpZgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBET01Db3JlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGaWxlRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgRmlsZUV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1FMRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJy
b3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1FMRXhjZXB0aW9uOjpjcmVhdGUo
ZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTVkdFeGNlcHRpb25UeXBl
OgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdFeGNl
cHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFhQ
YXRoRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgWFBhdGhFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKGVycm9yT2JqZWN0KTsKKyAgICBhZGRFcnJv
ckluZm8oZXhlYywgYXNPYmplY3QoZXJyb3JPYmplY3QpLCB0cnVlKTsKKyAgICByZXR1cm4gZXJy
b3JPYmplY3Q7Cit9CisKK0pTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgRXhjZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIHJldHVy
biBjcmVhdGVET01FeGNlcHRpb24oZXhlYywgZWMsICZtZXNzYWdlKTsKK30KKworSlNWYWx1ZSBj
cmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9u
KQoreworICAgIHJldHVybiBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBleGNlcHRpb24uY29k
ZSgpLCBleGNlcHRpb24ucmVsZWFzZU1lc3NhZ2UoKSk7Cit9CisKK3ZvaWQgcHJvcGFnYXRlRXhj
ZXB0aW9uU2xvd1BhdGgoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoIXRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlRE9NRXhjZXB0aW9uKHN0YXRlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpKTsKK30KKworYm9v
bCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVj
dCh2YWx1ZSk7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGU7
CisgICAgSlNWYWx1ZSBhcHBseU1ldGhvZCA9IG9iamVjdC0+Z2V0TWV0aG9kKCZzdGF0ZSwgY2Fs
bERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgQVNDSUlM
aXRlcmFsKCJTeW1ib2wuaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKKworICAgIHJldHVybiAhYXBw
bHlNZXRob2QuaXNVbmRlZmluZWQoKTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3Vs
ZEFsbG93QWNjZXNzVG9GcmFtZShFeGVjU3RhdGUmIHN0YXRlLCBGcmFtZSYgZnJhbWUsIFN0cmlu
ZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vz
c1RvRnJhbWUoJnN0YXRlLCAmZnJhbWUsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIG1lc3NhZ2UgPSBmcmFtZS5kb2N1bWVudCgpLT5kb21XaW5k
b3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZzdGF0
ZSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3Vs
ZEFsbG93QWNjZXNzVG9ET01XaW5kb3coRXhlY1N0YXRlJiBzdGF0ZSwgRE9NV2luZG93JiBnbG9i
YWxPYmplY3QsIFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoQmluZGluZ1NlY3VyaXR5Ojpz
aG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBEb05vdFJl
cG9ydFNlY3VyaXR5RXJyb3IpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBtZXNzYWdlID0g
Z2xvYmFsT2JqZWN0LmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRv
dygmc3RhdGUpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgcHJpbnRFcnJvck1lc3Nh
Z2VGb3JGcmFtZShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBp
ZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgZnJhbWUtPmRvY3VtZW50KCktPmRvbVdp
bmRvdygpLT5wcmludEVycm9yTWVzc2FnZShtZXNzYWdlKTsKK30KKworU3RydWN0dXJlKiBnZXRD
YWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8pCit7CisgICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVy
ZXMgPSBnbG9iYWxPYmplY3Quc3RydWN0dXJlcyhOb0xvY2tpbmdOZWNlc3NhcnkpOworICAgIHJl
dHVybiBzdHJ1Y3R1cmVzLmdldChjbGFzc0luZm8pLmdldCgpOworfQorCitTdHJ1Y3R1cmUqIGNh
Y2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKK3sKKyAgICBhdXRvIGxv
Y2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKGdsb2JhbE9iamVjdC52bSgpLmhlYXAsIGdsb2JhbE9i
amVjdC5nY0xvY2soKSk7CisgICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9i
YWxPYmplY3Quc3RydWN0dXJlcyhsb2NrZXIpOworICAgIEFTU0VSVCghc3RydWN0dXJlcy5jb250
YWlucyhjbGFzc0luZm8pKTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPihnbG9iYWxPYmplY3Qudm0oKSwgJmdsb2JhbE9iamVjdCwg
c3RydWN0dXJlKSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworfQorCitzdGF0aWMgY29uc3QgaW50
MzJfdCBrTWF4SW50MzIgPSAweDdmZmZmZmZmOworc3RhdGljIGNvbnN0IGludDMyX3Qga01pbklu
dDMyID0gLWtNYXhJbnQzMiAtIDE7CitzdGF0aWMgY29uc3QgdWludDMyX3Qga01heFVJbnQzMiA9
IDB4ZmZmZmZmZmZVOworc3RhdGljIGNvbnN0IGludDY0X3Qga0pTTWF4SW50ZWdlciA9IDB4MjAw
MDAwMDAwMDAwMDBMTCAtIDE7IC8vIDJeNTMgLSAxLCBsYXJnZXN0IGludGVnZXIgZXhhY3RseSBy
ZXByZXNlbnRhYmxlIGluIEVDTUFTY3JpcHQuCisKK3N0YXRpYyBTdHJpbmcgcmFuZ2VFcnJvclN0
cmluZyhkb3VibGUgdmFsdWUsIGRvdWJsZSBtaW4sIGRvdWJsZSBtYXgpCit7CisgICAgcmV0dXJu
IG1ha2VTdHJpbmcoIlZhbHVlICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHZh
bHVlKSwgIiBpcyBvdXRzaWRlIHRoZSByYW5nZSBbIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VD
TUFTY3JpcHQobWluKSwgIiwgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWF4
KSwgIl0iKTsKK30KKworc3RhdGljIGRvdWJsZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0
ZSwgZG91YmxlIHgsIGRvdWJsZSBtaW5pbXVtLCBkb3VibGUgbWF4aW11bSkKK3sKKyAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkpIHsKKyAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVt
LCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB4ID0gdHJ1bmMoeCk7
CisgICAgaWYgKHggPCBtaW5pbXVtIHx8IHggPiBtYXhpbXVtKSB7CisgICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11
bSkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHg7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEludFR5cGVMaW1pdHMgeworfTsKKwordGVtcGxhdGUg
PD4KK3N0cnVjdCBJbnRUeXBlTGltaXRzPGludDhfdD4geworICAgIHN0YXRpYyBjb25zdCBpbnQ4
X3QgbWluVmFsdWUgPSAtMTI4OworICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWF4VmFsdWUgPSAx
Mjc7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAy
XjgKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50OF90PiB7Cisg
ICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKK307CisKK3RlbXBsYXRlIDw+
CitzdHJ1Y3QgSW50VHlwZUxpbWl0czxpbnQxNl90PiB7CisgICAgc3RhdGljIGNvbnN0IHNob3J0
IG1pblZhbHVlID0gLTMyNzY4OworICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtYXhWYWx1ZSA9IDMy
NzY3OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAv
LyAyXjE2Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVMaW1pdHM8dWludDE2X3Q+
IHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbWF4VmFsdWUgPSA2NTUzNTsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgor
fTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVySW50
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3NpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUs
ICJTaG91bGQgb25seSBiZSB1c2VkIGZvciBzaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKKworICAg
IHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFpdDsKKyAgICAvLyBGYXN0IHBhdGgg
aWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgaW4gdGhlIHJp
Z2h0IHJhbmdlLgorICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpIHsKKyAgICAgICAgaW50MzJfdCBk
ID0gdmFsdWUuYXNJbnQzMigpOworICAgICAgICBpZiAoZCA+PSBMaW1pdHNUcmFpdDo6bWluVmFs
dWUgJiYgZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gZCA8IExpbWl0c1RyYWl0Ojpt
aW5WYWx1ZSA/IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA6IExpbWl0c1RyYWl0OjptYXhWYWx1ZTsK
KyAgICAgICAgfQorICAgICAgICBkICU9IExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlczsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQgPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyBk
IC0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzIDogZCk7CisgICAgfQorCisgICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIDApOworCisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAg
cmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgTGltaXRzVHJhaXQ6Om1pblZhbHVlLCBMaW1p
dHNUcmFpdDo6bWF4VmFsdWUpOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxU
Pih4KTsKKyAgICB9CisKKyAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8
ICF4KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgp
KSA6IGZsb29yKGZhYnMoeCkpOworICAgIHggPSBmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJP
ZlZhbHVlcyk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oeCA+IExpbWl0c1RyYWl0Ojpt
YXhWYWx1ZSA/IHggLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiB4KTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c191bnNpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91
bGQgb25seSBiZSB1c2VkIGZvciB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOworCisgICAgdHlw
ZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OworICAgIC8vIEZhc3QgcGF0aCBpZiB0
aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdo
dCByYW5nZS4KKyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkgeworICAgICAgICB1aW50MzJfdCBk
ID0gdmFsdWUuYXNVSW50MzIoKTsKKyAgICAgICAgaWYgKGQgPD0gTGltaXRzVHJhaXQ6Om1heFZh
bHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOworICAgICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZToKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisKKyAgICBzd2l0Y2ggKGNvbmZpZ3Vy
YXRpb24pIHsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
OgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgorICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAw
LCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xh
bXBUbzxUPih4KTsKKyAgICB9CisKKyAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5m
KHgpIHx8ICF4KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHggPSB4IDwgMCA/IC1mbG9vcihm
YWJzKHgpKSA6IGZsb29yKGZhYnMoeCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihmbW9k
KHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcykpOworfQorCitpbnQ4X3QgdG9JbnQ4RW5m
b3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisKK3VpbnQ4X3QgdG9VSW50OEVuZm9y
Y2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0
dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisKK2ludDhfdCB0b0ludDhDbGFtcChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21h
bGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcCk7Cit9CisKK3VpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90
PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwor
fQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWJ5dGUKK2ludDhfdCB0b0lu
dDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFs
bGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtb2N0
ZXQKK3VpbnQ4X3QgdG9VSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQorewor
ICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQorCitpbnQxNl90IHRvSW50MTZFbmZv
cmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
dG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOworfQorCit1aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VS
YW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1Nt
YWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKK30KKworaW50MTZfdCB0b0ludDE2Q2xhbXAoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGlu
dDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cCk7Cit9CisKK3VpbnQxNl90IHRvVUludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKworLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1zaG9ydAoraW50MTZfdCB0b0ludDE2KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxp
bnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1z
aG9ydAordWludDE2X3QgdG9VSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6Ly93d3cu
dzMub3JnL1RSL1dlYklETC8jZXMtbG9uZworaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAo
dmFsdWUuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAg
ZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIGtNaW5JbnQz
Miwga01heEludDMyKTsKK30KKworaW50MzJfdCB0b0ludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigm
c3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88aW50MzJfdD4o
eCk7Cit9CisKK3VpbnQzMl90IHRvVUludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZh
bHVlLmFzVUludDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzx1aW50MzJfdD4oeCk7Cit9
CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9uZwordWlu
dDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4g
ZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrTWF4VUludDMyKTsKK30KKworaW50NjRfdCB0b0lu
dDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3JjZVJhbmdl
KHN0YXRlLCB4LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50ZWdlcik7Cit9CisKK3VpbnQ2NF90
IHRvVUludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3Jj
ZVJhbmdlKHN0YXRlLCB4LCAwLCBrSlNNYXhJbnRlZ2VyKTsKK30KKworaW50NjRfdCB0b0ludDY0
Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJs
ZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25hbih4KSA/
IDAgOiBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJs
ZT4oeCwgLWtKU01heEludGVnZXIpLCBrSlNNYXhJbnRlZ2VyKSk7Cit9CisKK3VpbnQ2NF90IHRv
VUludDY0Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAg
IGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25h
bih4KSA/IDAgOiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1h
eDxkb3VibGU+KHgsIDApLCBrSlNNYXhJbnRlZ2VyKSk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMu
b3JnL1RSL1dlYklETC8jZXMtbG9uZy1sb25nCitpbnQ2NF90IHRvSW50NjQoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7CisKKyAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBm
aW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOworICAg
IGRvdWJsZVRvSW50ZWdlcih4LCBuKTsKKyAgICByZXR1cm4gbjsKK30KKworLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nLWxvbmcKK3VpbnQ2NF90IHRvVUlu
dDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2
YWx1ZS50b051bWJlcigmc3RhdGUpOworCisgICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5
IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KKyAgICB1bnNpZ25lZCBs
b25nIGxvbmcgbjsKKyAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7CisgICAgcmV0dXJuIG47Cit9
CisKK2NsYXNzIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgeworcHVibGljOgorICAgIEdl
dENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBTdGFja1Zpc2l0
b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSkgeworICAgICAgICAgICAgbV9o
YXNTa2lwcGVkRmlyc3RGcmFtZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNp
dG9yOjpDb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRvKiBjb2RlQmxvY2sg
PSB2aXNpdG9yLT5jb2RlQmxvY2soKSkKKyAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0gY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NF
UlQodmlzaXRvci0+Y2FsbGVlKCkpOworICAgICAgICAgICAgLy8gRklYTUU6IENhbGxlZSBpcyBu
b3QgYW4gb2JqZWN0IGlmIHRoZSBjYWxsZXIgaXMgV2ViIEFzc2VtYmx5LgorICAgICAgICAgICAg
Ly8gRmlndXJlIG91dCB3aGF0IHRvIGRvIGhlcmUuIFdlIGNhbiBwcm9iYWJseSBnZXQgdGhlIGds
b2JhbCBvYmplY3QKKyAgICAgICAgICAgIC8vIGZyb20gdGhlIHRvcC1tb3N0IFdhc20gSW5zdGFu
Y2UuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MjEKKyAgICAg
ICAgICAgIGlmICh2aXNpdG9yLT5jYWxsZWUoKS0+aXNPYmplY3QoKSkKKyAgICAgICAgICAgICAg
ICBtX2dsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxlZSgpKS0+
Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6
RG9uZTsKKyAgICB9CisKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9nbG9iYWxPYmplY3Q7IH0KKworcHJpdmF0ZToKKyAgICBtdXRhYmxlIGJvb2wg
bV9oYXNTa2lwcGVkRmlyc3RGcmFtZSB7IGZhbHNlIH07CisgICAgbXV0YWJsZSBKU0dsb2JhbE9i
amVjdCogbV9nbG9iYWxPYmplY3QgeyBudWxscHRyIH07Cit9OworCitET01XaW5kb3cmIGNhbGxl
ckRPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0
RnVuY3RvciBpdGVyOworICAgIGV4ZWMtPml0ZXJhdGUoaXRlcik7CisgICAgcmV0dXJuIGl0ZXIu
Z2xvYmFsT2JqZWN0KCkgPyBhc0pTRE9NV2luZG93KGl0ZXIuZ2xvYmFsT2JqZWN0KCkpLT53cmFw
cGVkKCkgOiBmaXJzdERPTVdpbmRvdyhleGVjKTsKK30KKworRE9NV2luZG93JiBhY3RpdmVET01X
aW5kb3coRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKTsKK30KKworRE9NV2luZG93JiBmaXJz
dERPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGFzSlNET01XaW5kb3co
ZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgY2FuQWNjZXNzRG9jdW1lbnQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEb2N1bWVu
dCogdGFyZ2V0RG9jdW1lbnQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlv
bikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIXRhcmdldERvY3VtZW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBET01XaW5kb3cmIGFjdGl2ZSA9IGFjdGl2ZURPTVdpbmRvdyhz
dGF0ZSk7CisKKyAgICBpZiAoYWN0aXZlLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkuY2Fu
QWNjZXNzKHRhcmdldERvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBzd2l0Y2ggKHJlcG9ydGluZ09wdGlvbikgeworICAgIGNhc2UgVGhyb3dT
ZWN1cml0eUVycm9yOgorICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKnN0YXRlLCBzY29wZSwg
dGFyZ2V0RG9jdW1lbnQtPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2Fn
ZShhY3RpdmUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMb2dTZWN1cml0eUVycm9yOgor
ICAgICAgICBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKHRhcmdldERvY3VtZW50LT5mcmFtZSgp
LCB0YXJnZXREb2N1bWVudC0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNz
YWdlKGFjdGl2ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERvTm90UmVwb3J0U2VjdXJp
dHlFcnJvcjoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIERPTVdpbmRvdyYgdGFyZ2V0LCBTZWN1cml0eVJlcG9ydGluZ09w
dGlvbiByZXBvcnRpbmdPcHRpb24pCit7CisgICAgcmV0dXJuIGNhbkFjY2Vzc0RvY3VtZW50KHN0
YXRlLCB0YXJnZXQuZG9jdW1lbnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKK30KKworYm9vbCBCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEZyYW1lKiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlv
bikKK3sKKyAgICByZXR1cm4gdGFyZ2V0ICYmIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJn
ZXQtPmRvY3VtZW50KCksIHJlcG9ydGluZ09wdGlvbik7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIE5vZGUq
IHRhcmdldCkKK3sKKyAgICByZXR1cm4gIXRhcmdldCB8fCBjYW5BY2Nlc3NEb2N1bWVudCgmc3Rh
dGUsICZ0YXJnZXQtPmRvY3VtZW50KCksIExvZ1NlY3VyaXR5RXJyb3IpOworfQorICAgIAorc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIHRocm93VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7Cisg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgZXJyb3JNZXNzYWdlKTsK
K30KKworc3RhdGljIHZvaWQgYXBwZW5kQXJndW1lbnRNdXN0QmUoU3RyaW5nQnVpbGRlciYgYnVp
bGRlciwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7Cisg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJBcmd1bWVudCAiKTsKKyAgICBidWlsZGVyLmFwcGVu
ZE51bWJlcihhcmd1bWVudEluZGV4ICsgMSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIg
KCciKTsKKyAgICBidWlsZGVyLmFwcGVuZChhcmd1bWVudE5hbWUpOworICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiJykgdG8gIik7CisgICAgaWYgKCFmdW5jdGlvbk5hbWUpIHsKKyAgICAgICAg
YnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ0aGUgIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGlu
dGVyZmFjZU5hbWUpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBjb25zdHJ1Y3Rv
ciIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5hbWUp
OworICAgICAgICBidWlsZGVyLmFwcGVuZCgnLicpOworICAgICAgICBidWlsZGVyLmFwcGVuZChm
dW5jdGlvbk5hbWUpOworICAgIH0KKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBtdXN0IGJl
ICIpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291
cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRl
bXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwg
aW50ZXJmYWNlTmFtZSwgIiBvYmplY3QuIikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Cit9CisgICAgCit2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291
cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRl
bXB0IHRvIHNldCBwcm9wZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50
ZXJmYWNlTmFtZSwgIiBvYmplY3QuIikpOworfQorCit2b2lkIHRocm93Tm90U3VwcG9ydGVkRXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSKSk7Cit9
CisKK3ZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7
CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZz
dGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIsICZtZXNzYWdlU3RyaW5nKSk7Cit9CisKK3ZvaWQgdGhy
b3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CisgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7CisgICAgdGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5WQUxJ
RF9TVEFURV9FUlIsICZtZXNzYWdlU3RyaW5nKSk7Cit9CisKK3ZvaWQgdGhyb3dTZWN1cml0eUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAg
IHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUs
IFNFQ1VSSVRZX0VSUiwgbWVzc2FnZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93
QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVu
dE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFZhbHVlcykKK3sKKyAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CisgICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJ
bmRleCwgYXJndW1lbnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7
CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJvbmUgb2Y6ICIpOworICAgIGJ1aWxkZXIuYXBw
ZW5kKGV4cGVjdGVkVmFsdWVzKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUs
IHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRo
cm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciog
YXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGFwcGVuZEFyZ3Vt
ZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgaW50ZXJmYWNl
TmFtZSwgZnVuY3Rpb25OYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImEgZnVuY3Rp
b24iKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVy
LnRvU3RyaW5nKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNp
Z25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIq
IGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBj
aGFyKiBleHBlY3RlZFR5cGUpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGFw
cGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwg
ZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiYW4gaW5zdGFuY2Ugb2YgIik7CisgICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRU
eXBlKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVy
LnRvU3RyaW5nKCkpOworfQorCit2b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICB0aHJvd1R5
cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBBcnJheSBlbGVtZW50
IHR5cGUiKSk7Cit9CisKK3ZvaWQgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUp
Cit7CisgICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwg
aW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGF0dHJpYnV0ZSBtdXN0IGJlIGFu
IGluc3RhbmNlIG9mICIsIGV4cGVjdGVkVHlwZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVl
IHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBk
aWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQoreworICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIk1lbWJlciAiKTsKKyAg
ICBidWlsZGVyLmFwcGVuZChkaWN0aW9uYXJ5TmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmQoJy4n
KTsKKyAgICBidWlsZGVyLmFwcGVuZChtZW1iZXJOYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIiBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiKTsKKyAgICBi
dWlsZGVyLmFwcGVuZChleHBlY3RlZFR5cGUpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpT
VmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSkKK3sKKyAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKCZzdGF0ZSwgbWFrZVN0cmluZyhpbnRlcmZhY2VO
YW1lLCAiIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMgdW5hdmFp
bGFibGUiKSkpOworfQorCit2b2lkIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIHRocm93VHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJWYWx1ZSBpcyBub3QgYSBzZXF1ZW5jZSIpKTsK
K30KKwordm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiVGhlIHByb3ZpZGVkIHZhbHVlIGlzIG5vbi1maW5pdGUiKSk7Cit9CisK
K1N0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQoreworICAgIHJldHVybiBtYWtlU3RyaW5n
KCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGdldHRlciBjYW4g
b25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKK30KKworSlND
OjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwg
YXR0cmlidXRlTmFtZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VX
aXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKK3sKKyAgICByZXR1cm4gY3Jl
YXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZUdldHRlclR5cGVFcnJv
ck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgYXR0cmlidXRlTmFtZSkpOworfQorCitib29sIHRocm93
U2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFt
ZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAi
LCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgc2V0dGVyIGNhbiBvbmx5IGJl
IHVzZWQgb24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK1N0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIHJldHVybiBtYWtl
U3RyaW5nKCJDYW4gb25seSBjYWxsICIsIGludGVyZmFjZU5hbWUsICcuJywgZnVuY3Rpb25OYW1l
LCAiIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKK30KKworRW5jb2RlZEpTVmFs
dWUgdGhyb3dUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lKQoreworICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VU
aGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpKTsKK30KKwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJy
ZWRQcm9taXNlJiBwcm9taXNlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBtZXRob2ROYW1lKQoreworICAgIHByb21pc2UucmVqZWN0KFR5cGVFcnJvciwgbWFrZVRoaXNU
eXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVl
IHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCit7CisgICAg
cmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VUaGlz
VHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7Cit9CisKK3ZvaWQg
Y2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQorewor
ICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7CisgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9
IEpTQzo6Z2V0Q2FsbERhdGEoJmZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgQVNTRVJUKGNhbGxU
eXBlICE9IENhbGxUeXBlOjpOb25lKTsKKworICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIg
YXJndW1lbnRzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5hcmd1bWVudENv
dW50KCk7ICsraSkKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudChpKSk7CisgICAgSlNDOjpjYWxsKCZzdGF0ZSwgJmZ1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVudHMpOworfQorCit2b2lkIERPTUNvbnN0cnVjdG9y
SlNCdWlsdGluT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiBjZWxsLCBKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RE9N
Q29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2lu
aXRpYWxpemVGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGxUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ29uc3RydWN0b3Ig
cmVxdWlyZXMgJ25ldycgb3BlcmF0b3IiKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSk7Cit9CisKK0NhbGxUeXBlIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpnZXRDYWxsRGF0
YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1
bmN0aW9uID0gY2FsbFRocm93VHlwZUVycm9yOworICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsK
K30KKwordm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
KyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0
YXRlLCBTWU5UQVhfRVJSKSk7Cit9CisKK3ZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgQVNTRVJUKCFz
Y29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3Jl
YXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgREFUQV9DTE9ORV9FUlIpKTsKK30KKwordm9pZCB0aHJv
d0luZGV4U2l6ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTkRFWF9TSVpF
X0VSUikpOworfQorCit2b2lkIHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhj
ZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4
Y2VwdGlvbigmc3RhdGUsIFRZUEVfTUlTTUFUQ0hfRVJSKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCww
ICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nU2VjdXJpdHkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5LmNw
cAkocmV2aXNpb24gMjExMzUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
aW5kaW5nU2VjdXJpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwzNjcgKzIwLDIwIEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiCiAKLSNpbmNsdWRlICJDYWNoZWRTY3JpcHQu
aCIKLSNpbmNsdWRlICJDb21tb25WTS5oIgotI2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlv
bkNvZGVEZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkhlYWRlcnMuaCIKLSNpbmNs
dWRlICJFeGNlcHRpb25JbnRlcmZhY2VzLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxQYXJz
ZXJJZGlvbXMuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUg
IkpTRE9NQ29udmVydC5oIgotI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgotI2luY2x1ZGUgIkpT
RE9NV2luZG93Q3VzdG9tLmgiCi0jaW5jbHVkZSAiSlNFeGNlcHRpb25CYXNlLmgiCisjaW5jbHVk
ZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93QmFzZS5o
IgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCi0jaW5jbHVkZSA8Ynl0ZWNvZGUvQ29kZUJs
b2NrLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFjay5oPgotI2luY2x1ZGUg
PGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9E
YXRlSW5zdGFuY2UuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9FcnJvckhhbmRsaW5nU2NvcGUuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9ySW5zdGFu
Y2UuaD4KLSNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbi5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
RXhjZXB0aW9uSGVscGVycy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgotI2lu
Y2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7Ci11c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1
Y3Rvck9iamVjdCk7Ci1TVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9N
Q29uc3RydWN0b3JXaXRoRG9jdW1lbnQpOwotCi12b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0
IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQotewotICAgIGNvbW1vblZNKCkuYWRkSW1wdXJl
UHJvcGVydHkocHJvcGVydHlOYW1lKTsKLX0KLQotSlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxs
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQotewotICAgIGlmIChzLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgcmV0dXJuIGpzT3duZWRTdHJpbmcoZXhl
Yywgcyk7Ci19Ci0KLUpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFN0cmluZyYgcykKLXsKLSAgICBpZiAocy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHMpOwot
fQotCi1KU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCi17
Ci0gICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Ci19Ci0K
LUpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVSTCYg
dXJsKQotewotICAgIGlmICh1cmwuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkpOwot
fQotCi1zdGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgU3RyaW5nJiYgc3RyaW5nKQotewotICAgIGlm
ICghc3RyaW5nLmNvbnRhaW5zT25seUxhdGluMSgpKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIHJldHVy
biBzdHJpbmc7Ci19Ci0KLVN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYg
c3RhdGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCi17Ci0gICAgVk0mIHZtID0gc3Rh
dGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICBTdHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmcoKTsKLSAgICByZXR1cm4gc3RyaW5n
VG9CeXRlU3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotU3RyaW5n
IHZhbHVlVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRl
KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotCi0gICAgcmV0dXJuIHN0
cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgYm9vbCBoYXNVbnBhaXJlZFN1cnJvZ2F0ZShTdHJpbmdWaWV3IHN0cmluZykK
LXsKLSAgICAvLyBGYXN0IHBhdGggZm9yIDgtYml0IHN0cmluZ3M7IHRoZXkgY2FuJ3QgaGF2ZSBh
bnkgc3Vycm9nYXRlcy4KLSAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsK
LSAgICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIFN0
cmluZyBzdHJpbmdUb1VTVlN0cmluZyhTdHJpbmcmJiBzdHJpbmcpCi17Ci0gICAgLy8gRmFzdCBw
YXRoIGZvciB0aGUgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbm8gdW5wYWlyZWQgc3Vycm9nYXRlcy4K
LSAgICBpZiAoIWhhc1VucGFpcmVkU3Vycm9nYXRlKHN0cmluZykpCi0gICAgICAgIHJldHVybiBz
dHJpbmc7Ci0KLSAgICAvLyBTbG93IHBhdGg6IGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlk
bC8jZGZuLW9idGFpbi11bmljb2RlCi0gICAgLy8gUmVwbGFjZXMgdW5wYWlyZWQgc3Vycm9nYXRl
cyB3aXRoIHRoZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCi0gICAgU3RyaW5nQnVpbGRlciByZXN1
bHQ7Ci0gICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShzdHJpbmcubGVuZ3RoKCkpOwotICAgIFN0
cmluZ1ZpZXcgdmlldyB7IHN0cmluZyB9OwotICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiB2aWV3
LmNvZGVQb2ludHMoKSkgewotICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkK
LSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVQb2ludCk7Ci0gICAgfQotICAg
IHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLX0KLQotU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0
cmluZyhFeGVjU3RhdGUmLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotewotICAgIFN0
cmluZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOwotICAgIHJldHVybiBzdHJpbmdUb1VT
VlN0cmluZyhXVEZNb3ZlKHN0cmluZykpOwotfQotCi1TdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgU3Ry
aW5nIHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKLQotICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZN
b3ZlKHN0cmluZykpOwotfQotCi1KU1ZhbHVlIGpzRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJs
ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0oKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKLX0K
LQotZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzTnVtYmVy
KCk7Ci0gICAgaWYgKCF2YWx1ZS5pbmhlcml0cyhleGVjLT52bSgpLCBEYXRlSW5zdGFuY2U6Omlu
Zm8oKSkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0
X05hTigpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50b09i
amVjdChleGVjKSktPmludGVybmFsTnVtYmVyKCk7Ci19Ci0KLXZvaWQgcmVwb3J0RXhjZXB0aW9u
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgQ2FjaGVkU2NyaXB0KiBj
YWNoZWRTY3JpcHQpCi17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBSRUxFQVNFX0FT
U0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBhdXRvKiBleGNl
cHRpb24gPSBqc0R5bmFtaWNEb3duY2FzdDxKU0M6OkV4Y2VwdGlvbio+KHZtLCBleGNlcHRpb25W
YWx1ZSk7Ci0gICAgaWYgKCFleGNlcHRpb24pIHsKLSAgICAgICAgZXhjZXB0aW9uID0gdm0ubGFz
dEV4Y2VwdGlvbigpOwotICAgICAgICBpZiAoIWV4Y2VwdGlvbikKLSAgICAgICAgICAgIGV4Y2Vw
dGlvbiA9IEpTQzo6RXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhjZXB0aW9uVmFsdWUs
IEpTQzo6RXhjZXB0aW9uOjpEb05vdENhcHR1cmVTdGFjayk7Ci0gICAgfQotCi0gICAgcmVwb3J0
RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgY2FjaGVkU2NyaXB0KTsKLX0KLQotU3RyaW5nIHJl
dHJpZXZlRXJyb3JNZXNzYWdlKEV4ZWNTdGF0ZSYgc3RhdGUsIFZNJiB2bSwgSlNWYWx1ZSBleGNl
cHRpb24sIENhdGNoU2NvcGUmIGNhdGNoU2NvcGUpCi17Ci0gICAgaWYgKGF1dG8qIGV4Y2VwdGlv
bkJhc2UgPSB0b0V4Y2VwdGlvbkJhc2Uodm0sIGV4Y2VwdGlvbikpCi0gICAgICAgIHJldHVybiBl
eGNlcHRpb25CYXNlLT50b1N0cmluZygpOwotCi0gICAgLy8gRklYTUU6IDxodHRwOi8vd2Via2l0
Lm9yZy9iLzExNTA4Nz4gV2ViIEluc3BlY3RvcjogV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uIHNo
b3VsZCBub3QgZXZhbHVhdGUgSmF2YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCi0gICAgLy8g
SWYgdGhpcyBpcyBhIGN1c3RvbSBleGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0
IHRvIHRyeSBhbmQgZ2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGNl
cHRpb24uCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoYXV0byogZXJyb3IgPSBq
c0R5bmFtaWNEb3duY2FzdDxFcnJvckluc3RhbmNlKj4odm0sIGV4Y2VwdGlvbikpCi0gICAgICAg
IGVycm9yTWVzc2FnZSA9IGVycm9yLT5zYW5pdGl6ZWRUb1N0cmluZygmc3RhdGUpOwotICAgIGVs
c2UKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLnRvV1RGU3RyaW5nKCZzdGF0ZSk7
Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIGFueSBuZXcgZXhjZXB0aW9uIHRoYXQgbWF5IGJl
IHRocm93biBpbiB0aGUgdG9TdHJpbmcoKSBjYWxsIGFib3ZlLgotICAgIC8vIHJlcG9ydEV4Y2Vw
dGlvbigpIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBtYWtpbmcgbmV3IGV4Y2VwdGlvbnMuCi0gICAg
Y2F0Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigpOwotICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigp
OwotICAgIHJldHVybiBlcnJvck1lc3NhZ2U7Ci19Ci0KLXZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBj
YWNoZWRTY3JpcHQsIEV4Y2VwdGlvbkRldGFpbHMqIGV4Y2VwdGlvbkRldGFpbHMpCi17Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJ
TG9jaygpKTsKLSAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLCBleGNl
cHRpb24pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JT
Y29wZShleGVjLT52bSgpKTsKLQotICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFj
ayhjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgU2Ny
aXB0Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKSk7Ci0gICAgc2NvcGUuY2xl
YXJFeGNlcHRpb24oKTsKLSAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKLQotICAgIEpTRE9N
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwotICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93
ID0ganNEeW5hbWljRG93bmNhc3Q8SlNET01XaW5kb3cqPih2bSwgZ2xvYmFsT2JqZWN0KSkgewot
ICAgICAgICBpZiAoIXdpbmRvdy0+d3JhcHBlZCgpLmlzQ3VycmVudGx5RGlzcGxheWVkSW5GcmFt
ZSgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGludCBsaW5lTnVtYmVyID0g
MDsKLSAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsKLSAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNl
VVJMOwotICAgIGlmIChjb25zdCBTY3JpcHRDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxTdGFj
ay0+Zmlyc3ROb25OYXRpdmVDYWxsRnJhbWUoKSkgewotICAgICAgICBsaW5lTnVtYmVyID0gY2Fs
bEZyYW1lLT5saW5lTnVtYmVyKCk7Ci0gICAgICAgIGNvbHVtbk51bWJlciA9IGNhbGxGcmFtZS0+
Y29sdW1uTnVtYmVyKCk7Ci0gICAgICAgIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGNhbGxGcmFtZS0+
c291cmNlVVJMKCk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHJldHJpZXZl
RXJyb3JNZXNzYWdlKCpleGVjLCB2bSwgZXhjZXB0aW9uLT52YWx1ZSgpLCBzY29wZSk7Ci0gICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdsb2JhbE9i
amVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPnJlcG9ydEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJl
ciwgZXhjZXB0aW9uU291cmNlVVJMLCBleGNlcHRpb24sIGNhbGxTdGFjay0+c2l6ZSgpID8gY2Fs
bFN0YWNrIDogbnVsbHB0ciwgY2FjaGVkU2NyaXB0KTsKLQotICAgIGlmIChleGNlcHRpb25EZXRh
aWxzKSB7Ci0gICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPm1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7
Ci0gICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotICAg
ICAgICBleGNlcHRpb25EZXRhaWxzLT5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7Ci0gICAg
ICAgIGV4Y2VwdGlvbkRldGFpbHMtPnNvdXJjZVVSTCA9IGV4Y2VwdGlvblNvdXJjZVVSTDsKLSAg
ICB9Ci19Ci0KLXZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7Ci0gICAgYXV0byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7Ci0g
ICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhj
ZXB0aW9uKTsKLX0KLQotc3RhdGljIEpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgRXhjZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nKiBtZXNzYWdlID0gbnVsbHB0
cikKLXsKLSAgICBpZiAoIWVjIHx8IGVjID09IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IpCi0gICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgLy8gRklYTUU6IEhhbmRsZSBvdGhlciBX
ZWJJREwgZXhjZXB0aW9uIHR5cGVzLgotICAgIGlmIChlYyA9PSBUeXBlRXJyb3IpIHsKLSAgICAg
ICAgaWYgKCFtZXNzYWdlIHx8IG1lc3NhZ2UtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVy
biBjcmVhdGVUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3Io
ZXhlYywgKm1lc3NhZ2UpOwotICAgIH0KLQotICAgIGlmIChlYyA9PSBSYW5nZUVycm9yKSB7Ci0g
ICAgICAgIGlmICghbWVzc2FnZSB8fCBtZXNzYWdlLT5pc0VtcHR5KCkpCi0gICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkJhZCB2YWx1ZSIpKTsK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgKm1lc3NhZ2UpOwotICAgIH0K
LQotICAgIGlmIChlYyA9PSBTdGFja092ZXJmbG93RXJyb3IpCi0gICAgICAgIHJldHVybiBjcmVh
dGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7Ci0KLSAgICAvLyBGSVhNRTogQWxsIGNhbGxlcnMg
dG8gY3JlYXRlRE9NRXhjZXB0aW9uIG5lZWQgdG8gcGFzcyBpbiB0aGUgY29ycmVjdCBnbG9iYWwg
b2JqZWN0LgotICAgIC8vIEZvciBub3csIHdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGUgbGV4aWNh
bEdsb2JhbE9iamVjdC4gV2hpY2ggaXMgd3JvbmcgaW4gY2FzZXMgbGlrZSB0aGlzOgotICAgIC8v
IGZyYW1lc1swXS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KG51bGwsIG51bGwpOyAvLyB0aHJvd3Mg
YW4gZXhjZXB0aW9uIHdoaWNoIHNob3VsZCBoYXZlIHRoZSBzdWJmcmFtZSdzIHByb3RvdHlwZXMu
Ci0gICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGRlcHJlY2F0ZWRHbG9iYWxP
YmplY3RGb3JQcm90b3R5cGUoZXhlYyk7Ci0KLSAgICBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24g
ZGVzY3JpcHRpb24oZWMpOwotCi0gICAgQ1N0cmluZyBtZXNzYWdlQ1N0cmluZzsKLSAgICBpZiAo
bWVzc2FnZSkKLSAgICAgICAgbWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlLT51dGY4KCk7Ci0gICAg
aWYgKG1lc3NhZ2UgJiYgIW1lc3NhZ2UtPmlzRW1wdHkoKSkgewotICAgICAgICAvLyBJdCBpcyBz
YWZlIHRvIGRvIHRoaXMgYmVjYXVzZSB0aGUgY2hhciogY29udGVudHMgb2YgdGhlIENTdHJpbmcg
YXJlIGNvcGllZCBpbnRvIGEgbmV3IFdURjo6U3RyaW5nIGJlZm9yZSB0aGUgQ1N0cmluZyBpcyBk
ZXN0cm95ZWQuCi0gICAgICAgIGRlc2NyaXB0aW9uLmRlc2NyaXB0aW9uID0gbWVzc2FnZUNTdHJp
bmcuZGF0YSgpOwotICAgIH0KLQotICAgIEpTVmFsdWUgZXJyb3JPYmplY3Q7Ci0gICAgc3dpdGNo
IChkZXNjcmlwdGlvbi50eXBlKSB7Ci0gICAgY2FzZSBET01Db3JlRXhjZXB0aW9uVHlwZToKLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBjYXNlIElEQkRhdGFiYXNlRXhjZXB0aW9u
VHlwZToKLSNlbmRpZgotICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBET01Db3JlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGaWxlRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmplY3QgPSB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgRmlsZUV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9u
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1FMRXhjZXB0aW9uVHlwZToKLSAgICAgICAg
ZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1FMRXhjZXB0aW9uOjpjcmVh
dGUoZGVzY3JpcHRpb24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTVkdFeGNlcHRpb25U
eXBlOgotICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdF
eGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFhQYXRoRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgWFBhdGhFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGVycm9yT2JqZWN0KTsKLSAgICBhZGRF
cnJvckluZm8oZXhlYywgYXNPYmplY3QoZXJyb3JPYmplY3QpLCB0cnVlKTsKLSAgICByZXR1cm4g
ZXJyb3JPYmplY3Q7Ci19Ci0KLUpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgRXhjZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIHJl
dHVybiBjcmVhdGVET01FeGNlcHRpb24oZXhlYywgZWMsICZtZXNzYWdlKTsKLX0KLQotSlNWYWx1
ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uJiYgZXhjZXB0
aW9uKQotewotICAgIHJldHVybiBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBleGNlcHRpb24u
Y29kZSgpLCBleGNlcHRpb24ucmVsZWFzZU1lc3NhZ2UoKSk7Ci19Ci0KLXZvaWQgcHJvcGFnYXRl
RXhjZXB0aW9uU2xvd1BhdGgoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHRocm93U2NvcGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKLXsKLSAgICBBU1NFUlQoIXRocm93
U2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKHN0YXRlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpKTsKLX0KLQot
Ym9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKLXsKLSAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09i
amVjdCh2YWx1ZSk7Ci0gICAgQ2FsbERhdGEgY2FsbERhdGE7Ci0gICAgQ2FsbFR5cGUgY2FsbFR5
cGU7Ci0gICAgSlNWYWx1ZSBhcHBseU1ldGhvZCA9IG9iamVjdC0+Z2V0TWV0aG9kKCZzdGF0ZSwg
Y2FsbERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgQVND
SUlMaXRlcmFsKCJTeW1ib2wuaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNhbGxhYmxlIikp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKLQotICAgIHJldHVybiAh
YXBwbHlNZXRob2QuaXNVbmRlZmluZWQoKTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9GcmFtZShFeGVjU3RhdGUmIHN0YXRlLCBGcmFtZSYgZnJhbWUsIFN0
cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0Fj
Y2Vzc1RvRnJhbWUoJnN0YXRlLCAmZnJhbWUsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIG1lc3NhZ2UgPSBmcmFtZS5kb2N1bWVudCgpLT5kb21X
aW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZz
dGF0ZSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coRXhlY1N0YXRlJiBzdGF0ZSwgRE9NV2luZG93JiBn
bG9iYWxPYmplY3QsIFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAoQmluZGluZ1NlY3VyaXR5
OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBEb05v
dFJlcG9ydFNlY3VyaXR5RXJyb3IpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBtZXNzYWdl
ID0gZ2xvYmFsT2JqZWN0LmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdp
bmRvdygmc3RhdGUpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgcHJpbnRFcnJvck1l
c3NhZ2VGb3JGcmFtZShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAg
ICBpZiAoIWZyYW1lKQpAQCAtMzg4LDM4MSArNDEsNiBAQCB2b2lkIHByaW50RXJyb3JNZXNzYWdl
Rm9yRnJhbWUoRnJhbWUqIGZyCiAgICAgZnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5w
cmludEVycm9yTWVzc2FnZShtZXNzYWdlKTsKIH0KIAotU3RydWN0dXJlKiBnZXRDYWNoZWRET01T
dHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm8pCi17Ci0gICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9i
YWxPYmplY3Quc3RydWN0dXJlcyhOb0xvY2tpbmdOZWNlc3NhcnkpOwotICAgIHJldHVybiBzdHJ1
Y3R1cmVzLmdldChjbGFzc0luZm8pLmdldCgpOwotfQotCi1TdHJ1Y3R1cmUqIGNhY2hlRE9NU3Ry
dWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKLXsKLSAgICBhdXRvIGxvY2tlciA9IGxv
Y2tEdXJpbmdNYXJraW5nKGdsb2JhbE9iamVjdC52bSgpLmhlYXAsIGdsb2JhbE9iamVjdC5nY0xv
Y2soKSk7Ci0gICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9iYWxPYmplY3Qu
c3RydWN0dXJlcyhsb2NrZXIpOwotICAgIEFTU0VSVCghc3RydWN0dXJlcy5jb250YWlucyhjbGFz
c0luZm8pKTsKLSAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlPihnbG9iYWxPYmplY3Qudm0oKSwgJmdsb2JhbE9iamVjdCwgc3RydWN0dXJl
KSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwotfQotCi1zdGF0aWMgY29uc3QgaW50MzJfdCBrTWF4
SW50MzIgPSAweDdmZmZmZmZmOwotc3RhdGljIGNvbnN0IGludDMyX3Qga01pbkludDMyID0gLWtN
YXhJbnQzMiAtIDE7Ci1zdGF0aWMgY29uc3QgdWludDMyX3Qga01heFVJbnQzMiA9IDB4ZmZmZmZm
ZmZVOwotc3RhdGljIGNvbnN0IGludDY0X3Qga0pTTWF4SW50ZWdlciA9IDB4MjAwMDAwMDAwMDAw
MDBMTCAtIDE7IC8vIDJeNTMgLSAxLCBsYXJnZXN0IGludGVnZXIgZXhhY3RseSByZXByZXNlbnRh
YmxlIGluIEVDTUFTY3JpcHQuCi0KLXN0YXRpYyBTdHJpbmcgcmFuZ2VFcnJvclN0cmluZyhkb3Vi
bGUgdmFsdWUsIGRvdWJsZSBtaW4sIGRvdWJsZSBtYXgpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJp
bmcoIlZhbHVlICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHZhbHVlKSwgIiBp
cyBvdXRzaWRlIHRoZSByYW5nZSBbIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQo
bWluKSwgIiwgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWF4KSwgIl0iKTsK
LX0KLQotc3RhdGljIGRvdWJsZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgZG91Ymxl
IHgsIGRvdWJsZSBtaW5pbXVtLCBkb3VibGUgbWF4aW11bSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0
ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAg
IGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkpIHsKLSAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVt
KSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICB4ID0gdHJ1bmMoeCk7Ci0gICAgaWYg
KHggPCBtaW5pbXVtIHx8IHggPiBtYXhpbXVtKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotc3RydWN0IEludFR5cGVMaW1pdHMgewotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVj
dCBJbnRUeXBlTGltaXRzPGludDhfdD4gewotICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWluVmFs
dWUgPSAtMTI4OwotICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWF4VmFsdWUgPSAxMjc7Ci0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKLX07Ci0K
LXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50OF90PiB7Ci0gICAgc3RhdGlj
IGNvbnN0IHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3Qg
SW50VHlwZUxpbWl0czxpbnQxNl90PiB7Ci0gICAgc3RhdGljIGNvbnN0IHNob3J0IG1pblZhbHVl
ID0gLTMyNzY4OwotICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtYXhWYWx1ZSA9IDMyNzY3OwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Ci19
OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8dWludDE2X3Q+IHsKLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbWF4VmFsdWUgPSA2NTUzNTsKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgotfTsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVySW50KEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBj
b25maWd1cmF0aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQg
b25seSBiZSB1c2VkIGZvciBzaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKLQotICAgIHR5cGVkZWYg
SW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFpdDsKLSAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZh
bHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdl
LgotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpIHsKLSAgICAgICAgaW50MzJfdCBkID0gdmFsdWUu
YXNJbnQzMigpOwotICAgICAgICBpZiAoZCA+PSBMaW1pdHNUcmFpdDo6bWluVmFsdWUgJiYgZCA8
PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VD4oZCk7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gZCA8IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA/
IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA6IExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKLSAgICAgICAg
fQotICAgICAgICBkICU9IExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlczsKLSAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFQ+KGQgPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyBkIC0gTGltaXRz
VHJhaXQ6Om51bWJlck9mVmFsdWVzIDogZCk7Ci0gICAgfQotCi0gICAgZG91YmxlIHggPSB2YWx1
ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwot
Ci0gICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJuIGVu
Zm9yY2VSYW5nZShzdGF0ZSwgeCwgTGltaXRzVHJhaXQ6Om1pblZhbHVlLCBMaW1pdHNUcmFpdDo6
bWF4VmFsdWUpOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4KTsKLSAg
ICB9Ci0KLSAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4KQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6IGZsb29y
KGZhYnMoeCkpOwotICAgIHggPSBmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyk7
Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oeCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/
IHggLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiB4KTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Ci1zdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbikKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc191bnNpZ25l
ZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91bGQgb25seSBi
ZSB1c2VkIGZvciB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOwotCi0gICAgdHlwZWRlZiBJbnRU
eXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OwotICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUg
aXMgYWxyZWFkeSBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4K
LSAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkgewotICAgICAgICB1aW50MzJfdCBkID0gdmFsdWUu
YXNVSW50MzIoKTsKLSAgICAgICAgaWYgKGQgPD0gTGltaXRzVHJhaXQ6Om1heFZhbHVlKQotICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwotICAgICAgICBzd2l0Y2ggKGNvbmZp
Z3VyYXRpb24pIHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
Ok5vcm1hbDoKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKLSAgICAgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoK
LSAgICAgICAgICAgIHJldHVybiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0KLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsK
LSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3Jj
ZVJhbmdlOgotICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBMaW1pdHNU
cmFpdDo6bWF4VmFsdWUpOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKLSAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxUPih4
KTsKLSAgICB9Ci0KLSAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8ICF4
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgpKSA6
IGZsb29yKGZhYnMoeCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihmbW9kKHgsIExpbWl0
c1RyYWl0OjpudW1iZXJPZlZhbHVlcykpOwotfQotCi1pbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9T
bWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLXVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21h
bGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLWludDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxp
bnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cCk7Ci19Ci0KLXVpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi0vLyBo
dHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWJ5dGUKLWludDhfdCB0b0ludDgoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGlu
dDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1h
bCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtb2N0ZXQKLXVpbnQ4
X3QgdG9VSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVy
biB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi1pbnQxNl90IHRvSW50MTZFbmZvcmNlUmFuZ2Uo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVy
SW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpFbmZvcmNlUmFuZ2UpOwotfQotCi11aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50
PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
RW5mb3JjZVJhbmdlKTsKLX0KLQotaW50MTZfdCB0b0ludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0
YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Ci19Ci0K
LXVpbnQxNl90IHRvVUludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKLX0KLQotLy8gaHR0cDovL3d3dy53
My5vcmcvVFIvV2ViSURMLyNlcy1zaG9ydAotaW50MTZfdCB0b0ludDE2KEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90Pihz
dGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0K
LQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1zaG9ydAotdWlu
dDE2X3QgdG9VSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RS
L1dlYklETC8jZXMtbG9uZwotaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAodmFsdWUuaXNJ
bnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotCi0gICAgZG91YmxlIHgg
PSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IDApOwotICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIGtNaW5JbnQzMiwga01heElu
dDMyKTsKLX0KLQotaW50MzJfdCB0b0ludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKLXsKLSAgICBpZiAodmFsdWUuaXNJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFs
dWUuYXNJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwot
ICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88aW50MzJfdD4oeCk7Ci19Ci0K
LXVpbnQzMl90IHRvVUludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
LXsKLSAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUlu
dDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgcmV0
dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzx1aW50MzJfdD4oeCk7Ci19Ci0KLS8vIGh0
dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9uZwotdWludDMyX3QgdG9V
SW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLQotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFs
dWUuYXNVSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJh
bmdlKHN0YXRlLCB4LCAwLCBrTWF4VUludDMyKTsKLX0KLQotaW50NjRfdCB0b0ludDY0RW5mb3Jj
ZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4
LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50ZWdlcik7Ci19Ci0KLXVpbnQ2NF90IHRvVUludDY0
RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0
YXRlLCB4LCAwLCBrSlNNYXhJbnRlZ2VyKTsKLX0KLQotaW50NjRfdCB0b0ludDY0Q2xhbXAoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFs
dWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBzdGF0
aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgLWtK
U01heEludGVnZXIpLCBrSlNNYXhJbnRlZ2VyKSk7Ci19Ci0KLXVpbnQ2NF90IHRvVUludDY0Q2xh
bXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4
ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAg
OiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+
KHgsIDApLCBrSlNNYXhJbnRlZ2VyKSk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dl
YklETC8jZXMtbG9uZy1sb25nCi1pbnQ2NF90IHRvSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0K
LSAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFs
dWVzIG1vZHVsbyAyXjY0LgotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOwotICAgIGRvdWJsZVRv
SW50ZWdlcih4LCBuKTsKLSAgICByZXR1cm4gbjsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nLWxvbmcKLXVpbnQ2NF90IHRvVUludDY0KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50b051
bWJlcigmc3RhdGUpOwotCi0gICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7IGNv
bnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KLSAgICB1bnNpZ25lZCBsb25nIGxvbmcg
bjsKLSAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7Ci0gICAgcmV0dXJuIG47Ci19Ci0KLWNsYXNz
IEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgewotcHVibGljOgotICAgIEdldENhbGxlckds
b2JhbE9iamVjdEZ1bmN0b3IoKSA9IGRlZmF1bHQ7Ci0KLSAgICBTdGFja1Zpc2l0b3I6OlN0YXR1
cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKLSAgICB7Ci0gICAgICAg
IGlmICghbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSkgewotICAgICAgICAgICAgbV9oYXNTa2lwcGVk
Rmlyc3RGcmFtZSA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpDb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhdXRvKiBjb2RlQmxvY2sgPSB2aXNpdG9y
LT5jb2RlQmxvY2soKSkKLSAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQodmlzaXRv
ci0+Y2FsbGVlKCkpOwotICAgICAgICAgICAgLy8gRklYTUU6IENhbGxlZSBpcyBub3QgYW4gb2Jq
ZWN0IGlmIHRoZSBjYWxsZXIgaXMgV2ViIEFzc2VtYmx5LgotICAgICAgICAgICAgLy8gRmlndXJl
IG91dCB3aGF0IHRvIGRvIGhlcmUuIFdlIGNhbiBwcm9iYWJseSBnZXQgdGhlIGdsb2JhbCBvYmpl
Y3QKLSAgICAgICAgICAgIC8vIGZyb20gdGhlIHRvcC1tb3N0IFdhc20gSW5zdGFuY2UuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MjEKLSAgICAgICAgICAgIGlm
ICh2aXNpdG9yLT5jYWxsZWUoKS0+aXNPYmplY3QoKSkKLSAgICAgICAgICAgICAgICBtX2dsb2Jh
bE9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxlZSgpKS0+Z2xvYmFsT2Jq
ZWN0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6RG9uZTsKLSAg
ICB9Ci0KLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9nbG9iYWxPYmplY3Q7IH0KLQotcHJpdmF0ZToKLSAgICBtdXRhYmxlIGJvb2wgbV9oYXNTa2lw
cGVkRmlyc3RGcmFtZSB7IGZhbHNlIH07Ci0gICAgbXV0YWJsZSBKU0dsb2JhbE9iamVjdCogbV9n
bG9iYWxPYmplY3QgeyBudWxscHRyIH07Ci19OwotCi1ET01XaW5kb3cmIGNhbGxlckRPTVdpbmRv
dyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvciBp
dGVyOwotICAgIGV4ZWMtPml0ZXJhdGUoaXRlcik7Ci0gICAgcmV0dXJuIGl0ZXIuZ2xvYmFsT2Jq
ZWN0KCkgPyBhc0pTRE9NV2luZG93KGl0ZXIuZ2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCkgOiBm
aXJzdERPTVdpbmRvdyhleGVjKTsKLX0KLQotRE9NV2luZG93JiBhY3RpdmVET01XaW5kb3coRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSktPndyYXBwZWQoKTsKLX0KLQotRE9NV2luZG93JiBmaXJzdERPTVdpbmRv
dyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+dm1F
bnRyeUdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wg
Y2FuQWNjZXNzRG9jdW1lbnQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEb2N1bWVudCogdGFyZ2V0
RG9jdW1lbnQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKIHsKICAg
ICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKQEAgLTc5MCwyNDUgKzY4LDM1IEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBjYW5BY2Nlc3NEb2N1bWVudChKU0MKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJv
b2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgRE9NV2luZG93JiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9u
IHJlcG9ydGluZ09wdGlvbikKLXsKLSAgICByZXR1cm4gY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUs
IHRhcmdldC5kb2N1bWVudCgpLCByZXBvcnRpbmdPcHRpb24pOwotfQotCi1ib29sIEJpbmRpbmdT
ZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
RnJhbWUqIHRhcmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQot
ewotICAgIHJldHVybiB0YXJnZXQgJiYgY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC0+
ZG9jdW1lbnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgTm9kZSogdGFy
Z2V0KQotewotICAgIHJldHVybiAhdGFyZ2V0IHx8IGNhbkFjY2Vzc0RvY3VtZW50KCZzdGF0ZSwg
JnRhcmdldC0+ZG9jdW1lbnQoKSwgTG9nU2VjdXJpdHlFcnJvcik7Ci19Ci0gICAgCi1zdGF0aWMg
RW5jb2RlZEpTVmFsdWUgdGhyb3dUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICBy
ZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwotfQot
Ci1zdGF0aWMgdm9pZCBhcHBlbmRBcmd1bWVudE11c3RCZShTdHJpbmdCdWlsZGVyJiBidWlsZGVy
LCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIkFyZ3VtZW50ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kTnVt
YmVyKGFyZ3VtZW50SW5kZXggKyAxKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAoJyIp
OwotICAgIGJ1aWxkZXIuYXBwZW5kKGFyZ3VtZW50TmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRM
aXRlcmFsKCInKSB0byAiKTsKLSAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgewotICAgICAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoInRoZSAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJm
YWNlTmFtZSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGNvbnN0cnVjdG9yIik7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7Ci0g
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZ1bmN0
aW9uTmFtZSk7Ci0gICAgfQotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG11c3QgYmUgIik7
Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKLSAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQg
dG8gYWNjZXNzIHByb3BlcnR5ICciLCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRl
cmZhY2VOYW1lLCAiIG9iamVjdC4iKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLX0KLSAgICAKLXZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hh
ciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKLSAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6
OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQg
dG8gc2V0IHByb3BlcnR5ICciLCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZh
Y2VOYW1lLCAiIG9iamVjdC4iKSk7Ci19Ci0KLXZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgQVNT
RVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29w
ZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpKTsKLX0KLQot
dm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpU
aHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBBU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpKTsKLSAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKLSAg
ICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRl
LCBOT1RfU1VQUE9SVEVEX0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsKLX0KLQotdm9pZCB0aHJvd0lu
dmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlv
bigpKTsKLSAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKLSAgICB0aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTlZBTElEX1NU
QVRFX0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsKLX0KLQotdm9pZCB0aHJvd1NlY3VyaXR5RXJyb3Io
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhy
b3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU0VD
VVJJVFlfRVJSLCBtZXNzYWdlKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1
bWVudE11c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFt
ZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVzKQotewotICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKLSAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVudEluZGV4
LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKLSAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIm9uZSBvZjogIik7Ci0gICAgYnVpbGRlci5hcHBlbmQo
ZXhwZWN0ZWRWYWx1ZXMpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dB
cmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1
bWVudE5hbWUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBwZW5kQXJndW1lbnRN
dXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBpbnRlcmZhY2VOYW1l
LCBmdW5jdGlvbk5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYSBmdW5jdGlvbiIp
OwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9T
dHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVk
IGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVu
Y3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIq
IGV4cGVjdGVkVHlwZSkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBwZW5k
QXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBmdW5j
dGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJhbiBpbnN0YW5jZSBvZiAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFR5cGUp
OwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9T
dHJpbmcoKSk7Ci19Ci0KLXZvaWQgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIHRocm93VHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIEFycmF5IGVsZW1lbnQgdHlw
ZSIpKTsKLX0KLQotdm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKLXsK
LSAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRl
cmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgYXR0cmlidXRlIG11c3QgYmUgYW4gaW5z
dGFuY2Ugb2YgIiwgZXhwZWN0ZWRUeXBlKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhy
b3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rp
b25hcnlOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCi17Ci0gICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiTWVtYmVyICIpOwotICAgIGJ1
aWxkZXIuYXBwZW5kKGRpY3Rpb25hcnlOYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnLicpOwot
ICAgIGJ1aWxkZXIuYXBwZW5kKG1lbWJlck5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICIpOwotICAgIGJ1aWxk
ZXIuYXBwZW5kKGV4cGVjdGVkVHlwZSk7Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0
YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1
ZSB0aHJvd0NvbnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3Io
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFy
KiBpbnRlcmZhY2VOYW1lKQotewotICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoJnN0YXRlLCBzY29w
ZSwgY3JlYXRlUmVmZXJlbmNlRXJyb3IoJnN0YXRlLCBtYWtlU3RyaW5nKGludGVyZmFjZU5hbWUs
ICIgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBleGVjdXRpb24gY29udGV4dCBpcyB1bmF2YWlsYWJs
ZSIpKSk7Ci19Ci0KLXZvaWQgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgdGhyb3dUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlZhbHVlIGlzIG5vdCBhIHNlcXVlbmNlIikpOwotfQot
Ci12b2lkIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpCi17Ci0gICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgQVND
SUlMaXRlcmFsKCJUaGUgcHJvdmlkZWQgdmFsdWUgaXMgbm9uLWZpbml0ZSIpKTsKLX0KLQotU3Ry
aW5nIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIlRo
ZSAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgZ2V0dGVyIGNhbiBvbmx5
IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpOwotfQotCi1KU0M6OkVu
Y29kZWRKU1ZhbHVlIHRocm93R2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3Rh
dGUsIHNjb3BlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRy
aWJ1dGVOYW1lKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhH
ZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZh
Y2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewotICAgIHJldHVybiBjcmVhdGVS
ZWplY3RlZFByb21pc2VXaXRoVHlwZUVycm9yKHN0YXRlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVz
c2FnZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7Ci19Ci0KLWJvb2wgdGhyb3dTZXR0
ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQor
Ym9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShFeGVjU3RhdGUm
IHN0YXRlLCBGcmFtZSYgZnJhbWUsIFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICB0aHJvd1R5cGVF
cnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLics
IGF0dHJpYnV0ZU5hbWUsICIgc2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9m
ICIsIGludGVyZmFjZU5hbWUpKTsKKyAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxv
d0FjY2Vzc1RvRnJhbWUoJnN0YXRlLCAmZnJhbWUsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIG1lc3NhZ2UgPSBmcmFtZS5kb2N1bWVudCgpLT5k
b21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93
KCZzdGF0ZSkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotU3RyaW5nIG1ha2VUaGlzVHlwZUVy
cm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNhbiBvbmx5IGNhbGwgIiwgaW50ZXJm
YWNlTmFtZSwgJy4nLCBmdW5jdGlvbk5hbWUsICIgb24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFj
ZU5hbWUpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZh
Y2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5h
bWUsIGZ1bmN0aW9uTmFtZSkpOwotfQotCi1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21p
c2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmIHByb21pc2UsIGNvbnN0IGNoYXIq
IGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCi17Ci0gICAgcHJvbWlzZS5y
ZWplY3QoVHlwZUVycm9yLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwg
bWV0aG9kTmFtZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogbWV0aG9kTmFtZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0
aFR5cGVFcnJvcihzdGF0ZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUs
IG1ldGhvZE5hbWUpKTsKLX0KLQotdm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50
cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEpTQzo6
SlNGdW5jdGlvbiYgZnVuY3Rpb24pCi17Ci0gICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKLSAg
ICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YSgmZnVuY3Rpb24sIGNh
bGxEYXRhKTsKLSAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotCi0gICAg
SlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsgKytpKQotICAgICAgICBhcmd1bWVudHMu
YXBwZW5kKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKLSAgICBKU0M6OmNhbGwoJnN0YXRl
LCAmZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJnRoaXNPYmplY3QsIGFyZ3VtZW50cyk7
Ci19Ci0KLXZvaWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgYXV0
byogdGhpc09iamVjdCA9IGpzQ2FzdDxET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCo+KGNl
bGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
LSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0
b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsKLX0KLQotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFRocm93VHlwZUVycm9yKEV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyBvcGVyYXRvciIpKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKLX0KLQotQ2FsbFR5cGUgRE9NQ29u
c3RydWN0b3JPYmplY3Q6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkK
LXsKLSAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsVGhyb3dUeXBlRXJyb3I7Ci0g
ICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0OwotfQotCi12b2lkIHRocm93RE9NU3ludGF4RXJyb3Io
SlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQorYm9vbCBCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coRXhlY1N0YXRlJiBzdGF0
ZSwgRE9NV2luZG93JiBnbG9iYWxPYmplY3QsIFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBBU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3Bl
LCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTWU5UQVhfRVJSKSk7CisgICAgaWYgKEJpbmRp
bmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIGdsb2JhbE9i
amVjdCwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgbWVzc2FnZSA9IGdsb2JhbE9iamVjdC5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShh
Y3RpdmVET01XaW5kb3coJnN0YXRlKSk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIHRo
cm93RGF0YUNsb25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKQorYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5k
b3coSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBET01XaW5kb3cmIHRhcmdldCwgU2VjdXJpdHlSZXBv
cnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQogewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0
aW9uKCkpOwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2Vw
dGlvbigmc3RhdGUsIERBVEFfQ0xPTkVfRVJSKSk7CisgICAgcmV0dXJuIGNhbkFjY2Vzc0RvY3Vt
ZW50KHN0YXRlLCB0YXJnZXQuZG9jdW1lbnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKIH0KIAotdm9p
ZCB0aHJvd0luZGV4U2l6ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJh
bWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBGcmFtZSogdGFyZ2V0LCBTZWN1cml0eVJlcG9ydGlu
Z09wdGlvbiByZXBvcnRpbmdPcHRpb24pCiB7Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24o
KSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9u
KCZzdGF0ZSwgSU5ERVhfU0laRV9FUlIpKTsKKyAgICByZXR1cm4gdGFyZ2V0ICYmIGNhbkFjY2Vz
c0RvY3VtZW50KHN0YXRlLCB0YXJnZXQtPmRvY3VtZW50KCksIHJlcG9ydGluZ09wdGlvbik7CiB9
CiAKLXZvaWQgdGhyb3dUeXBlTWlzbWF0Y2hFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb05vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBOb2RlKiB0YXJnZXQpCiB7Ci0gICAg
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBz
Y29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgVFlQRV9NSVNNQVRDSF9FUlIpKTsKKyAg
ICByZXR1cm4gIXRhcmdldCB8fCBjYW5BY2Nlc3NEb2N1bWVudCgmc3RhdGUsICZ0YXJnZXQtPmRv
Y3VtZW50KCksIExvZ1NlY3VyaXR5RXJyb3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmdTZWN1cml0eS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1Nl
Y3VyaXR5LmgJKHJldmlzaW9uIDIxMTM1MykJKGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmg6MjExMzUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nU2VjdXJpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyNSBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUu
b3JnKQorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2LCAyMDA4LTIwMDksIDIwMTMsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNyBT
YW11ZWwgV2VpbmlnIDxzYW1Ad2Via2l0Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIEVy
aWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxMyBN
aWNoYWVsIFBydWV0dCA8bWljaGFlbEA2OGsub3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKKyNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKKyNpbmNs
dWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgorI2lu
Y2x1ZGUgIkpTRHluYW1pY0Rvd25jYXN0LmgiCisjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgi
CisjaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oIgorI2luY2x1ZGUgIldlYkNvcmVU
eXBlZEFycmF5Q29udHJvbGxlci5oIgorI2luY2x1ZGUgPGNzdGRkZWY+CisjaW5jbHVkZSA8aGVh
cC9IZWFwSW5saW5lcy5oPgorI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+Cisj
aW5jbHVkZSA8aGVhcC9XZWFrLmg+CisjaW5jbHVkZSA8aGVhcC9XZWFrSW5saW5lcy5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaD4KKyNp
bmNsdWRlIDxydW50aW1lL0pTQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZm
ZXIuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CisjaW5jbHVkZSA8
cnVudGltZS9KU0NlbGxJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU09iamVjdElubGlu
ZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0xvb2t1cC5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KKyNp
bmNsdWRlIDxydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5
cGVkQXJyYXlJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgorI2lu
Y2x1ZGUgPHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KyNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGZp
bGUgYSBsb3QgZWFzaWVyIHRvIHJlYWQgYnkgcHV0dGluZyBhbGwgZnVuY3Rpb24gZGVjbGFyYXRp
b25zIGF0IHRoZSB0b3AsCisvLyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYmVsb3csIGV2ZW4g
Zm9yIHRlbXBsYXRlIGFuZCBpbmxpbmUgZnVuY3Rpb25zLgorCituYW1lc3BhY2UgSlNDIHsKK2Ns
YXNzIEpTRnVuY3Rpb247Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVk
U2NyaXB0OworY2xhc3MgRGVmZXJyZWRQcm9taXNlOworY2xhc3MgRE9NV2luZG93OworY2xhc3Mg
RnJhbWU7CitjbGFzcyBVUkw7CitjbGFzcyBOb2RlOworCitzdHJ1Y3QgRXhjZXB0aW9uRGV0YWls
cyB7CisgICAgU3RyaW5nIG1lc3NhZ2U7CisgICAgaW50IGxpbmVOdW1iZXIgeyAwIH07CisgICAg
aW50IGNvbHVtbk51bWJlciB7IDAgfTsKKyAgICBTdHJpbmcgc291cmNlVVJMOworfTsKKworLy8g
QmFzZSBjbGFzcyBmb3IgYWxsIGNvbnN0cnVjdG9yIG9iamVjdHMgaW4gdGhlIEpTQyBiaW5kaW5n
cy4KK2NsYXNzIERPTUNvbnN0cnVjdG9yT2JqZWN0IDogcHVibGljIEpTRE9NT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIEpTRE9NT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBKU0M6OkltcGxl
bWVudHNIYXNJbnN0YW5jZSB8IEpTQzo6SW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSB8IEpT
Qzo6VHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRhOworICAgIHN0YXRpYyBKU0M6OlN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpK
U1ZhbHVlKTsKKworcHJvdGVjdGVkOgorICAgIERPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQzo6U3Ry
dWN0dXJlKiwgSlNET01HbG9iYWxPYmplY3QmKTsKKworICAgIHN0YXRpYyBTdHJpbmcgY2xhc3NO
YW1lKGNvbnN0IEpTT2JqZWN0Kik7CisgICAgc3RhdGljIEpTQzo6Q2FsbFR5cGUgZ2V0Q2FsbERh
dGEoSlNDZWxsKiwgSlNDOjpDYWxsRGF0YSYpOworfTsKKworY2xhc3MgRE9NQ29uc3RydWN0b3JK
U0J1aWx0aW5PYmplY3QgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworcHVibGljOgor
ICAgIHR5cGVkZWYgRE9NQ29uc3RydWN0b3JPYmplY3QgQmFzZTsKKworcHJvdGVjdGVkOgorICAg
IERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6U3RydWN0dXJlKiwgSlNET01HbG9i
YWxPYmplY3QmKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiwg
SlNDOjpTbG90VmlzaXRvciYpOworCisgICAgSlNDOjpKU0Z1bmN0aW9uKiBpbml0aWFsaXplRnVu
Y3Rpb24oKTsKKyAgICB2b2lkIHNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiwgSlNDOjpK
U0Z1bmN0aW9uJik7CisKK3ByaXZhdGU6CisgICAgSlNDOjpXcml0ZUJhcnJpZXI8SlNDOjpKU0Z1
bmN0aW9uPiBtX2luaXRpYWxpemVGdW5jdGlvbjsKK307CisKK0RPTVdpbmRvdyYgY2FsbGVyRE9N
V2luZG93KEpTQzo6RXhlY1N0YXRlKik7CitET01XaW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhKU0M6
OkV4ZWNTdGF0ZSopOworRE9NV2luZG93JiBmaXJzdERPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSop
OworCitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRH
ZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnREZXBy
ZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKKwordm9pZCB0aHJvd0F0dHJpYnV0ZVR5
cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVj
dGVkVHlwZSk7CitXRUJDT1JFX0VYUE9SVCBib29sIHRocm93U2V0dGVyVHlwZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CisKK3ZvaWQgdGhyb3dBcnJheUVsZW1lbnRUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dEYXRh
Q2xvbmVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJv
d0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7IC8vIE5v
dCB0aGUgc2FtZSBhcyBhIEphdmFTY3JpcHQgc3ludGF4IGVycm9yLgordm9pZCB0aHJvd0luZGV4
U2l6ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93
SW52YWxpZFN0YXRlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25z
dCBjaGFyKiBtZXNzYWdlKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgdGhyb3dOb25GaW5pdGVUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dOb3RT
dXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0
aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
Y29uc3QgY2hhciogbWVzc2FnZSk7Cit2b2lkIHRocm93U2VjdXJpdHlFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CitXRUJDT1JF
X0VYUE9SVCB2b2lkIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dUeXBlTWlzbWF0Y2hFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYpOworCitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1Zh
bHVlIHRocm93QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5h
bWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFZhbHVlcyk7CitKU0M6OkVuY29kZWRKU1ZhbHVl
IHRocm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnRO
YW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1l
bnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBh
cmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0
aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBl
eHBlY3RlZFR5cGUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1Jl
cXVpcmVkTWVtYmVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
Y29uc3QgY2hhciogbWVtYmVyTmFtZSwgY29uc3QgY2hhciogZGljdGlvbmFyeU5hbWUsIGNvbnN0
IGNoYXIqIGV4cGVjdGVkVHlwZSk7CitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93Q29uc3RydWN0
b3JTY3JpcHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUpOworCitTdHJpbmcg
bWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29u
c3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitTdHJpbmcgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdl
KGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwor
CitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93R2V0dGVyVHlwZUVycm9y
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkVu
Y29kZWRKU1ZhbHVlIHRocm93VGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSk7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlz
ZVdpdGhHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZh
Y2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6
RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKERlZmVycmVkUHJv
bWlzZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5h
bWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0
aFRoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1l
LCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKTsKKworV0VCQ09SRV9FWFBPUlQgSlNDOjpTdHJ1
Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYsIGNvbnN0IEpT
Qzo6Q2xhc3NJbmZvKik7CitXRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogY2FjaGVET01T
dHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlN0cnVjdHVyZSosIGNvbnN0IEpTQzo6
Q2xhc3NJbmZvKik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpTdHJ1
Y3R1cmUqIGdldERPTVN0cnVjdHVyZShKU0M6OlZNJiwgSlNET01HbG9iYWxPYmplY3QmKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpTdHJ1Y3R1cmUqIGRlcHJlY2F0ZWRH
ZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFdyYXBw
ZXJDbGFzcz4gSlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90eXBlKEpTQzo6Vk0mLCBKU0M6OkpT
R2xvYmFsT2JqZWN0Kik7CisKK3ZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rp
b24mKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBj
cmVhdGVKU0J1aWx0aW4oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxp
emVGdW5jdGlvbiwgSlNET01HbG9iYWxPYmplY3QmKTsKKworSlNDOjpXZWFrSGFuZGxlT3duZXIq
IHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKik7Cit2b2lk
KiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIqKTsKKworSlNET01PYmplY3QqIGdldElubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCopOworSlNET01PYmplY3QqIGdl
dElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgU2NyaXB0V3JhcHBhYmxlKik7
CitKU0M6OkpTQXJyYXlCdWZmZXIqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiwgSlNDOjpBcnJheUJ1ZmZlciopOworCitib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIo
RE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0KiwgSlNDOjpXZWFrSGFuZGxlT3du
ZXIqKTsKK2Jvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBTY3Jp
cHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIq
IHdyYXBwZXJPd25lcik7Citib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldv
cmxkJiwgSlNDOjpBcnJheUJ1ZmZlciosIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlciwgSlND
OjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcik7CisKK2Jvb2wgY2xlYXJJbmxpbmVDYWNo
ZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCopOworYm9vbCBj
bGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgU2NyaXB0V3JhcHBhYmxl
KiwgSlNET01PYmplY3QqIHdyYXBwZXIpOworYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIo
RE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciosIEpTQzo6SlNBcnJheUJ1ZmZlciog
d3JhcHBlcik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBKU0M6OkpTT2JqZWN0KiBn
ZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNzJik7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIo
RE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgUmVmPERPTUNsYXNzPiYgb2JqZWN0KSB7IHJldHVybiBn
ZXRDYWNoZWRXcmFwcGVyKHdvcmxkLCBvYmplY3QuZ2V0KCkpOyB9Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiB2b2lkIGNhY2hlV3JhcHBlcihET01X
cmFwcGVyV29ybGQmLCBET01DbGFzcyosIFdyYXBwZXJDbGFzcyopOwordGVtcGxhdGU8dHlwZW5h
bWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gdm9pZCB1bmNhY2hlV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmLCBET01DbGFzcyosIFdyYXBwZXJDbGFzcyopOwordGVtcGxhdGU8dHlw
ZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2Jh
bE9iamVjdCosIFJlZjxUPiYmKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3Nh
bWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJh
aXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGU7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBE
T01DbGFzcywgdHlwZW5hbWUgVD4gYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0
KiwgUmVmPFQ+JiYpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8RE9N
Q2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERP
TUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGU7CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNs
YXNzPiBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
KiwgRE9NQ2xhc3MmKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gSlNDbGFzcyYgY2Fz
dFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYpOworCit2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNv
bnN0IEF0b21pY1N0cmluZyYpOworCitjb25zdCBKU0M6Okhhc2hUYWJsZSYgZ2V0SGFzaFRhYmxl
Rm9yR2xvYmFsRGF0YShKU0M6OlZNJiwgY29uc3QgSlNDOjpIYXNoVGFibGUmIHN0YXRpY1RhYmxl
KTsKKworU3RyaW5nIHJldHJpZXZlRXJyb3JNZXNzYWdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIEpTQzo6Q2F0Y2hTY29wZSYpOworV0VCQ09SRV9F
WFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUg
ZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0cik7CitXRUJDT1JFX0VYUE9SVCB2b2lk
IHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RXhjZXB0aW9uKiwgQ2FjaGVk
U2NyaXB0KiA9IG51bGxwdHIsIEV4Y2VwdGlvbkRldGFpbHMqID0gbnVsbHB0cik7Cit2b2lkIHJl
cG9ydEN1cnJlbnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqKTsKKworSlNDOjpKU1ZhbHVlIGNy
ZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2VwdGlvbiYmKTsKK0pTQzo6SlNW
YWx1ZSBjcmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBFeGNlcHRpb25Db2RlLCBj
b25zdCBTdHJpbmcmKTsKKworLy8gQ29udmVydCBhIERPTSBpbXBsZW1lbnRhdGlvbiBleGNlcHRp
b24gaW50byBhIEphdmFTY3JpcHQgZXhjZXB0aW9uIGluIHRoZSBleGVjdXRpb24gc3RhdGUuCit2
b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYs
IEV4Y2VwdGlvbiYmKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uU2xv
d1BhdGgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb24mJik7CisK
K0pTQzo6SlNWYWx1ZSBqc1N0cmluZyhKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFVSTCYpOyAvLyBl
bXB0eSBpZiB0aGUgVVJMIGlzIG51bGwKKworSlNDOjpKU1ZhbHVlIGpzU3RyaW5nT3JVbmRlZmlu
ZWQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsgLy8gdW5kZWZpbmVkIGlmIHRoZSBz
dHJpbmcgaXMgbnVsbAorSlNDOjpKU1ZhbHVlIGpzU3RyaW5nT3JVbmRlZmluZWQoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBVUkwmKTsgLy8gdW5kZWZpbmVkIGlmIHRoZSBVUkwgaXMgbnVsbAorCisv
LyBTZWUgSmF2YVNjcmlwdENvcmUgZm9yIGV4cGxhbmF0aW9uOiBTaG91bGQgYmUgdXNlZCBmb3Ig
YW55IHN0cmluZyB0aGF0IGlzIGFscmVhZHkgb3duZWQgYnkgYW5vdGhlcgorLy8gb2JqZWN0LCB0
byBsZXQgdGhlIGVuZ2luZSBrbm93IHRoYXQgY29sbGVjdGluZyB0aGUgSlNTdHJpbmcgd3JhcHBl
ciBpcyB1bmxpa2VseSB0byBzYXZlIG1lbW9yeS4KK0pTQzo6SlNWYWx1ZSBqc093bmVkU3RyaW5n
T3JOdWxsKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CisKK1N0cmluZyBwcm9wZXJ0
eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7CisKK0F0b21pY1N0cmluZyBwcm9wZXJ0
eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7CisKK1dFQkNPUkVfRVhQT1JU
IFN0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlND
OjpJZGVudGlmaWVyJik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdmFsdWVUb0J5dGVTdHJpbmco
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlk
ZW50aWZpZXJUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOworCitpbnQzMl90IGZpbml0ZUludDMyVmFsdWUoSlNDOjpKU1Zh
bHVlLCBKU0M6OkV4ZWNTdGF0ZSosIGJvb2wmIG9rYXkpOworCisvLyBUaGUgZm9sbG93aW5nIGZ1
bmN0aW9ucyBjb252ZXJ0IHZhbHVlcyB0byBpbnRlZ2VycyBhcyBwZXIgdGhlIFdlYklETCBzcGVj
aWZpY2F0aW9uLgorLy8gVGhlIGNvbnZlcnNpb24gZmFpbHMgaWYgdGhlIHZhbHVlIGNhbm5vdCBi
ZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgb3IsIGlmIEVuZm9yY2VSYW5nZSBpcyBzcGVjaWZpZWQs
CisvLyB0aGUgdmFsdWUgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIGRlc3RpbmF0aW9uIGlu
dGVnZXIgdHlwZS4KKworV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50OEVuZm9yY2VSYW5nZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50OF90IHRv
VUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09S
RV9FWFBPUlQgaW50MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2RW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDMyX3Qg
dG9JbnQzMkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJD
T1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFu
Z2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDY0
X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
CitXRUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4Q2xhbXAoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2Q2xh
bXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDE2
X3QgdG9VSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JF
X0VYUE9SVCBpbnQzMl90IHRvSW50MzJDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MzJfdCB0b1VJbnQzMkNsYW1wKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NENsYW1wKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IHRv
VUludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCitXRUJDT1JFX0VY
UE9SVCBpbnQ4X3QgdG9JbnQ4KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNP
UkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
CitXRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTYoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTYoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IHRvVUludDY0
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworSlNDOjpKU1ZhbHVlIGpzRGF0ZShK
U0M6OkV4ZWNTdGF0ZSosIGRvdWJsZSB2YWx1ZSk7CisKKy8vIE5hTiBpZiB0aGUgdmFsdWUgY2Fu
J3QgYmUgY29udmVydGVkIHRvIGEgZGF0ZS4KK2RvdWJsZSB2YWx1ZVRvRGF0ZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSk7CisKKy8vIFZhbGlkYXRlcyB0aGF0IHRoZSBwYXNzZWQgb2Jq
ZWN0IGlzIGEgc2VxdWVuY2UgdHlwZSBwZXIgc2VjdGlvbiA0LjEuMTMgb2YgdGhlIFdlYklETCBz
cGVjLgorSlNDOjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlLCB1bnNpZ25lZCYgbGVuZ3RoKTsKKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXImKTsKK0pTQzo6SlNW
YWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QXJy
YXlCdWZmZXJWaWV3Jik7CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciopOworSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcq
KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVm
UHRyPFQ+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFZlY3RvcjxUPiYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCosIGNvbnN0IFZlY3RvcjxSZWZQdHI8VD4+Jik7CitKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgSlNDOjpQcml2YXRl
TmFtZSYpOworCitKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiwgSlNE
T01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlND
OjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0
JiwgY29uc3QgVCYpOworSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvckVuZChKU0M6OkV4ZWNTdGF0
ZSYpOworCitSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvUG9zc2libHlTaGFyZWRBcnJh
eUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQ4QXJy
YXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitS
ZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MTZBcnJheShKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvUG9zc2libHlTaGFy
ZWRJbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDhB
cnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
CitSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4Q2xh
bXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDE2QXJy
YXk+IHRvUG9zc2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsK
K1JlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDMyQXJyYXkoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvUG9zc2li
bHlTaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlND
OjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYsIEpT
Qzo6SlNWYWx1ZSk7CisKK1JlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9VbnNoYXJlZEFy
cmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDhB
cnJheT4gdG9VbnNoYXJlZEludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0
cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpT
VmFsdWUpOworUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9VbnNoYXJlZEludDMyQXJyYXkoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Vuc2hhcmVk
VWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQ4Q2xh
bXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNoYXJlZFVpbnQxNkFycmF5KEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvVW5zaGFy
ZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkZsb2F0
MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsK
K1JlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSlNUeXBl
PiBWZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOworCitlbnVtIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHsg
RG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yLCBMb2dTZWN1cml0eUVycm9yLCBUaHJvd1NlY3VyaXR5
RXJyb3IgfTsKK25hbWVzcGFjZSBCaW5kaW5nU2VjdXJpdHkgeworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgVCYpOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0
YXRlJiwgVCopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEV4Y2VwdGlvbk9yPFQqPiBjaGVj
a1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2VwdGlvbk9yPFQqPiYmKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNlcHRpb25PcjxUKj4gY2hlY2tTZWN1cml0eUZvck5v
ZGUoSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb25PcjxUJj4mJik7CisgICAgYm9vbCBzaG91bGRB
bGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKiwgRE9NV2luZG93JiwgU2VjdXJp
dHlSZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1cml0eUVycm9yKTsKKyAgICBib29sIHNob3VsZEFs
bG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUmLCBET01XaW5kb3cmLCBTdHJpbmcm
IG1lc3NhZ2UpOworICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6RXhlY1N0
YXRlKiwgRnJhbWUqLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9IExvZ1NlY3VyaXR5RXJyb3Ip
OworICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRlJiwgRnJh
bWUmLCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUo
SlNDOjpFeGVjU3RhdGUmLCBOb2RlKik7Cit9OworCit2b2lkIHByaW50RXJyb3JNZXNzYWdlRm9y
RnJhbWUoRnJhbWUqLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCitTdHJpbmcgcHJvcGVydHlO
YW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOworQXRvbWljU3RyaW5nIHByb3BlcnR5TmFt
ZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKKwordGVtcGxhdGU8SlNDOjpOYXRp
dmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBub25DYWNoaW5nU3Rh
dGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkVuY29kZWRKU1ZhbHVlLCBK
U0M6OlByb3BlcnR5TmFtZSk7CisKKworZW51bSBjbGFzcyBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
ciB7IFRocm93LCBSZXR1cm5FYXJseSwgUmVqZWN0UHJvbWlzZSwgQXNzZXJ0IH07CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEpTQ2xhc3M+CitzdHJ1Y3QgQmluZGluZ0NhbGxlciB7CisgICAgdXNpbmcg
QXR0cmlidXRlU2V0dGVyRnVuY3Rpb24gPSBib29sKEpTQzo6RXhlY1N0YXRlJiwgSlNDbGFzcyYs
IEpTQzo6SlNWYWx1ZSwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNpbmcgQXR0cmlidXRlR2V0
dGVyRnVuY3Rpb24gPSBKU0M6OkpTVmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlND
OjpUaHJvd1Njb3BlJik7CisgICAgdXNpbmcgT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6
OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDbGFzcyosIEpTQzo6VGhyb3dTY29w
ZSYpOworICAgIHVzaW5nIFByb21pc2VPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5j
b2RlZEpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwgUmVmPERlZmVycmVkUHJvbWlz
ZT4mJiwgSlNDOjpUaHJvd1Njb3BlJik7CisKKyAgICBzdGF0aWMgSlNDbGFzcyogY2FzdEZvckF0
dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6RW5jb2RlZEpTVmFsdWUpOworICAgIHN0YXRp
YyBKU0NsYXNzKiBjYXN0Rm9yT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlJik7CisKKyAgICB0ZW1w
bGF0ZTxQcm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gb3BlcmF0aW9uQ2FsbGVyLCBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
OjpSZWplY3RQcm9taXNlPgorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxQcm9t
aXNlT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4m
JiBwcm9taXNlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKHN0YXRlKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yT3BlcmF0
aW9uKCpzdGF0ZSk7CisgICAgICAgIGlmIChzaG91bGRUaHJvdyAhPSBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6QXNzZXJ0ICYmIFVOTElLRUxZKCF0aGlzT2JqZWN0KSkKKyAgICAgICAgICAgIHJl
dHVybiByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IocHJvbWlzZS5nZXQoKSwgSlNDbGFz
czo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOworICAgICAgICBBU1NFUlQodGhp
c09iamVjdCk7CisgICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
SlNDbGFzczo6aW5mbygpKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0
aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5k
IHRoaXNPYmplY3QuCisgICAgICAgIHJldHVybiBvcGVyYXRpb25DYWxsZXIoc3RhdGUsIHRoaXNP
YmplY3QsIFdURk1vdmUocHJvbWlzZSksIHRocm93U2NvcGUpOworICAgIH0KKworICAgIHRlbXBs
YXRlPE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNhbGxlciwgQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+
CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbE9wZXJhdGlvbihKU0M6OkV4ZWNT
dGF0ZSogc3RhdGUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpCisgICAgeworICAgICAgICBB
U1NFUlQoc3RhdGUpOworICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JPcGVy
YXRpb24oKnN0YXRlKTsKKyAgICAgICAgaWYgKHNob3VsZFRocm93ICE9IENhc3RlZFRoaXNFcnJv
ckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5MSUtFTFkoIXRoaXNPYmplY3QpKSB7CisgICAgICAgICAg
ICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93KQorICAg
ICAgICAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9uTmFtZSk7CisgICAgICAgICAg
ICAvLyBGb3IgY3VzdG9tIHByb21pc2UtcmV0dXJuaW5nIG9wZXJhdGlvbnMKKyAgICAgICAgICAg
IHJldHVybiByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoKnN0YXRlLCBKU0NsYXNzOjpp
bmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9uTmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgQVNT
RVJUKHRoaXNPYmplY3QpOworICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIEpTQ2xhc3M6OmluZm8oKSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVm
YWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgdG8gdXNlIHJlZmVyZW5jZXMgZm9yIHN0
YXRlIGFuZCB0aGlzT2JqZWN0LgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uQ2FsbGVyKHN0YXRl
LCB0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxBdHRyaWJ1
dGVTZXR0ZXJGdW5jdGlvbiBzZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRo
cm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgorICAgIHN0YXRpYyBib29sIHNl
dEF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhp
c1ZhbHVlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgY29uc3QgY2hhciogYXR0
cmlidXRlTmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8g
dGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBh
dXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7Cisg
ICAgICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gKHNo
b3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykgPyB0aHJvd1NldHRl
clR5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1l
LCBhdHRyaWJ1dGVOYW1lKSA6IGZhbHNlOworICAgICAgICByZXR1cm4gc2V0dGVyKCpzdGF0ZSwg
KnRoaXNPYmplY3QsIEpTQzo6SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHRocm93U2Nv
cGUpOworICAgIH0KKworICAgIHRlbXBsYXRlPEF0dHJpYnV0ZUdldHRlckZ1bmN0aW9uIGdldHRl
ciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6VGhyb3c+CisgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgYXR0cmlidXRl
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIGNv
bnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhdGUpOwor
ICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgp
KTsKKyAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JBdHRyaWJ1dGUoKnN0YXRlLCB0
aGlzVmFsdWUpOworICAgICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3QpKSB7CisgICAgICAg
ICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93KQor
ICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsIHRocm93
U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAg
ICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmVqZWN0
UHJvbWlzZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJU
eXBlRXJyb3IoKnN0YXRlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFt
ZSk7CisgICAgICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpqc1VuZGVm
aW5lZCgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUo
Z2V0dGVyKCpzdGF0ZSwgKnRoaXNPYmplY3QsIHRocm93U2NvcGUpKTsKKyAgICB9Cit9OworCisv
LyBFeGNlcHRpb25PciBoYW5kbGluZy4KK3ZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8dm9pZD4mJik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xv
YmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VD4mJik7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0
ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uT3I8VD4m
JiB2YWx1ZSk7CisKKy8vIElubGluZSBmdW5jdGlvbnMgYW5kIHRlbXBsYXRlIGRlZmluaXRpb25z
LgorCitpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpjcmVhdGVT
dHJ1Y3R1cmUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gSlNDOjpTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIEpTQzo6VHlwZUluZm8oSlNDOjpPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK2lubGluZSBET01Db25zdHJ1
Y3Rvck9iamVjdDo6RE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKKyAgICA6IEpTRE9NT2JqZWN0KHN0
cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQoreworfQorCitpbmxpbmUgU3RyaW5nIERPTUNvbnN0cnVj
dG9yT2JqZWN0OjpjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKQoreworICAgIHJldHVybiBBU0NJ
SUxpdGVyYWwoIkZ1bmN0aW9uIik7Cit9CisKK2lubGluZSBET01Db25zdHJ1Y3RvckpTQnVpbHRp
bk9iamVjdDo6RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QoSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0
cnVjdG9yT2JqZWN0KHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KQoreworfQorCitpbmxpbmUgSlND
OjpKU0Z1bmN0aW9uKiBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6aW5pdGlhbGl6ZUZ1
bmN0aW9uKCkKK3sKKyAgICByZXR1cm4gbV9pbml0aWFsaXplRnVuY3Rpb24uZ2V0KCk7Cit9CisK
K2lubGluZSB2b2lkIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0OjpzZXRJbml0aWFsaXpl
RnVuY3Rpb24oSlNDOjpWTSYgdm0sIEpTQzo6SlNGdW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAg
bV9pbml0aWFsaXplRnVuY3Rpb24uc2V0KHZtLCB0aGlzLCAmZnVuY3Rpb24pOworfQorCitpbmxp
bmUgSlNET01HbG9iYWxPYmplY3QqIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgLy8gRklYTUU6IENhbGxlcnMgdG8gdGhpcyBm
dW5jdGlvbiBzaG91bGQgYmUgdXNpbmcgdGhlIGdsb2JhbCBvYmplY3QKKyAgICAvLyBmcm9tIHdo
aWNoIHRoZSBvYmplY3QgaXMgYmVpbmcgY3JlYXRlZCwgaW5zdGVhZCBvZiBhc3N1bWluZyB0aGUg
bGV4aWNhbCBvbmUuCisgICAgLy8gZS5nLiBzdWJmcmFtZS5kb2N1bWVudC5ib2R5IHNob3VsZCB1
c2UgdGhlIHN1YmZyYW1lJ3MgZ2xvYmFsIG9iamVjdCwgbm90IHRoZSBsZXhpY2FsIG9uZS4KKyAg
ICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGlu
ZSBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0KQoreworICAgIGlmIChKU0M6OlN0cnVjdHVyZSogc3RydWN0
dXJlID0gZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpp
bmZvKCkpKQorICAgICAgICByZXR1cm4gc3RydWN0dXJlOworICAgIHJldHVybiBjYWNoZURPTVN0
cnVjdHVyZShnbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFzczo6Y3JlYXRlU3RydWN0dXJlKHZtLCAm
Z2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVByb3RvdHlwZSh2bSwgJmdsb2JhbE9i
amVjdCkpLCBXcmFwcGVyQ2xhc3M6OmluZm8oKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFdy
YXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3RydWN0dXJlKiBkZXByZWNhdGVkR2V0RE9NU3RydWN0
dXJlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9u
IGlzIHdyb25nLiBJdCB1c2VzIHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0IGZvciBjcmVhdGluZyB0
aGUgcHJvdG90eXBlIHN0cnVjdHVyZS4KKyAgICByZXR1cm4gZ2V0RE9NU3RydWN0dXJlPFdyYXBw
ZXJDbGFzcz4oZXhlYy0+dm0oKSwgKmRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUo
ZXhlYykpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6
OkpTT2JqZWN0KiBnZXRET01Qcm90b3R5cGUoSlNDOjpWTSYgdm0sIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKK3sKKyAgICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlNDOjpKU09iamVj
dCo+KGFzT2JqZWN0KGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KHZtLCAqSlNDOjpqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKS0+c3RvcmVkUHJvdG90eXBlKCkp
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUgY3JlYXRlSlNCdWlsdGluKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU0Z1bmN0
aW9uJiBpbml0aWFsaXplRnVuY3Rpb24sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qp
Cit7CisgICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDbGFzczo6Y3JlYXRlKGdldERPTVN0
cnVjdHVyZTxKU0NsYXNzPihnbG9iYWxPYmplY3Qudm0oKSwgZ2xvYmFsT2JqZWN0KSwgJmdsb2Jh
bE9iamVjdCk7CisgICAgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoc3RhdGUsICpv
YmplY3QsIGluaXRpYWxpemVGdW5jdGlvbik7CisgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5j
b2RlKG9iamVjdCk7Cit9CisKK2lubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93
bmVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqKQoreworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIqPih3b3JsZC52bSgp
Lm1fdHlwZWRBcnJheUNvbnRyb2xsZXIuZ2V0KCkpLT53cmFwcGVyT3duZXIoKTsKK30KKworaW5s
aW5lIHZvaWQqIHdyYXBwZXJLZXkoSlNDOjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0KQoreworICAg
IHJldHVybiBkb21PYmplY3Q7Cit9CisKK2lubGluZSBKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKikgeyByZXR1cm4gbnVsbHB0cjsgfQor
aW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lk
KiwgSlNET01PYmplY3QqLCBKU0M6OldlYWtIYW5kbGVPd25lciopIHsgcmV0dXJuIGZhbHNlOyB9
CitpbmxpbmUgYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwg
dm9pZCosIEpTRE9NT2JqZWN0KikgeyByZXR1cm4gZmFsc2U7IH0KKworaW5saW5lIEpTRE9NT2Jq
ZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNjcmlw
dFdyYXBwYWJsZSogZG9tT2JqZWN0KQoreworICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGRvbU9iamVjdC0+d3JhcHBlcigpOwor
fQorCitpbmxpbmUgSlNDOjpKU0FycmF5QnVmZmVyKiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERP
TVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBp
ZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biBidWZmZXItPm1fd3JhcHBlci5nZXQoKTsKK30KKworaW5saW5lIGJvb2wgc2V0SW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9i
amVjdCwgSlNET01PYmplY3QqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVy
T3duZXIpCit7CisgICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZG9tT2JqZWN0LT5zZXRXcmFwcGVyKHdyYXBwZXIsIHdyYXBwZXJPd25lciwgJndv
cmxkKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgc2V0SW5saW5lQ2FjaGVk
V3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmpl
Y3QsIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlciwgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdy
YXBwZXJPd25lcikKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBkb21PYmplY3QtPm1fd3JhcHBlciA9IEpTQzo6V2VhazxKU0M6OkpTQXJy
YXlCdWZmZXI+KHdyYXBwZXIsIHdyYXBwZXJPd25lciwgJndvcmxkKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJX
b3JsZCYgd29ybGQsIFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTU9iamVjdCogd3Jh
cHBlcikKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBkb21PYmplY3QtPmNsZWFyV3JhcHBlcih3cmFwcGVyKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJX
b3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVm
ZmVyKiB3cmFwcGVyKQoreworICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHdlYWtDbGVhcihkb21PYmplY3QtPm1fd3JhcHBlciwgd3JhcHBlcik7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxp
bmUgSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxk
LCBET01DbGFzcyYgZG9tT2JqZWN0KQoreworICAgIGlmIChhdXRvKiB3cmFwcGVyID0gZ2V0SW5s
aW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgJmRvbU9iamVjdCkpCisgICAgICAgIHJldHVybiB3cmFw
cGVyOworICAgIHJldHVybiB3b3JsZC5tX3dyYXBwZXJzLmdldCh3cmFwcGVyS2V5KCZkb21PYmpl
Y3QpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJD
bGFzcz4gaW5saW5lIHZvaWQgY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERP
TUNsYXNzKiBkb21PYmplY3QsIFdyYXBwZXJDbGFzcyogd3JhcHBlcikKK3sKKyAgICBKU0M6Oldl
YWtIYW5kbGVPd25lciogb3duZXIgPSB3cmFwcGVyT3duZXIod29ybGQsIGRvbU9iamVjdCk7Cisg
ICAgaWYgKHNldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsIGRvbU9iamVjdCwgd3JhcHBlciwg
b3duZXIpKQorICAgICAgICByZXR1cm47CisgICAgd2Vha0FkZCh3b3JsZC5tX3dyYXBwZXJzLCB3
cmFwcGVyS2V5KGRvbU9iamVjdCksIEpTQzo6V2VhazxKU0M6OkpTT2JqZWN0Pih3cmFwcGVyLCBv
d25lciwgJndvcmxkKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFt
ZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYgd29ybGQsIERPTUNsYXNzKiBkb21PYmplY3QsIFdyYXBwZXJDbGFzcyogd3JhcHBlcikKK3sK
KyAgICBpZiAoY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBw
ZXIpKQorICAgICAgICByZXR1cm47CisgICAgd2Vha1JlbW92ZSh3b3JsZC5tX3dyYXBwZXJzLCB3
cmFwcGVyS2V5KGRvbU9iamVjdCksIHdyYXBwZXIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBE
T01DbGFzcywgdHlwZW5hbWUgVD4gaW5saW5lIGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VD4mJiBkb21PYmplY3QpIC0+IHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlw
ZQoreworICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZl
cnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzczsKKworICAgIEFTU0VSVCghZ2V0Q2Fj
aGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIGRvbU9iamVjdCkpOworICAgIGF1dG8q
IGRvbU9iamVjdFB0ciA9IGRvbU9iamVjdC5wdHIoKTsKKyAgICBhdXRvKiB3cmFwcGVyID0gV3Jh
cHBlckNsYXNzOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPFdyYXBwZXJDbGFzcz4oZ2xvYmFsT2Jq
ZWN0LT52bSgpLCAqZ2xvYmFsT2JqZWN0KSwgZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGRvbU9iamVj
dCkpOworICAgIGNhY2hlV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIGRvbU9iamVjdFB0
ciwgd3JhcHBlcik7CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IERPTUNsYXNzLCB0eXBlbmFtZSBUPiBpbmxpbmUgYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIGRvbU9iamVjdCkgLT4gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFt
ZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6
dHlwZQoreworICAgIHJldHVybiBjcmVhdGVXcmFwcGVyPERPTUNsYXNzPihnbG9iYWxPYmplY3Qs
IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxET01DbGFzcz4oV1RGTW92ZShkb21PYmplY3QpKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHdyYXAo
SlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBE
T01DbGFzcyYgZG9tT2JqZWN0KQoreworICAgIGlmIChhdXRvKiB3cmFwcGVyID0gZ2V0Q2FjaGVk
V3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIGRvbU9iamVjdCkpCisgICAgICAgIHJldHVy
biB3cmFwcGVyOworICAgIHJldHVybiB0b0pTTmV3bHlDcmVhdGVkKHN0YXRlLCBnbG9iYWxPYmpl
Y3QsIFJlZjxET01DbGFzcz4oZG9tT2JqZWN0KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpT
Q2xhc3M+IGlubGluZSBKU0NsYXNzJiBjYXN0VGhpc1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSkKK3sKKyAgICBhdXRvIHRoaXNWYWx1ZSA9IHN0YXRlLnRoaXNWYWx1ZSgpOworICAgIGF1dG8g
Y2FzdGVkVGhpcyA9IGpzRHluYW1pY0Rvd25jYXN0PEpTQ2xhc3MqPihzdGF0ZS52bSgpLCB0aGlz
VmFsdWUpOworICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKKyAgICByZXR1cm4gKmNhc3RlZFRoaXM7
Cit9CisKK2lubGluZSBpbnQzMl90IGZpbml0ZUludDMyVmFsdWUoSlNDOjpKU1ZhbHVlIHZhbHVl
LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgYm9vbCYgb2theSkKK3sKKyAgICBkb3VibGUgbnVtYmVy
ID0gdmFsdWUudG9OdW1iZXIoZXhlYyk7CisgICAgb2theSA9IHN0ZDo6aXNmaW5pdGUobnVtYmVy
KTsKKyAgICByZXR1cm4gSlNDOjp0b0ludDMyKG51bWJlcik7Cit9CisKKy8vIFZhbGlkYXRlcyB0
aGF0IHRoZSBwYXNzZWQgb2JqZWN0IGlzIGEgc2VxdWVuY2UgdHlwZSBwZXIgc2VjdGlvbiA0LjEu
MTMgb2YgdGhlIFdlYklETCBzcGVjLgoraW5saW5lIEpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5j
ZShKU0M6OkV4ZWNTdGF0ZSYgZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCYgbGVu
Z3RoKQoreworICAgIEpTQzo6Vk0mIHZtID0gZXhlYy52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IHZh
bHVlLmdldE9iamVjdCgpOworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIHRocm93U2VxdWVu
Y2VUeXBlRXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisKKyAgICBKU0M6OkpTVmFsdWUgbGVuZ3RoVmFsdWUgPSBvYmplY3QtPmdldCgmZXhlYywgZXhl
Yy5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBudWxscHRyKTsKKworICAgIGlmIChsZW5ndGhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7
CisgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoZXhlYywgc2NvcGUpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBsZW5ndGggPSBsZW5ndGhWYWx1ZS50b1VJbnQz
MigmZXhlYyk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisKKyAg
ICByZXR1cm4gb2JqZWN0OworfQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5
QnVmZmVyJiBidWZmZXIpCit7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gZ2V0Q2FjaGVkV3JhcHBl
cihnbG9iYWxPYmplY3QtPndvcmxkKCksIGJ1ZmZlcikpCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisKKyAgICAvLyBUaGUgSlNBcnJheUJ1ZmZlcjo6Y3JlYXRlIGZ1bmN0aW9uIHdpbGwgcmVnaXN0
ZXIgdGhlIHdyYXBwZXIgaW4gZmluaXNoQ3JlYXRpb24uCisgICAgcmV0dXJuIEpTQzo6SlNBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKHN0YXRlLT52bSgpLCBnbG9iYWxPYmplY3QtPmFycmF5QnVmZmVyU3Ry
dWN0dXJlKGJ1ZmZlci5zaGFyaW5nTW9kZSgpKSwgJmJ1ZmZlcik7Cit9CisKK2lubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlclZpZXcmIHZpZXcpCit7CisgICAgcmV0dXJu
IHZpZXcud3JhcChzdGF0ZSwgZ2xvYmFsT2JqZWN0KTsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1
ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNDOjpBcnJheUJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyKQorICAg
ICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKKyAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCAqYnVmZmVyKTsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFy
cmF5QnVmZmVyVmlldyogdmlldykKK3sKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBK
U0M6OmpzTnVsbCgpOworICAgIHJldHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICp2aWV3
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8
VD4mJiBwdHIpCit7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBwdHIuZ2V0
KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJl
ZlB0cjxUPiYmIHB0cikKK3sKKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0
ci5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgY29uc3QgVmVjdG9yPFQ+JiB2ZWN0b3IpCit7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgSlNDOjpKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVs
bHB0ciwgdmVjdG9yLnNpemUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlND
OjpKU1ZhbHVlKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgdmVjdG9yW2ldKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIGFycmF5OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8VD4+JiB2ZWN0b3IpCit7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlND
OjpKU0FycmF5KiBhcnJheSA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgdmVj
dG9yLnNpemUoKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVl
KCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmVjdG9yLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCBpLCB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgdmVjdG9yW2ldLmdldCgpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIEpTQzo6SlNWYWx1ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIGFycmF5OworfQorCitpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgSlNDOjpQcml2YXRlTmFtZSYgcHJpdmF0ZU5hbWUpCit7CisgICAgcmV0dXJu
IEpTQzo6U3ltYm9sOjpjcmVhdGUoZXhlYy0+dm0oKSwgcHJpdmF0ZU5hbWUudWlkKCkpOworfQor
CitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiBj
cmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIHZhbHVlLCBmYWxzZSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3Qg
VCYgdmFsdWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0
ZSwgdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3QsIHZhbHVlKSwgZmFsc2UpOworfQorCitpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvckVuZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCit7
CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwgSlNDOjpqc1Vu
ZGVmaW5lZCgpLCB0cnVlKTsKK30KKworaW5saW5lIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmll
dz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQoreworICAgIGF1dG8qIHdyYXBwZXIgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0M6
OkpTQXJyYXlCdWZmZXJWaWV3Kj4odm0sIHZhbHVlKTsKKyAgICBpZiAoIXdyYXBwZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiB3cmFwcGVyLT5wb3NzaWJseVNoYXJlZElt
cGwoKTsKK30KKworaW5saW5lIFJlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmlldz4gdG9VbnNoYXJl
ZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAg
IGF1dG8gcmVzdWx0ID0gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyh2bSwgdmFsdWUp
OworICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC0+aXNTaGFyZWQoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIFJlZlB0cjxKU0M6Oklu
dDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpJbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkludDE2
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxK
U0M6OkludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkludDMy
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxK
U0M6OkludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxK
U0M6OlVpbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4
Q2xhbXBlZEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYg
dm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0
aXZlVHlwZWRWaWV3PEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5s
aW5lIFJlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDE2QXJyYXko
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5
U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQor
aW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDMyQXJy
YXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3Np
Ymx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsg
fQoraW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0
MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRv
UG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0sIHZh
bHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9Qb3NzaWJseVNoYXJl
ZEZsb2F0NjRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4o
dm0sIHZhbHVlKTsgfQorCitpbmxpbmUgUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVk
SW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6
dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9
CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9VbnNoYXJlZEludDE2QXJyYXkoSlND
OjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0
aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVm
UHRyPEpTQzo6SW50MzJBcnJheT4gdG9VbnNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3
PEpTQzo6SW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWlu
dDhBcnJheT4gdG9VbnNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhB
ZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJy
YXk+IHRvVW5zaGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50
OENsYW1wZWRBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2
QXJyYXk+IHRvVW5zaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MTZB
ZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRv
VW5zaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MzJBZGFwdG9yPih2
bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVk
RmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpT
Qzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFs
dWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b1Vuc2hhcmVkRmxvYXQ2
NEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9V
bnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEpTVD4gaW5saW5lIFZlY3RvcjxSZWY8
VD4+IHRvUmVmTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCit7CisgICAgSlNDOjpWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkg
eworICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKHN0YXRlLCBzY29wZSk7CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorCisgICAgVmVjdG9yPFJlZjxUPj4gcmVzdWx0OworICAgIGZv
ckVhY2hJbkl0ZXJhYmxlKCZzdGF0ZSwgdmFsdWUsIFsmcmVzdWx0XShKU0M6OlZNJiB2bSwgSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTVmFsdWUganNWYWx1ZSkgeworICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgaWYgKGpzVmFsdWUu
aW5oZXJpdHModm0sIEpTVDo6aW5mbygpKSkgeworICAgICAgICAgICAgYXV0byogb2JqZWN0ID0g
SlNUOjp0b1dyYXBwZWQodm0sIGpzVmFsdWUpOworICAgICAgICAgICAgQVNTRVJUKG9iamVjdCk7
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCpvYmplY3QpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9yKCpzdGF0ZSwgc2NvcGUpOworICAg
IH0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBTdHJpbmcgcHJvcGVydHlOYW1l
VG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIEFTU0VSVCgh
cHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpOworICAgIHJldHVybiBwcm9wZXJ0eU5hbWUudWlkKCkg
PyBwcm9wZXJ0eU5hbWUudWlkKCkgOiBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpOworfQorCitp
bmxpbmUgQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gQXRvbWljU3RyaW5nKHByb3BlcnR5
TmFtZS51aWQoKSA/IHByb3BlcnR5TmFtZS51aWQoKSA6IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1l
KCkpOworfQorCit0ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uLCBp
bnQgbGVuZ3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdl
dHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29k
ZShKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIGxlbmd0aCwgcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSwgbmF0aXZlRnVuY3Rp
b24pKTsKK30KKworQUxXQVlTX0lOTElORSB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uJiYg
ZXhjZXB0aW9uKQoreworICAgIGlmICh0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm47CisgICAgcHJvcGFnYXRlRXhjZXB0aW9uU2xvd1BhdGgoc3RhdGUsIHRocm93U2NvcGUs
IFdURk1vdmUoZXhjZXB0aW9uKSk7Cit9CisKK2lubGluZSB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhj
ZXB0aW9uT3I8dm9pZD4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhj
ZXB0aW9uKCkpKQorICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUs
IHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0
aW9uT3I8VD4mJiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9u
KCkpKSB7CisgICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFs
dWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAg
cmV0dXJuIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFs
dWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
U05ld2x5Q3JlYXRlZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uT3I8VD4m
JiB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkodmFsdWUuaGFzRXhjZXB0aW9uKCkpKSB7Cisg
ICAgICAgIHByb3BhZ2F0ZUV4Y2VwdGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFz
ZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisgICAgcmV0dXJuIHRv
SlNOZXdseUNyZWF0ZWQoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZS5yZWxlYXNlUmV0dXJu
VmFsdWUoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBCaW5kaW5nU2Vj
dXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVCYgbm9k
ZSkKK3sKKyAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsICZub2RlKSA/
ICZub2RlIDogbnVsbHB0cjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQqIEJp
bmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBUKiBub2RlKQoreworICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShzdGF0ZSwg
bm9kZSkgPyBub2RlIDogbnVsbHB0cjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IEV4Y2VwdGlvbk9yPFQqPiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uT3I8VCo+JiYgdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlLmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gdmFsdWUucmVsZWFzZUV4Y2Vw
dGlvbigpOworICAgIHJldHVybiBjaGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgdmFsdWUucmVs
ZWFzZVJldHVyblZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRXhj
ZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb25PcjxUJj4mJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFs
dWUuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9u
KCk7CisgICAgcmV0dXJuIGNoZWNrU2VjdXJpdHlGb3JOb2RlKHN0YXRlLCB2YWx1ZS5yZWxlYXNl
UmV0dXJuVmFsdWUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZ1NlY3VyaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01CaW5kaW5nU2VjdXJpdHkuaAkocmV2aXNpb24gMjExMzUzKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nU2VjdXJpdHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsNzgxICsyMywzOCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkRP
TVdyYXBwZXJXb3JsZC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJF
eGNlcHRpb25Pci5oIgotI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCi0jaW5jbHVkZSAi
SlNET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiSlNEeW5hbWljRG93bmNhc3QuaCIKLSNpbmNsdWRl
ICJTY3JpcHRXcmFwcGFibGUuaCIKLSNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGVJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCi0jaW5jbHVkZSA8Y3N0
ZGRlZj4KLSNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8aGVhcC9TbG90
VmlzaXRvcklubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KLSNpbmNsdWRlIDxoZWFw
L1dlYWtJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5saW5l
cy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRlIDxydW50aW1lL0l0ZXJh
dG9yT3BlcmF0aW9ucy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1ZUlu
bGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQ2VsbElubGluZXMuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0pTT2JqZWN0SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5
cy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9PYmpl
Y3RDb25zdHJ1Y3Rvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1l
L1R5cGVkQXJyYXlzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9Xcml0ZUJhcnJpZXIuaD4KICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLS8vIEZJWE1FOiBX
ZSBjb3VsZCBtYWtlIHRoaXMgZmlsZSBhIGxvdCBlYXNpZXIgdG8gcmVhZCBieSBwdXR0aW5nIGFs
bCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXQgdGhlIHRvcCwKLS8vIGFuZCBmdW5jdGlvbiBkZWZp
bml0aW9ucyBiZWxvdywgZXZlbiBmb3IgdGVtcGxhdGUgYW5kIGlubGluZSBmdW5jdGlvbnMuCiAK
IG5hbWVzcGFjZSBKU0MgewotY2xhc3MgSlNGdW5jdGlvbjsKK2NsYXNzIEV4ZWNTdGF0ZTsKIH0K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDYWNoZWRTY3JpcHQ7Ci1jbGFzcyBEZWZl
cnJlZFByb21pc2U7CiBjbGFzcyBET01XaW5kb3c7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIFVSTDsK
IGNsYXNzIE5vZGU7CiAKLXN0cnVjdCBFeGNlcHRpb25EZXRhaWxzIHsKLSAgICBTdHJpbmcgbWVz
c2FnZTsKLSAgICBpbnQgbGluZU51bWJlciB7IDAgfTsKLSAgICBpbnQgY29sdW1uTnVtYmVyIHsg
MCB9OwotICAgIFN0cmluZyBzb3VyY2VVUkw7Ci19OwotCi0vLyBCYXNlIGNsYXNzIGZvciBhbGwg
Y29uc3RydWN0b3Igb2JqZWN0cyBpbiB0aGUgSlNDIGJpbmRpbmdzLgotY2xhc3MgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgOiBwdWJsaWMgSlNET01PYmplY3QgewotcHVibGljOgotICAgIHR5cGVkZWYg
SlNET01PYmplY3QgQmFzZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwg
SlNDOjpJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91bGRDYWxs
R2V0Q2FsbERhdGE7Ci0gICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
SlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwotCi1wcm90ZWN0
ZWQ6Ci0gICAgRE9NQ29uc3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2Jh
bE9iamVjdCYpOwotCi0gICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3Qq
KTsKLSAgICBzdGF0aWMgSlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBKU0M6OkNh
bGxEYXRhJik7Ci19OwotCi1jbGFzcyBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCA6IHB1
YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBET01Db25z
dHJ1Y3Rvck9iamVjdCBCYXNlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgRE9NQ29uc3RydWN0b3JKU0J1
aWx0aW5PYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7
Ci0KLSAgICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOwotICAgIHZvaWQg
c2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKLQotcHJp
dmF0ZToKLSAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6
ZUZ1bmN0aW9uOwotfTsKLQotRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coSlNDOjpFeGVjU3Rh
dGUqKTsKLURPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci1ET01X
aW5kb3cmIGZpcnN0RE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7Ci0KLVdFQkNPUkVfRVhQT1JU
IEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRl
TmFtZSk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUpOwotCi12b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogYXR0cmlidXRlTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKLVdFQkNPUkVf
RVhQT1JUIGJvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKTsKLQotdm9pZCB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93RE9NU3ludGF4RXJyb3IoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsgLy8gTm90IHRoZSBzYW1lIGFzIGEgSmF2
YVNjcmlwdCBzeW50YXggZXJyb3IuCi12b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLXZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwot
V0VCQ09SRV9FWFBPUlQgdm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93Tm90U3VwcG9ydGVkRXJy
b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdl
KTsKLXZvaWQgdGhyb3dTZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgdGhyb3dT
ZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwotdm9p
ZCB0aHJvd1R5cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3Bl
Jik7Ci0KLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11
c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVk
IGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVu
Y3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIq
IGV4cGVjdGVkVmFsdWVzKTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RC
ZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25l
ZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKLVdFQkNPUkVf
RVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0
IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7Ci1XRUJD
T1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJy
b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZW1iZXJO
YW1lLCBjb25zdCBjaGFyKiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBl
KTsKLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRVbmF2YWlsYWJsZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSk7Ci0KLVN0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9y
TWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKTsKLVN0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBh
dHRyaWJ1dGVOYW1lKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dU
aGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKLQotV0VCQ09SRV9F
WFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWpl
Y3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7Ci1XRUJDT1JFX0VYUE9S
VCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJh
dGlvbk5hbWUpOwotCi1XRUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9N
U3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKLVdF
QkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2Jh
bE9iamVjdCYsIEpTQzo6U3RydWN0dXJlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKLQotdGVt
cGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3RydWN0
dXJlKEpTQzo6Vk0mLCBKU0RPTUdsb2JhbE9iamVjdCYpOwotdGVtcGxhdGU8dHlwZW5hbWUgV3Jh
cHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6
OkV4ZWNTdGF0ZSopOwotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTT2Jq
ZWN0KiBnZXRET01Qcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKLQot
dm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYpOwotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBKU0NsYXNzPiBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUds
b2JhbE9iamVjdCYpOwotCi1KU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdy
YXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKLXZvaWQqIHdyYXBwZXJLZXkoSlNDOjpB
cnJheUJ1ZmZlciopOwotCi1KU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01X
cmFwcGVyV29ybGQmLCB2b2lkKik7Ci1KU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqKTsKLUpTQzo6SlNBcnJheUJ1ZmZl
ciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVm
ZmVyKik7Ci0KLWJvb2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2
b2lkKiwgSlNET01PYmplY3QqLCBKU0M6OldlYWtIYW5kbGVPd25lciopOwotYm9vbCBzZXRJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9N
T2JqZWN0KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKTsKLWJv
b2wgc2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVm
ZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciog
d3JhcHBlck93bmVyKTsKLQotYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBl
cldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0Kik7Ci1ib29sIGNsZWFySW5saW5lQ2FjaGVkV3Jh
cHBlcihET01XcmFwcGVyV29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3Jh
cHBlcik7Ci1ib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBK
U0M6OkFycmF5QnVmZmVyKiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKTsKLQotdGVtcGxh
dGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9N
V3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBp
bmxpbmUgSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBSZWY8RE9NQ2xhc3M+JiBvYmplY3QpIHsgcmV0dXJuIGdldENhY2hlZFdyYXBwZXIod29y
bGQsIG9iamVjdC5nZXQoKSk7IH0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFt
ZSBXcmFwcGVyQ2xhc3M+IHZvaWQgY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNs
YXNzKiwgV3JhcHBlckNsYXNzKik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5h
bWUgV3JhcHBlckNsYXNzPiB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERP
TUNsYXNzKiwgV3JhcHBlckNsYXNzKik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlw
ZW5hbWUgVD4gYXV0byBjcmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYp
IC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZh
bHVlLCB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFw
cGVyQ2xhc3MqPjo6dHlwZTsKLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBU
PiBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlw
ZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0
eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xh
c3MqPjo6dHlwZTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNWYWx1ZSB3
cmFwKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBET01DbGFzcyYpOwotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0NsYXNzJiBjYXN0VGhpc1ZhbHVlKEpTQzo6RXhl
Y1N0YXRlJik7Ci0KLXZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJik7
Ci0KLWNvbnN0IEpTQzo6SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKEpTQzo6
Vk0mLCBjb25zdCBKU0M6Okhhc2hUYWJsZSYgc3RhdGljVGFibGUpOwotCi1TdHJpbmcgcmV0cmll
dmVFcnJvck1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlIGV4
Y2VwdGlvbiwgSlNDOjpDYXRjaFNjb3BlJik7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNj
cmlwdCogPSBudWxscHRyKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0ciwg
RXhjZXB0aW9uRGV0YWlscyogPSBudWxscHRyKTsKLXZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlv
bihKU0M6OkV4ZWNTdGF0ZSopOwotCi1KU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uJiYpOwotSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUsIGNvbnN0IFN0cmluZyYpOwotCi0v
LyBDb252ZXJ0IGEgRE9NIGltcGxlbWVudGF0aW9uIGV4Y2VwdGlvbiBpbnRvIGEgSmF2YVNjcmlw
dCBleGNlcHRpb24gaW4gdGhlIGV4ZWN1dGlvbiBzdGF0ZS4KLXZvaWQgcHJvcGFnYXRlRXhjZXB0
aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOwotV0VC
Q09SRV9FWFBPUlQgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKLQotSlNDOjpKU1ZhbHVlIGpzU3Ry
aW5nKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgVVJMJik7IC8vIGVtcHR5IGlmIHRoZSBVUkwgaXMg
bnVsbAotCi1KU0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IFN0cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCi1KU0M6
OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFVSTCYp
OyAvLyB1bmRlZmluZWQgaWYgdGhlIFVSTCBpcyBudWxsCi0KLS8vIFNlZSBKYXZhU2NyaXB0Q29y
ZSBmb3IgZXhwbGFuYXRpb246IFNob3VsZCBiZSB1c2VkIGZvciBhbnkgc3RyaW5nIHRoYXQgaXMg
YWxyZWFkeSBvd25lZCBieSBhbm90aGVyCi0vLyBvYmplY3QsIHRvIGxldCB0aGUgZW5naW5lIGtu
b3cgdGhhdCBjb2xsZWN0aW5nIHRoZSBKU1N0cmluZyB3cmFwcGVyIGlzIHVubGlrZWx5IHRvIHNh
dmUgbWVtb3J5LgotSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpFeGVjU3Rh
dGUqLCBjb25zdCBTdHJpbmcmKTsKLQotU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6
UHJvcGVydHlOYW1lKTsKLQotQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5n
KEpTQzo6UHJvcGVydHlOYW1lKTsKLQotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJU
b0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLVdF
QkNPUkVfRVhQT1JUIFN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5n
KEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci1XRUJDT1JFX0VYUE9S
VCBTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
Ci0KLWludDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUsIEpTQzo6RXhlY1N0YXRl
KiwgYm9vbCYgb2theSk7Ci0KLS8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbnZlcnQgdmFs
dWVzIHRvIGludGVnZXJzIGFzIHBlciB0aGUgV2ViSURMIHNwZWNpZmljYXRpb24uCi0vLyBUaGUg
Y29udmVyc2lvbiBmYWlscyBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIG51
bWJlciBvciwgaWYgRW5mb3JjZVJhbmdlIGlzIHNwZWNpZmllZCwKLS8vIHRoZSB2YWx1ZSBpcyBv
dXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlciB0eXBlLgotCi1XRUJD
T1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRv
SW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09S
RV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdl
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQzMl90
IHRvVUludDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdF
QkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VS
YW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIGlu
dDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JF
X0VYUE9SVCB1aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkNsYW1wKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDMyX3QgdG9J
bnQzMkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JU
IHVpbnQzMl90IHRvVUludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwot
V0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRDbGFtcChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDgo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0
b1VJbnQ4KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGlu
dDE2X3QgdG9JbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VY
UE9SVCB1aW50MTZfdCB0b1VJbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1X
RUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotCi1KU0M6OkpTVmFsdWUganNEYXRlKEpTQzo6RXhlY1N0YXRlKiwgZG91
YmxlIHZhbHVlKTsKLQotLy8gTmFOIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8g
YSBkYXRlLgotZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
KTsKLQotLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0
eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCi1KU0M6OkpTT2JqZWN0
KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkJiBs
ZW5ndGgpOwotCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciYpOwotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcmKTsKLUpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6
OkFycmF5QnVmZmVyKik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyopOwotdGVtcGxhdGU8dHlwZW5h
bWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCosIFJlZjxUPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWZQdHI8VD4mJik7Ci10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xv
YmFsT2JqZWN0KiwgY29uc3QgVmVjdG9yPFQ+Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3Qg
VmVjdG9yPFJlZlB0cjxUPj4mKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJik7Ci0KLUpTQzo6SlNW
YWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpT
Qzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJh
dG9yKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUJik7Ci1KU0M6
OkpTVmFsdWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJik7Ci0KLVJlZlB0cjxKU0M6
OkFycmF5QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZN
JiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJl
ZEludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDE2QXJy
YXk+IHRvUG9zc2libHlTaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwot
UmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXkoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hh
cmVkVWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQ4
Q2xhbXBlZEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYs
IEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJl
ZFVpbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDMy
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKLVJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJBcnJh
eShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9Q
b3NzaWJseVNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLQotUmVm
UHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVkSW50
OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50MTZBcnJheT4g
dG9VbnNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlND
OjpJbnQzMkFycmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKLVJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0m
LCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5zaGFy
ZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6
OlVpbnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVk
RmxvYXQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQ2
NEFycmF5PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1R5cGU+IFZlY3RvcjxSZWY8VD4+IHRv
UmVmTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9F
WFBPUlQgYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci0KLWVudW0gU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9ydFNlY3VyaXR5
RXJyb3IsIExvZ1NlY3VyaXR5RXJyb3IsIFRocm93U2VjdXJpdHlFcnJvciB9OwotbmFtZXNwYWNl
IEJpbmRpbmdTZWN1cml0eSB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hlY2tTZWN1
cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gVCogY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUKik7Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpT
Qzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uT3I8VCo+JiYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IEV4Y2VwdGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYs
IEV4Y2VwdGlvbk9yPFQmPiYmKTsKLSAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5k
b3coSlNDOjpFeGVjU3RhdGUqLCBET01XaW5kb3cmLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9
IExvZ1NlY3VyaXR5RXJyb3IpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRv
dyhKU0M6OkV4ZWNTdGF0ZSYsIERPTVdpbmRvdyYsIFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgYm9v
bCBzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSosIFNlY3Vy
aXR5UmVwb3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7Ci0gICAgYm9vbCBzaG91bGRB
bGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUmLCBGcmFtZSYsIFN0cmluZyYgbWVzc2Fn
ZSk7Ci0gICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIE5v
ZGUqKTsKLX07Ci0KIHZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSk7CiAKLVN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlBy
b3BlcnR5TmFtZSk7Ci1BdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlND
OjpQcm9wZXJ0eU5hbWUpOwotCi10ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVu
Z3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsK
K2VudW0gU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3Is
IExvZ1NlY3VyaXR5RXJyb3IsIFRocm93U2VjdXJpdHlFcnJvciB9OwogCituYW1lc3BhY2UgQmlu
ZGluZ1NlY3VyaXR5IHsKIAotZW51bSBjbGFzcyBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciB7IFRo
cm93LCBSZXR1cm5FYXJseSwgUmVqZWN0UHJvbWlzZSwgQXNzZXJ0IH07Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIFQmKTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IFQqIGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRl
JiwgVCopOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJp
dHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uT3I8VCo+JiYpOwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhl
Y1N0YXRlJiwgRXhjZXB0aW9uT3I8VCY+JiYpOworCitib29sIHNob3VsZEFsbG93QWNjZXNzVG9E
T01XaW5kb3coSlNDOjpFeGVjU3RhdGUqLCBET01XaW5kb3cmLCBTZWN1cml0eVJlcG9ydGluZ09w
dGlvbiA9IExvZ1NlY3VyaXR5RXJyb3IpOworYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2lu
ZG93KEpTQzo6RXhlY1N0YXRlJiwgRE9NV2luZG93JiwgU3RyaW5nJiBtZXNzYWdlKTsKK2Jvb2wg
c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiwgRnJhbWUqLCBTZWN1cml0
eVJlcG9ydGluZ09wdGlvbiA9IExvZ1NlY3VyaXR5RXJyb3IpOworYm9vbCBzaG91bGRBbGxvd0Fj
Y2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUmLCBGcmFtZSYsIFN0cmluZyYgbWVzc2FnZSk7Citi
b29sIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKEpTQzo6RXhlY1N0YXRlJiwgTm9kZSopOwogCi10
ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPgotc3RydWN0IEJpbmRpbmdDYWxsZXIgewotICAgIHVz
aW5nIEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9uID0gYm9vbChKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xh
c3MmLCBKU0M6OkpTVmFsdWUsIEpTQzo6VGhyb3dTY29wZSYpOwotICAgIHVzaW5nIEF0dHJpYnV0
ZUdldHRlckZ1bmN0aW9uID0gSlNDOjpKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgSlNDbGFzcyYs
IEpTQzo6VGhyb3dTY29wZSYpOwotICAgIHVzaW5nIE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0g
SlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBKU0M6OlRocm93
U2NvcGUmKTsKLSAgICB1c2luZyBQcm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6
OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDbGFzcyosIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOwotCi0gICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RG
b3JBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKLSAgICBz
dGF0aWMgSlNDbGFzcyogY2FzdEZvck9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYpOwotCi0gICAg
dGVtcGxhdGU8UHJvbWlzZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNhbGxlciwg
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6UmVqZWN0UHJvbWlzZT4KLSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxs
UHJvbWlzZU9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21p
c2U+JiYgcHJvbWlzZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChzdGF0ZSk7Ci0gICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9w
ZXJhdGlvbigqc3RhdGUpOwotICAgICAgICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3I6OkFzc2VydCAmJiBVTkxJS0VMWSghdGhpc09iamVjdCkpCi0gICAgICAgICAg
ICByZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKHByb21pc2UuZ2V0KCksIEpT
Q2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25OYW1lKTsKLSAgICAgICAgQVNTRVJU
KHRoaXNPYmplY3QpOwotICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIEpTQ2xhc3M6OmluZm8oKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0
b3IgdGhlIGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgdG8gdXNlIHJlZmVyZW5jZXMgZm9yIHN0YXRl
IGFuZCB0aGlzT2JqZWN0LgotICAgICAgICByZXR1cm4gb3BlcmF0aW9uQ2FsbGVyKHN0YXRlLCB0
aGlzT2JqZWN0LCBXVEZNb3ZlKHByb21pc2UpLCB0aHJvd1Njb3BlKTsKLSAgICB9Ci0KLSAgICB0
ZW1wbGF0ZTxPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRo
aXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRo
cm93PgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxPcGVyYXRpb24oSlNDOjpF
eGVjU3RhdGUqIHN0YXRlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9y
T3BlcmF0aW9uKCpzdGF0ZSk7Ci0gICAgICAgIGlmIChzaG91bGRUaHJvdyAhPSBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvcjo6QXNzZXJ0ICYmIFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgewotICAgICAg
ICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dT
Y29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOwotICAgICAg
ICAgICAgLy8gRm9yIGN1c3RvbSBwcm9taXNlLXJldHVybmluZyBvcGVyYXRpb25zCi0gICAgICAg
ICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFz
czo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOwotICAgICAgICB9Ci0gICAgICAg
IEFTU0VSVCh0aGlzT2JqZWN0KTsKLSAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZvKCkpOwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2RlIHRvIHVzZSByZWZlcmVuY2VzIGZv
ciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KLSAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkNhbGxlcihz
dGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8QXR0
cmlidXRlU2V0dGVyRnVuY3Rpb24gc2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91
bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KLSAgICBzdGF0aWMgYm9v
bCBzZXRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVl
IHRoaXNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGNvbnN0IGNoYXIq
IGF0dHJpYnV0ZU5hbWUpCi0gICAgewotICAgICAgICBBU1NFUlQoc3RhdGUpOwotICAgICAgICBh
dXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKLSAgICAg
ICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JBdHRyaWJ1dGUoKnN0YXRlLCB0aGlzVmFsdWUp
OwotICAgICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJu
IChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpID8gdGhyb3dT
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNz
TmFtZSwgYXR0cmlidXRlTmFtZSkgOiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHNldHRlcigqc3Rh
dGUsICp0aGlzT2JqZWN0LCBKU0M6OkpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0aHJv
d1Njb3BlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiBn
ZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vy
cm9yQmVoYXZpb3I6OlRocm93PgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGF0dHJp
YnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVl
LCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRl
KTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+
dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yQXR0cmlidXRlKCpzdGF0
ZSwgdGhpc1ZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgewotICAg
ICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJv
dykKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0
aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSk7Ci0g
ICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJl
amVjdFByb21pc2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoR2V0
dGVyVHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0
ZU5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNV
bmRlZmluZWQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5j
b2RlKGdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7Ci0gICAgfQogfTsK
IAotLy8gRXhjZXB0aW9uT3IgaGFuZGxpbmcuCi12b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYpOwotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RP
TUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+JiYpOwotdGVt
cGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVj
U3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9y
PFQ+JiYgdmFsdWUpOwotCi0vLyBJbmxpbmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0ZSBkZWZpbml0
aW9ucy4KLQotaW5saW5lIEpTQzo6U3RydWN0dXJlKiBET01Db25zdHJ1Y3Rvck9iamVjdDo6Y3Jl
YXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi17Ci0gICAgcmV0dXJuIEpTQzo6U3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwotfQotCi1pbmxpbmUgRE9NQ29u
c3RydWN0b3JPYmplY3Q6OkRPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgOiBKU0RPTU9iamVj
dChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0KLQotaW5saW5lIFN0cmluZyBET01Db25z
dHJ1Y3Rvck9iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KikKLXsKLSAgICByZXR1cm4g
QVNDSUlMaXRlcmFsKCJGdW5jdGlvbiIpOwotfQotCi1pbmxpbmUgRE9NQ29uc3RydWN0b3JKU0J1
aWx0aW5PYmplY3Q6OkRPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6U3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCi0gICAgOiBET01D
b25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0KLQotaW5saW5l
IEpTQzo6SlNGdW5jdGlvbiogRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OmluaXRpYWxp
emVGdW5jdGlvbigpCi17Ci0gICAgcmV0dXJuIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLmdldCgpOwot
fQotCi1pbmxpbmUgdm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6c2V0SW5pdGlh
bGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mIHZtLCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQotewot
ICAgIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLnNldCh2bSwgdGhpcywgJmZ1bmN0aW9uKTsKLX0KLQot
aW5saW5lIEpTRE9NR2xvYmFsT2JqZWN0KiBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90
eXBlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIC8vIEZJWE1FOiBDYWxsZXJzIHRvIHRo
aXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzaW5nIHRoZSBnbG9iYWwgb2JqZWN0Ci0gICAgLy8gZnJv
bSB3aGljaCB0aGUgb2JqZWN0IGlzIGJlaW5nIGNyZWF0ZWQsIGluc3RlYWQgb2YgYXNzdW1pbmcg
dGhlIGxleGljYWwgb25lLgotICAgIC8vIGUuZy4gc3ViZnJhbWUuZG9jdW1lbnQuYm9keSBzaG91
bGQgdXNlIHRoZSBzdWJmcmFtZSdzIGdsb2JhbCBvYmplY3QsIG5vdCB0aGUgbGV4aWNhbCBvbmUu
Ci0gICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBp
bmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNET01H
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAgICBpZiAoSlNDOjpTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGdldENhY2hlZERPTVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFz
czo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKLSAgICByZXR1cm4gY2FjaGVE
T01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVN0cnVjdHVyZSh2
bSwgJmdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVQcm90b3R5cGUodm0sICZnbG9i
YWxPYmplY3QpKSwgV3JhcHBlckNsYXNzOjppbmZvKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0
cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBmdW5j
dGlvbiBpcyB3cm9uZy4gSXQgdXNlcyB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdCBmb3IgY3JlYXRp
bmcgdGhlIHByb3RvdHlwZSBzdHJ1Y3R1cmUuCi0gICAgcmV0dXJuIGdldERPTVN0cnVjdHVyZTxX
cmFwcGVyQ2xhc3M+KGV4ZWMtPnZtKCksICpkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90
eXBlKGV4ZWMpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUg
SlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTQzo6SlNP
YmplY3QqPihhc09iamVjdChnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPih2bSwgKkpTQzo6
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSktPnN0b3JlZFByb3RvdHlw
ZSgpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6OkVuY29k
ZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNG
dW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2Jq
ZWN0KQotewotICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQ2xhc3M6OmNyZWF0ZShnZXRE
T01TdHJ1Y3R1cmU8SlNDbGFzcz4oZ2xvYmFsT2JqZWN0LnZtKCksIGdsb2JhbE9iamVjdCksICZn
bG9iYWxPYmplY3QpOwotICAgIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKHN0YXRl
LCAqb2JqZWN0LCBpbml0aWFsaXplRnVuY3Rpb24pOwotICAgIHJldHVybiBKU0M6OkpTVmFsdWU6
OmVuY29kZShvYmplY3QpOwotfQotCi1pbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBw
ZXJPd25lcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKikKLXsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKj4od29ybGQu
dm0oKS5tX3R5cGVkQXJyYXlDb250cm9sbGVyLmdldCgpKS0+d3JhcHBlck93bmVyKCk7Ci19Ci0K
LWlubGluZSB2b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCkKLXsK
LSAgICByZXR1cm4gZG9tT2JqZWN0OwotfQotCi1pbmxpbmUgSlNET01PYmplY3QqIGdldElubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCopIHsgcmV0dXJuIG51bGxwdHI7
IH0KLWlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwg
dm9pZCosIEpTRE9NT2JqZWN0KiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqKSB7IHJldHVybiBmYWxz
ZTsgfQotaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYsIHZvaWQqLCBKU0RPTU9iamVjdCopIHsgcmV0dXJuIGZhbHNlOyB9Ci0KLWlubGluZSBKU0RP
TU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBT
Y3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCkKLXsKLSAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBkb21PYmplY3QtPndyYXBwZXIo
KTsKLX0KLQotaW5saW5lIEpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBl
cihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCi17Ci0g
ICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gYnVmZmVyLT5tX3dyYXBwZXIuZ2V0KCk7Ci19Ci0KLWlubGluZSBib29sIHNldElubGlu
ZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBk
b21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3Jh
cHBlck93bmVyKQotewotICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGRvbU9iamVjdC0+c2V0V3JhcHBlcih3cmFwcGVyLCB3cmFwcGVyT3duZXIs
ICZ3b3JsZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIHNldElubGluZUNh
Y2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogZG9t
T2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVy
KiB3cmFwcGVyT3duZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0LT5tX3dyYXBwZXIgPSBKU0M6OldlYWs8SlNDOjpK
U0FycmF5QnVmZmVyPih3cmFwcGVyLCB3cmFwcGVyT3duZXIsICZ3b3JsZCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01PYmplY3Qq
IHdyYXBwZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgZG9tT2JqZWN0LT5jbGVhcldyYXBwZXIod3JhcHBlcik7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWlubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFw
cGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6SlNBcnJh
eUJ1ZmZlciogd3JhcHBlcikKLXsKLSAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB3ZWFrQ2xlYXIoZG9tT2JqZWN0LT5tX3dyYXBwZXIsIHdyYXBw
ZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4g
aW5saW5lIEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3
b3JsZCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKLXsKLSAgICBpZiAoYXV0byogd3JhcHBlciA9IGdl
dElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsICZkb21PYmplY3QpKQotICAgICAgICByZXR1cm4g
d3JhcHBlcjsKLSAgICByZXR1cm4gd29ybGQubV93cmFwcGVycy5nZXQod3JhcHBlcktleSgmZG9t
T2JqZWN0KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFw
cGVyQ2xhc3M+IGlubGluZSB2b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxk
LCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCi17Ci0gICAgSlND
OjpXZWFrSGFuZGxlT3duZXIqIG93bmVyID0gd3JhcHBlck93bmVyKHdvcmxkLCBkb21PYmplY3Qp
OwotICAgIGlmIChzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBw
ZXIsIG93bmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdlYWtBZGQod29ybGQubV93cmFwcGVy
cywgd3JhcHBlcktleShkb21PYmplY3QpLCBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4od3JhcHBl
ciwgb3duZXIsICZ3b3JsZCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlw
ZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVy
V29ybGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIp
Ci17Ci0gICAgaWYgKGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3
cmFwcGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdlYWtSZW1vdmUod29ybGQubV93cmFwcGVy
cywgd3JhcHBlcktleShkb21PYmplY3QpLCB3cmFwcGVyKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5h
bWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46
OnR5cGUKLXsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJD
b252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3M7Ci0KLSAgICBBU1NFUlQoIWdl
dENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKTsKLSAgICBh
dXRvKiBkb21PYmplY3RQdHIgPSBkb21PYmplY3QucHRyKCk7Ci0gICAgYXV0byogd3JhcHBlciA9
IFdyYXBwZXJDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGdsb2Jh
bE9iamVjdC0+dm0oKSwgKmdsb2JhbE9iamVjdCksIGdsb2JhbE9iamVjdCwgV1RGTW92ZShkb21P
YmplY3QpKTsKLSAgICBjYWNoZVdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmpl
Y3RQdHIsIHdyYXBwZXIpOwotICAgIHJldHVybiB3cmFwcGVyOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gaW5saW5lIGF1dG8gY3JlYXRlV3JhcHBlcihKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VD4mJiBkb21PYmplY3QpIC0+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlw
ZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNz
Kj46OnR5cGUKLXsKLSAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxET01DbGFzcz4oZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8RE9NQ2xhc3M+KFdURk1vdmUoZG9tT2JqZWN0KSkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSB3
cmFwKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKLXsKLSAgICBpZiAoYXV0byogd3JhcHBlciA9IGdldENh
Y2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKQotICAgICAgICBy
ZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFs
T2JqZWN0LCBSZWY8RE9NQ2xhc3M+KGRvbU9iamVjdCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBKU0NsYXNzPiBpbmxpbmUgSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUpCi17Ci0gICAgYXV0byB0aGlzVmFsdWUgPSBzdGF0ZS50aGlzVmFsdWUoKTsKLSAgICBh
dXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0NsYXNzKj4oc3RhdGUudm0oKSwg
dGhpc1ZhbHVlKTsKLSAgICBBU1NFUlQoY2FzdGVkVGhpcyk7Ci0gICAgcmV0dXJuICpjYXN0ZWRU
aGlzOwotfQotCi1pbmxpbmUgaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWYWx1ZSB2
YWx1ZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rYXkpCi17Ci0gICAgZG91YmxlIG51
bWJlciA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIG9rYXkgPSBzdGQ6OmlzZmluaXRlKG51
bWJlcik7Ci0gICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOwotfQotCi0vLyBWYWxpZGF0
ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24g
NC4xLjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KLWlubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTU2Vx
dWVuY2UoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQm
IGxlbmd0aCkKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3Qg
PSB2YWx1ZS5nZXRPYmplY3QoKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICB0aHJvd1Nl
cXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQotCi0gICAgSlNDOjpKU1ZhbHVlIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoJmV4ZWMs
IGV4ZWMucHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7Ci0KLSAgICBpZiAobGVuZ3RoVmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkgewotICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgbGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9V
SW50MzIoJmV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwot
Ci0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpB
cnJheUJ1ZmZlciYgYnVmZmVyKQotewotICAgIGlmIChhdXRvIHJlc3VsdCA9IGdldENhY2hlZFdy
YXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBidWZmZXIpKQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotCi0gICAgLy8gVGhlIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSBmdW5jdGlvbiB3aWxsIHJl
Z2lzdGVyIHRoZSB3cmFwcGVyIGluIGZpbmlzaENyZWF0aW9uLgotICAgIHJldHVybiBKU0M6OkpT
QXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0ZS0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZl
clN0cnVjdHVyZShidWZmZXIuc2hhcmluZ01vZGUoKSksICZidWZmZXIpOwotfQotCi1pbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3JiB2aWV3KQotewotICAgIHJl
dHVybiB2aWV3LndyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLWlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlcikK
LSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgcmV0dXJuIHRvSlMoc3RhdGUsIGds
b2JhbE9iamVjdCwgKmJ1ZmZlcik7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1
cm4gSlNDOjpqc051bGwoKTsKLSAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAq
dmlldyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
UmVmPFQ+JiYgcHRyKQotewotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRy
LmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWZQdHI8VD4mJiBwdHIpCi17Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBwdHIuZ2V0KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQotewotICAgIEpTQzo6Vk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMs
IG51bGxwdHIsIHZlY3Rvci5zaXplKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IEpTQzo6SlNWYWx1ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXpl
KCk7ICsraSkgewotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXSkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0
b3I8UmVmUHRyPFQ+PiYgdmVjdG9yKQotewotICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAg
IEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIs
IHZlY3Rvci5zaXplKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNW
YWx1ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkg
ewotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIHZlY3RvcltpXS5nZXQoKSkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsKLX0KLQot
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2Jh
bE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5hbWUmIHByaXZhdGVOYW1lKQotewotICAgIHJl
dHVybiBKU0M6OlN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHByaXZhdGVOYW1lLnVpZCgpKTsK
LX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1
cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB2YWx1ZSwgZmFsc2UpOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNv
bnN0IFQmIHZhbHVlKQotewotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgm
c3RhdGUsIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZSksIGZhbHNlKTsKLX0KLQot
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
KQotewotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIEpTQzo6
anNVbmRlZmluZWQoKSwgdHJ1ZSk7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZl
clZpZXc+IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNhc3Q8
SlNDOjpKU0FycmF5QnVmZmVyVmlldyo+KHZtLCB2YWx1ZSk7Ci0gICAgaWYgKCF3cmFwcGVyKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gd3JhcHBlci0+cG9zc2libHlTaGFy
ZWRJbXBsKCk7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5z
aGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBhdXRvIHJlc3VsdCA9IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcodm0sIHZh
bHVlKTsKLSAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPmlzU2hhcmVkKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlND
OjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6
SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRW
aWV3PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJ
bnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZp
ZXc8SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJ
bnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZp
ZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpV
aW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZp
ZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpV
aW50OENsYW1wZWRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJl
ZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0K
LWlubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQxNkFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3Nz
aWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7
IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQz
MkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Q
b3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1
ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRG
bG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlND
Ojp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZt
LCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlT
aGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1
cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0
b3I+KHZtLCB2YWx1ZSk7IH0KLQotaW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9VbnNo
YXJlZEludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0sIHZhbHVl
KTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFycmF5
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJl
ZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5l
IFJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mIHZt
LCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVk
VmlldzxKU0M6OkludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6
OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFs
dWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVp
bnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBl
ZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6
VWludDhDbGFtcGVkQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVp
bnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWlu
dDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5
PiB0b1Vuc2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkg
eyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDMyQWRhcHRv
cj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNo
YXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVy
biBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0s
IHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZs
b2F0NjRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6
OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVl
KTsgfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1Q+IGlubGluZSBWZWN0b3I8
UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKQotewotICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0
KCkpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAg
ICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIFZlY3RvcjxSZWY8VD4+IHJlc3VsdDsKLSAg
ICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0s
IEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmIChqc1Zh
bHVlLmluaGVyaXRzKHZtLCBKU1Q6OmluZm8oKSkpIHsKLSAgICAgICAgICAgIGF1dG8qIG9iamVj
dCA9IEpTVDo6dG9XcmFwcGVkKHZtLCBqc1ZhbHVlKTsKLSAgICAgICAgICAgIEFTU0VSVChvYmpl
Y3QpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqb2JqZWN0KTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcigqc3RhdGUsIHNjb3BlKTsK
LSAgICB9KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgU3RyaW5nIHByb3BlcnR5
TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICBBU1NF
UlQoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKTsKLSAgICByZXR1cm4gcHJvcGVydHlOYW1lLnVp
ZCgpID8gcHJvcGVydHlOYW1lLnVpZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKLX0K
LQotaW5saW5lIEF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIEF0b21pY1N0cmluZyhwcm9w
ZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlkKCkgOiBwcm9wZXJ0eU5hbWUucHVibGlj
TmFtZSgpKTsKLX0KLQotdGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlv
biwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rp
b25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjpl
bmNvZGUoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBsZW5ndGgsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5hdGl2ZUZ1
bmN0aW9uKSk7Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlv
biYmIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKHN0YXRlLCB0aHJvd1Nj
b3BlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpOwotfQotCi1pbmxpbmUgdm9pZCBwcm9wYWdhdGVFeGNl
cHRpb24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUs
IEV4Y2VwdGlvbk9yPHZvaWQ+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhh
c0V4Y2VwdGlvbigpKSkKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Nj
b3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4
Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2Vw
dGlvbigpKSkgewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUs
IHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQot
ICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVy
blZhbHVlKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9y
PFQ+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkg
ewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJl
bGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJl
dHVyblZhbHVlKCkpOwotfQotCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGlu
Z1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQm
IG5vZGUpCiB7CiAgICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCAmbm9k
ZSkgPyAmbm9kZSA6IG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjExMzUzKQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwOjIxMTM1MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAzNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDExLCAyMDEz
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDcgU2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAy
MDEzIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+CisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJDb21tb25WTS5oIgor
I2luY2x1ZGUgIkRPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbi5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbkhlYWRlcnMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25JbnRlcmZhY2VzLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5j
bHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIK
KyNpbmNsdWRlICJKU0RPTVByb21pc2UuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5o
IgorI2luY2x1ZGUgIkpTRXhjZXB0aW9uQmFzZS5oIgorI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCisjaW5jbHVkZSA8Ynl0ZWNvZGUvQ29kZUJsb2NrLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9y
L1NjcmlwdENhbGxTdGFjay5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2tG
YWN0b3J5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9EYXRlSW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9FcnJvckhhbmRsaW5nU2NvcGUuaD4K
KyNpbmNsdWRlIDxydW50aW1lL0Vycm9ySW5zdGFuY2UuaD4KKyNpbmNsdWRlIDxydW50aW1lL0V4
Y2VwdGlvbi5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M7Cit1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1NUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3Rv
ck9iamVjdCk7CitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoRE9NQ29u
c3RydWN0b3JXaXRoRG9jdW1lbnQpOworCit2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0IEF0
b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKQoreworICAgIGNvbW1vblZNKCkuYWRkSW1wdXJlUHJv
cGVydHkocHJvcGVydHlOYW1lKTsKK30KKworSlNWYWx1ZSBqc093bmVkU3RyaW5nT3JOdWxsKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQoreworICAgIGlmIChzLmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgcmV0dXJuIGpzT3duZWRTdHJpbmcoZXhlYywg
cyk7Cit9CisKK0pTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IFN0cmluZyYgcykKK3sKKyAgICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHMpOworfQor
CitKU1ZhbHVlIGpzU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCit7Cisg
ICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Cit9CisKK0pT
VmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVSTCYgdXJs
KQoreworICAgIGlmICh1cmwuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCB1cmwuc3RyaW5nKCkpOworfQor
CitzdGF0aWMgaW5saW5lIFN0cmluZyBzdHJpbmdUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgU3RyaW5nJiYgc3RyaW5nKQoreworICAgIGlmICgh
c3RyaW5nLmNvbnRhaW5zT25seUxhdGluMSgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZz
dGF0ZSwgc2NvcGUpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHJldHVybiBz
dHJpbmc7Cit9CisKK1N0cmluZyBpZGVudGlmaWVyVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3Rh
dGUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBT
dHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmcoKTsKKyAgICByZXR1cm4gc3RyaW5nVG9C
eXRlU3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKK30KKworU3RyaW5nIHZh
bHVlVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsK
KyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgcmV0dXJuIHN0cmlu
Z1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBoYXNVbnBhaXJlZFN1cnJvZ2F0ZShTdHJpbmdWaWV3IHN0cmluZykKK3sK
KyAgICAvLyBGYXN0IHBhdGggZm9yIDgtYml0IHN0cmluZ3M7IHRoZXkgY2FuJ3QgaGF2ZSBhbnkg
c3Vycm9nYXRlcy4KKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHN0cmluZy5jb2RlUG9pbnRzKCkpIHsKKyAg
ICAgICAgaWYgKFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIFN0cmlu
ZyBzdHJpbmdUb1VTVlN0cmluZyhTdHJpbmcmJiBzdHJpbmcpCit7CisgICAgLy8gRmFzdCBwYXRo
IGZvciB0aGUgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbm8gdW5wYWlyZWQgc3Vycm9nYXRlcy4KKyAg
ICBpZiAoIWhhc1VucGFpcmVkU3Vycm9nYXRlKHN0cmluZykpCisgICAgICAgIHJldHVybiBzdHJp
bmc7CisKKyAgICAvLyBTbG93IHBhdGg6IGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8j
ZGZuLW9idGFpbi11bmljb2RlCisgICAgLy8gUmVwbGFjZXMgdW5wYWlyZWQgc3Vycm9nYXRlcyB3
aXRoIHRoZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7
CisgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eShzdHJpbmcubGVuZ3RoKCkpOworICAgIFN0cmlu
Z1ZpZXcgdmlldyB7IHN0cmluZyB9OworICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiB2aWV3LmNv
ZGVQb2ludHMoKSkgeworICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwbGFjZW1lbnRDaGFyYWN0ZXIpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvZGVQb2ludCk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIGlkZW50aWZpZXJUb1VTVlN0cmlu
ZyhFeGVjU3RhdGUmLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQoreworICAgIFN0cmlu
ZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOworICAgIHJldHVybiBzdHJpbmdUb1VTVlN0
cmluZyhXVEZNb3ZlKHN0cmluZykpOworfQorCitTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5n
IHN0cmluZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgeyB9KTsKKworICAgIHJldHVybiBzdHJpbmdUb1VTVlN0cmluZyhXVEZNb3Zl
KHN0cmluZykpOworfQorCitKU1ZhbHVlIGpzRGF0ZShFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gRGF0ZUluc3RhbmNlOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlU3RydWN0dXJlKCksIHZhbHVlKTsKK30KKwor
ZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzTnVtYmVyKCk7
CisgICAgaWYgKCF2YWx1ZS5pbmhlcml0cyhleGVjLT52bSgpLCBEYXRlSW5zdGFuY2U6OmluZm8o
KSkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05h
TigpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50b09iamVj
dChleGVjKSktPmludGVybmFsTnVtYmVyKCk7Cit9CisKK3ZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBleGNlcHRpb25WYWx1ZSwgQ2FjaGVkU2NyaXB0KiBjYWNo
ZWRTY3JpcHQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKKyAgICBhdXRvKiBleGNlcHRp
b24gPSBqc0R5bmFtaWNEb3duY2FzdDxKU0M6OkV4Y2VwdGlvbio+KHZtLCBleGNlcHRpb25WYWx1
ZSk7CisgICAgaWYgKCFleGNlcHRpb24pIHsKKyAgICAgICAgZXhjZXB0aW9uID0gdm0ubGFzdEV4
Y2VwdGlvbigpOworICAgICAgICBpZiAoIWV4Y2VwdGlvbikKKyAgICAgICAgICAgIGV4Y2VwdGlv
biA9IEpTQzo6RXhjZXB0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhjZXB0aW9uVmFsdWUsIEpT
Qzo6RXhjZXB0aW9uOjpEb05vdENhcHR1cmVTdGFjayk7CisgICAgfQorCisgICAgcmVwb3J0RXhj
ZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgY2FjaGVkU2NyaXB0KTsKK30KKworU3RyaW5nIHJldHJp
ZXZlRXJyb3JNZXNzYWdlKEV4ZWNTdGF0ZSYgc3RhdGUsIFZNJiB2bSwgSlNWYWx1ZSBleGNlcHRp
b24sIENhdGNoU2NvcGUmIGNhdGNoU2NvcGUpCit7CisgICAgaWYgKGF1dG8qIGV4Y2VwdGlvbkJh
c2UgPSB0b0V4Y2VwdGlvbkJhc2Uodm0sIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybiBleGNl
cHRpb25CYXNlLT50b1N0cmluZygpOworCisgICAgLy8gRklYTUU6IDxodHRwOi8vd2Via2l0Lm9y
Zy9iLzExNTA4Nz4gV2ViIEluc3BlY3RvcjogV2ViQ29yZTo6cmVwb3J0RXhjZXB0aW9uIHNob3Vs
ZCBub3QgZXZhbHVhdGUgSmF2YVNjcmlwdCBoYW5kbGluZyBleGNlcHRpb25zCisgICAgLy8gSWYg
dGhpcyBpcyBhIGN1c3RvbSBleGNlcHRpb24gb2JqZWN0LCBjYWxsIHRvU3RyaW5nIG9uIGl0IHRv
IHRyeSBhbmQgZ2V0IGEgbmljZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBleGNlcHRp
b24uCisgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKKyAgICBpZiAoYXV0byogZXJyb3IgPSBqc0R5
bmFtaWNEb3duY2FzdDxFcnJvckluc3RhbmNlKj4odm0sIGV4Y2VwdGlvbikpCisgICAgICAgIGVy
cm9yTWVzc2FnZSA9IGVycm9yLT5zYW5pdGl6ZWRUb1N0cmluZygmc3RhdGUpOworICAgIGVsc2UK
KyAgICAgICAgZXJyb3JNZXNzYWdlID0gZXhjZXB0aW9uLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisK
KyAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIGFueSBuZXcgZXhjZXB0aW9uIHRoYXQgbWF5IGJlIHRo
cm93biBpbiB0aGUgdG9TdHJpbmcoKSBjYWxsIGFib3ZlLgorICAgIC8vIHJlcG9ydEV4Y2VwdGlv
bigpIGlzIG5vdCBzdXBwb3NlZCB0byBiZSBtYWtpbmcgbmV3IGV4Y2VwdGlvbnMuCisgICAgY2F0
Y2hTY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOwor
ICAgIHJldHVybiBlcnJvck1lc3NhZ2U7Cit9CisKK3ZvaWQgcmVwb3J0RXhjZXB0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSlNDOjpFeGNlcHRpb24qIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiBjYWNo
ZWRTY3JpcHQsIEV4Y2VwdGlvbkRldGFpbHMqIGV4Y2VwdGlvbkRldGFpbHMpCit7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CisKKyAgICBSRUxFQVNFX0FTU0VSVCh2bS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9j
aygpKTsKKyAgICBpZiAoaXNUZXJtaW5hdGVkRXhlY3V0aW9uRXhjZXB0aW9uKHZtLCBleGNlcHRp
b24pKQorICAgICAgICByZXR1cm47CisKKyAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JTY29w
ZShleGVjLT52bSgpKTsKKworICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjayhj
cmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbiwgU2NyaXB0
Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKSk7CisgICAgc2NvcGUuY2xlYXJF
eGNlcHRpb24oKTsKKyAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKKworICAgIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVj
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOworICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0g
anNEeW5hbWljRG93bmNhc3Q8SlNET01XaW5kb3cqPih2bSwgZ2xvYmFsT2JqZWN0KSkgeworICAg
ICAgICBpZiAoIXdpbmRvdy0+d3JhcHBlZCgpLmlzQ3VycmVudGx5RGlzcGxheWVkSW5GcmFtZSgp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGludCBsaW5lTnVtYmVyID0gMDsK
KyAgICBpbnQgY29sdW1uTnVtYmVyID0gMDsKKyAgICBTdHJpbmcgZXhjZXB0aW9uU291cmNlVVJM
OworICAgIGlmIChjb25zdCBTY3JpcHRDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IGNhbGxTdGFjay0+
Zmlyc3ROb25OYXRpdmVDYWxsRnJhbWUoKSkgeworICAgICAgICBsaW5lTnVtYmVyID0gY2FsbEZy
YW1lLT5saW5lTnVtYmVyKCk7CisgICAgICAgIGNvbHVtbk51bWJlciA9IGNhbGxGcmFtZS0+Y29s
dW1uTnVtYmVyKCk7CisgICAgICAgIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGNhbGxGcmFtZS0+c291
cmNlVVJMKCk7CisgICAgfQorCisgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHJldHJpZXZlRXJy
b3JNZXNzYWdlKCpleGVjLCB2bSwgZXhjZXB0aW9uLT52YWx1ZSgpLCBzY29wZSk7CisgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdsb2JhbE9iamVj
dC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQt
PnJlcG9ydEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwg
ZXhjZXB0aW9uU291cmNlVVJMLCBleGNlcHRpb24sIGNhbGxTdGFjay0+c2l6ZSgpID8gY2FsbFN0
YWNrIDogbnVsbHB0ciwgY2FjaGVkU2NyaXB0KTsKKworICAgIGlmIChleGNlcHRpb25EZXRhaWxz
KSB7CisgICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPm1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7Cisg
ICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgICAg
ICBleGNlcHRpb25EZXRhaWxzLT5jb2x1bW5OdW1iZXIgPSBjb2x1bW5OdW1iZXI7CisgICAgICAg
IGV4Y2VwdGlvbkRldGFpbHMtPnNvdXJjZVVSTCA9IGV4Y2VwdGlvblNvdXJjZVVSTDsKKyAgICB9
Cit9CisKK3ZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRSh2bSk7CisgICAgYXV0byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7CisgICAg
c2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKKyAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0
aW9uKTsKK30KKworc3RhdGljIEpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgRXhjZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nKiBtZXNzYWdlID0gbnVsbHB0cikK
K3sKKyAgICBpZiAoIWVjIHx8IGVjID09IEV4aXN0aW5nRXhjZXB0aW9uRXJyb3IpCisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgLy8gRklYTUU6IEhhbmRsZSBvdGhlciBXZWJJ
REwgZXhjZXB0aW9uIHR5cGVzLgorICAgIGlmIChlYyA9PSBUeXBlRXJyb3IpIHsKKyAgICAgICAg
aWYgKCFtZXNzYWdlIHx8IG1lc3NhZ2UtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBj
cmVhdGVUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiBjcmVhdGVUeXBlRXJyb3IoZXhl
YywgKm1lc3NhZ2UpOworICAgIH0KKworICAgIGlmIChlYyA9PSBSYW5nZUVycm9yKSB7CisgICAg
ICAgIGlmICghbWVzc2FnZSB8fCBtZXNzYWdlLT5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm4gY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkJhZCB2YWx1ZSIpKTsKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgKm1lc3NhZ2UpOworICAgIH0KKwor
ICAgIGlmIChlYyA9PSBTdGFja092ZXJmbG93RXJyb3IpCisgICAgICAgIHJldHVybiBjcmVhdGVT
dGFja092ZXJmbG93RXJyb3IoZXhlYyk7CisKKyAgICAvLyBGSVhNRTogQWxsIGNhbGxlcnMgdG8g
Y3JlYXRlRE9NRXhjZXB0aW9uIG5lZWQgdG8gcGFzcyBpbiB0aGUgY29ycmVjdCBnbG9iYWwgb2Jq
ZWN0LgorICAgIC8vIEZvciBub3csIHdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGUgbGV4aWNhbEds
b2JhbE9iamVjdC4gV2hpY2ggaXMgd3JvbmcgaW4gY2FzZXMgbGlrZSB0aGlzOgorICAgIC8vIGZy
YW1lc1swXS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KG51bGwsIG51bGwpOyAvLyB0aHJvd3MgYW4g
ZXhjZXB0aW9uIHdoaWNoIHNob3VsZCBoYXZlIHRoZSBzdWJmcmFtZSdzIHByb3RvdHlwZXMuCisg
ICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGRlcHJlY2F0ZWRHbG9iYWxPYmpl
Y3RGb3JQcm90b3R5cGUoZXhlYyk7CisKKyAgICBFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24gZGVz
Y3JpcHRpb24oZWMpOworCisgICAgQ1N0cmluZyBtZXNzYWdlQ1N0cmluZzsKKyAgICBpZiAobWVz
c2FnZSkKKyAgICAgICAgbWVzc2FnZUNTdHJpbmcgPSBtZXNzYWdlLT51dGY4KCk7CisgICAgaWYg
KG1lc3NhZ2UgJiYgIW1lc3NhZ2UtPmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJdCBpcyBzYWZl
IHRvIGRvIHRoaXMgYmVjYXVzZSB0aGUgY2hhciogY29udGVudHMgb2YgdGhlIENTdHJpbmcgYXJl
IGNvcGllZCBpbnRvIGEgbmV3IFdURjo6U3RyaW5nIGJlZm9yZSB0aGUgQ1N0cmluZyBpcyBkZXN0
cm95ZWQuCisgICAgICAgIGRlc2NyaXB0aW9uLmRlc2NyaXB0aW9uID0gbWVzc2FnZUNTdHJpbmcu
ZGF0YSgpOworICAgIH0KKworICAgIEpTVmFsdWUgZXJyb3JPYmplY3Q7CisgICAgc3dpdGNoIChk
ZXNjcmlwdGlvbi50eXBlKSB7CisgICAgY2FzZSBET01Db3JlRXhjZXB0aW9uVHlwZToKKyNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICBjYXNlIElEQkRhdGFiYXNlRXhjZXB0aW9uVHlw
ZToKKyNlbmRpZgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBET01Db3JlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGaWxlRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgRmlsZUV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1FMRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJy
b3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1FMRXhjZXB0aW9uOjpjcmVhdGUo
ZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTVkdFeGNlcHRpb25UeXBl
OgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTVkdFeGNl
cHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFhQ
YXRoRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgWFBhdGhFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKGVycm9yT2JqZWN0KTsKKyAgICBhZGRFcnJv
ckluZm8oZXhlYywgYXNPYmplY3QoZXJyb3JPYmplY3QpLCB0cnVlKTsKKyAgICByZXR1cm4gZXJy
b3JPYmplY3Q7Cit9CisKK0pTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgRXhjZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIHJldHVy
biBjcmVhdGVET01FeGNlcHRpb24oZXhlYywgZWMsICZtZXNzYWdlKTsKK30KKworSlNWYWx1ZSBj
cmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uJiYgZXhjZXB0aW9u
KQoreworICAgIHJldHVybiBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBleGNlcHRpb24uY29k
ZSgpLCBleGNlcHRpb24ucmVsZWFzZU1lc3NhZ2UoKSk7Cit9CisKK3ZvaWQgcHJvcGFnYXRlRXhj
ZXB0aW9uU2xvd1BhdGgoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRo
cm93U2NvcGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK3sKKyAgICBBU1NFUlQoIXRocm93U2Nv
cGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgdGhyb3dTY29wZSwg
Y3JlYXRlRE9NRXhjZXB0aW9uKHN0YXRlLCBXVEZNb3ZlKGV4Y2VwdGlvbikpKTsKK30KKworYm9v
bCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBhdXRvJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gSlNDOjphc09iamVj
dCh2YWx1ZSk7CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGU7
CisgICAgSlNWYWx1ZSBhcHBseU1ldGhvZCA9IG9iamVjdC0+Z2V0TWV0aG9kKCZzdGF0ZSwgY2Fs
bERhdGEsIGNhbGxUeXBlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgQVNDSUlM
aXRlcmFsKCJTeW1ib2wuaXRlcmF0b3IgcHJvcGVydHkgc2hvdWxkIGJlIGNhbGxhYmxlIikpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKKworICAgIHJldHVybiAhYXBw
bHlNZXRob2QuaXNVbmRlZmluZWQoKTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3Vs
ZEFsbG93QWNjZXNzVG9GcmFtZShFeGVjU3RhdGUmIHN0YXRlLCBGcmFtZSYgZnJhbWUsIFN0cmlu
ZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vz
c1RvRnJhbWUoJnN0YXRlLCAmZnJhbWUsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIG1lc3NhZ2UgPSBmcmFtZS5kb2N1bWVudCgpLT5kb21XaW5k
b3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZzdGF0
ZSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3Vs
ZEFsbG93QWNjZXNzVG9ET01XaW5kb3coRXhlY1N0YXRlJiBzdGF0ZSwgRE9NV2luZG93JiBnbG9i
YWxPYmplY3QsIFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoQmluZGluZ1NlY3VyaXR5Ojpz
aG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCZzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBEb05vdFJl
cG9ydFNlY3VyaXR5RXJyb3IpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBtZXNzYWdlID0g
Z2xvYmFsT2JqZWN0LmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRv
dygmc3RhdGUpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgcHJpbnRFcnJvck1lc3Nh
Z2VGb3JGcmFtZShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBp
ZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgZnJhbWUtPmRvY3VtZW50KCktPmRvbVdp
bmRvdygpLT5wcmludEVycm9yTWVzc2FnZShtZXNzYWdlKTsKK30KKworU3RydWN0dXJlKiBnZXRD
YWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8pCit7CisgICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVy
ZXMgPSBnbG9iYWxPYmplY3Quc3RydWN0dXJlcyhOb0xvY2tpbmdOZWNlc3NhcnkpOworICAgIHJl
dHVybiBzdHJ1Y3R1cmVzLmdldChjbGFzc0luZm8pLmdldCgpOworfQorCitTdHJ1Y3R1cmUqIGNh
Y2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKK3sKKyAgICBhdXRvIGxv
Y2tlciA9IGxvY2tEdXJpbmdNYXJraW5nKGdsb2JhbE9iamVjdC52bSgpLmhlYXAsIGdsb2JhbE9i
amVjdC5nY0xvY2soKSk7CisgICAgSlNET01TdHJ1Y3R1cmVNYXAmIHN0cnVjdHVyZXMgPSBnbG9i
YWxPYmplY3Quc3RydWN0dXJlcyhsb2NrZXIpOworICAgIEFTU0VSVCghc3RydWN0dXJlcy5jb250
YWlucyhjbGFzc0luZm8pKTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5zZXQoY2xhc3NJbmZvLCBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPihnbG9iYWxPYmplY3Qudm0oKSwgJmdsb2JhbE9iamVjdCwg
c3RydWN0dXJlKSkuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworfQorCitzdGF0aWMgY29uc3QgaW50
MzJfdCBrTWF4SW50MzIgPSAweDdmZmZmZmZmOworc3RhdGljIGNvbnN0IGludDMyX3Qga01pbklu
dDMyID0gLWtNYXhJbnQzMiAtIDE7CitzdGF0aWMgY29uc3QgdWludDMyX3Qga01heFVJbnQzMiA9
IDB4ZmZmZmZmZmZVOworc3RhdGljIGNvbnN0IGludDY0X3Qga0pTTWF4SW50ZWdlciA9IDB4MjAw
MDAwMDAwMDAwMDBMTCAtIDE7IC8vIDJeNTMgLSAxLCBsYXJnZXN0IGludGVnZXIgZXhhY3RseSBy
ZXByZXNlbnRhYmxlIGluIEVDTUFTY3JpcHQuCisKK3N0YXRpYyBTdHJpbmcgcmFuZ2VFcnJvclN0
cmluZyhkb3VibGUgdmFsdWUsIGRvdWJsZSBtaW4sIGRvdWJsZSBtYXgpCit7CisgICAgcmV0dXJu
IG1ha2VTdHJpbmcoIlZhbHVlICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KHZh
bHVlKSwgIiBpcyBvdXRzaWRlIHRoZSByYW5nZSBbIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VD
TUFTY3JpcHQobWluKSwgIiwgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQobWF4
KSwgIl0iKTsKK30KKworc3RhdGljIGRvdWJsZSBlbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0
ZSwgZG91YmxlIHgsIGRvdWJsZSBtaW5pbXVtLCBkb3VibGUgbWF4aW11bSkKK3sKKyAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkpIHsKKyAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVt
LCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB4ID0gdHJ1bmMoeCk7
CisgICAgaWYgKHggPCBtaW5pbXVtIHx8IHggPiBtYXhpbXVtKSB7CisgICAgICAgIHRocm93VHlw
ZUVycm9yKCZzdGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11
bSkpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHg7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IEludFR5cGVMaW1pdHMgeworfTsKKwordGVtcGxhdGUg
PD4KK3N0cnVjdCBJbnRUeXBlTGltaXRzPGludDhfdD4geworICAgIHN0YXRpYyBjb25zdCBpbnQ4
X3QgbWluVmFsdWUgPSAtMTI4OworICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgbWF4VmFsdWUgPSAx
Mjc7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAy
XjgKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50OF90PiB7Cisg
ICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgbWF4VmFsdWUgPSAyNTU7CisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gMjU2OyAvLyAyXjgKK307CisKK3RlbXBsYXRlIDw+
CitzdHJ1Y3QgSW50VHlwZUxpbWl0czxpbnQxNl90PiB7CisgICAgc3RhdGljIGNvbnN0IHNob3J0
IG1pblZhbHVlID0gLTMyNzY4OworICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtYXhWYWx1ZSA9IDMy
NzY3OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAv
LyAyXjE2Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVMaW1pdHM8dWludDE2X3Q+
IHsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbWF4VmFsdWUgPSA2NTUzNTsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgor
fTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVySW50
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX3NpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUs
ICJTaG91bGQgb25seSBiZSB1c2VkIGZvciBzaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsKKworICAg
IHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFpdDsKKyAgICAvLyBGYXN0IHBhdGgg
aWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgaW4gdGhlIHJp
Z2h0IHJhbmdlLgorICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpIHsKKyAgICAgICAgaW50MzJfdCBk
ID0gdmFsdWUuYXNJbnQzMigpOworICAgICAgICBpZiAoZCA+PSBMaW1pdHNUcmFpdDo6bWluVmFs
dWUgJiYgZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgICAg
ICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6CisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1cm4gZCA8IExpbWl0c1RyYWl0Ojpt
aW5WYWx1ZSA/IExpbWl0c1RyYWl0OjptaW5WYWx1ZSA6IExpbWl0c1RyYWl0OjptYXhWYWx1ZTsK
KyAgICAgICAgfQorICAgICAgICBkICU9IExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlczsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQgPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyBk
IC0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzIDogZCk7CisgICAgfQorCisgICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIDApOworCisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAg
cmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgTGltaXRzVHJhaXQ6Om1pblZhbHVlLCBMaW1p
dHNUcmFpdDo6bWF4VmFsdWUpOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxU
Pih4KTsKKyAgICB9CisKKyAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpIHx8
ICF4KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHggPSB4IDwgMCA/IC1mbG9vcihmYWJzKHgp
KSA6IGZsb29yKGZhYnMoeCkpOworICAgIHggPSBmbW9kKHgsIExpbWl0c1RyYWl0OjpudW1iZXJP
ZlZhbHVlcyk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oeCA+IExpbWl0c1RyYWl0Ojpt
YXhWYWx1ZSA/IHggLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiB4KTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIFQgdG9TbWFsbGVyVUludChFeGVjU3Rh
dGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24g
Y29uZmlndXJhdGlvbikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c191bnNpZ25lZDxUPjo6dmFsdWUgJiYgc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUsICJTaG91
bGQgb25seSBiZSB1c2VkIGZvciB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOworCisgICAgdHlw
ZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OworICAgIC8vIEZhc3QgcGF0aCBpZiB0
aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdo
dCByYW5nZS4KKyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkgeworICAgICAgICB1aW50MzJfdCBk
ID0gdmFsdWUuYXNVSW50MzIoKTsKKyAgICAgICAgaWYgKGQgPD0gTGltaXRzVHJhaXQ6Om1heFZh
bHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOworICAgICAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsK
KyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5n
ZToKKyAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpDbGFtcDoKKyAgICAgICAgICAgIHJldHVybiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisKKyAgICBzd2l0Y2ggKGNvbmZpZ3Vy
YXRpb24pIHsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFs
OgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlOgorICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAw
LCBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xh
bXBUbzxUPih4KTsKKyAgICB9CisKKyAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5m
KHgpIHx8ICF4KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHggPSB4IDwgMCA/IC1mbG9vcihm
YWJzKHgpKSA6IGZsb29yKGZhYnMoeCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihmbW9k
KHgsIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcykpOworfQorCitpbnQ4X3QgdG9JbnQ4RW5m
b3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisKK3VpbnQ4X3QgdG9VSW50OEVuZm9y
Y2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0
dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lv
bkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9CisKK2ludDhfdCB0b0ludDhDbGFtcChK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21h
bGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpDbGFtcCk7Cit9CisKK3VpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90
PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwor
fQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWJ5dGUKK2ludDhfdCB0b0lu
dDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFs
bGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtb2N0
ZXQKK3VpbnQ4X3QgdG9VSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQorewor
ICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQorCitpbnQxNl90IHRvSW50MTZFbmZv
cmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
dG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOworfQorCit1aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VS
YW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1Nt
YWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKK30KKworaW50MTZfdCB0b0ludDE2Q2xhbXAoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGlu
dDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFt
cCk7Cit9CisKK3VpbnQxNl90IHRvVUludDE2Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKworLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1zaG9ydAoraW50MTZfdCB0b0ludDE2KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxp
bnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1z
aG9ydAordWludDE2X3QgdG9VSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6Ly93d3cu
dzMub3JnL1RSL1dlYklETC8jZXMtbG9uZworaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAo
dmFsdWUuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAg
ZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIGtNaW5JbnQz
Miwga01heEludDMyKTsKK30KKworaW50MzJfdCB0b0ludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNJbnQzMigpOworCisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigm
c3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88aW50MzJfdD4o
eCk7Cit9CisKK3VpbnQzMl90IHRvVUludDMyQ2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZh
bHVlLmFzVUludDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7
CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzx1aW50MzJfdD4oeCk7Cit9
CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9uZwordWlu
dDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQorICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4g
ZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCAwLCBrTWF4VUludDMyKTsKK30KKworaW50NjRfdCB0b0lu
dDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3JjZVJhbmdl
KHN0YXRlLCB4LCAta0pTTWF4SW50ZWdlciwga0pTTWF4SW50ZWdlcik7Cit9CisKK3VpbnQ2NF90
IHRvVUludDY0RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4gZW5mb3Jj
ZVJhbmdlKHN0YXRlLCB4LCAwLCBrSlNNYXhJbnRlZ2VyKTsKK30KKworaW50NjRfdCB0b0ludDY0
Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGRvdWJs
ZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25hbih4KSA/
IDAgOiBzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJs
ZT4oeCwgLWtKU01heEludGVnZXIpLCBrSlNNYXhJbnRlZ2VyKSk7Cit9CisKK3VpbnQ2NF90IHRv
VUludDY0Q2xhbXAoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAg
IGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25h
bih4KSA/IDAgOiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6Om1h
eDxkb3VibGU+KHgsIDApLCBrSlNNYXhJbnRlZ2VyKSk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMu
b3JnL1RSL1dlYklETC8jZXMtbG9uZy1sb25nCitpbnQ2NF90IHRvSW50NjQoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7CisKKyAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBm
aW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOworICAg
IGRvdWJsZVRvSW50ZWdlcih4LCBuKTsKKyAgICByZXR1cm4gbjsKK30KKworLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nLWxvbmcKK3VpbnQ2NF90IHRvVUlu
dDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2
YWx1ZS50b051bWJlcigmc3RhdGUpOworCisgICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5
IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KKyAgICB1bnNpZ25lZCBs
b25nIGxvbmcgbjsKKyAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7CisgICAgcmV0dXJuIG47Cit9
CisKK2NsYXNzIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgeworcHVibGljOgorICAgIEdl
dENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICBTdGFja1Zpc2l0
b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSkgeworICAgICAgICAgICAgbV9o
YXNTa2lwcGVkRmlyc3RGcmFtZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gU3RhY2tWaXNp
dG9yOjpDb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRvKiBjb2RlQmxvY2sg
PSB2aXNpdG9yLT5jb2RlQmxvY2soKSkKKyAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0gY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NF
UlQodmlzaXRvci0+Y2FsbGVlKCkpOworICAgICAgICAgICAgLy8gRklYTUU6IENhbGxlZSBpcyBu
b3QgYW4gb2JqZWN0IGlmIHRoZSBjYWxsZXIgaXMgV2ViIEFzc2VtYmx5LgorICAgICAgICAgICAg
Ly8gRmlndXJlIG91dCB3aGF0IHRvIGRvIGhlcmUuIFdlIGNhbiBwcm9iYWJseSBnZXQgdGhlIGds
b2JhbCBvYmplY3QKKyAgICAgICAgICAgIC8vIGZyb20gdGhlIHRvcC1tb3N0IFdhc20gSW5zdGFu
Y2UuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MjEKKyAgICAg
ICAgICAgIGlmICh2aXNpdG9yLT5jYWxsZWUoKS0+aXNPYmplY3QoKSkKKyAgICAgICAgICAgICAg
ICBtX2dsb2JhbE9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KHZpc2l0b3ItPmNhbGxlZSgpKS0+
Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6
RG9uZTsKKyAgICB9CisKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9nbG9iYWxPYmplY3Q7IH0KKworcHJpdmF0ZToKKyAgICBtdXRhYmxlIGJvb2wg
bV9oYXNTa2lwcGVkRmlyc3RGcmFtZSB7IGZhbHNlIH07CisgICAgbXV0YWJsZSBKU0dsb2JhbE9i
amVjdCogbV9nbG9iYWxPYmplY3QgeyBudWxscHRyIH07Cit9OworCitET01XaW5kb3cmIGNhbGxl
ckRPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0
RnVuY3RvciBpdGVyOworICAgIGV4ZWMtPml0ZXJhdGUoaXRlcik7CisgICAgcmV0dXJuIGl0ZXIu
Z2xvYmFsT2JqZWN0KCkgPyBhc0pTRE9NV2luZG93KGl0ZXIuZ2xvYmFsT2JqZWN0KCkpLT53cmFw
cGVkKCkgOiBmaXJzdERPTVdpbmRvdyhleGVjKTsKK30KKworRE9NV2luZG93JiBhY3RpdmVET01X
aW5kb3coRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKTsKK30KKworRE9NV2luZG93JiBmaXJz
dERPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGFzSlNET01XaW5kb3co
ZXhlYy0+dm1FbnRyeUdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgY2FuQWNjZXNzRG9jdW1lbnQoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBEb2N1bWVu
dCogdGFyZ2V0RG9jdW1lbnQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlv
bikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIXRhcmdldERvY3VtZW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBET01XaW5kb3cmIGFjdGl2ZSA9IGFjdGl2ZURPTVdpbmRvdyhz
dGF0ZSk7CisKKyAgICBpZiAoYWN0aXZlLmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkuY2Fu
QWNjZXNzKHRhcmdldERvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBzd2l0Y2ggKHJlcG9ydGluZ09wdGlvbikgeworICAgIGNhc2UgVGhyb3dT
ZWN1cml0eUVycm9yOgorICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKnN0YXRlLCBzY29wZSwg
dGFyZ2V0RG9jdW1lbnQtPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2Fn
ZShhY3RpdmUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMb2dTZWN1cml0eUVycm9yOgor
ICAgICAgICBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKHRhcmdldERvY3VtZW50LT5mcmFtZSgp
LCB0YXJnZXREb2N1bWVudC0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNz
YWdlKGFjdGl2ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERvTm90UmVwb3J0U2VjdXJp
dHlFcnJvcjoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsIERPTVdpbmRvdyYgdGFyZ2V0LCBTZWN1cml0eVJlcG9ydGluZ09w
dGlvbiByZXBvcnRpbmdPcHRpb24pCit7CisgICAgcmV0dXJuIGNhbkFjY2Vzc0RvY3VtZW50KHN0
YXRlLCB0YXJnZXQuZG9jdW1lbnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKK30KKworYm9vbCBCaW5k
aW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUsIEZyYW1lKiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlv
bikKK3sKKyAgICByZXR1cm4gdGFyZ2V0ICYmIGNhbkFjY2Vzc0RvY3VtZW50KHN0YXRlLCB0YXJn
ZXQtPmRvY3VtZW50KCksIHJlcG9ydGluZ09wdGlvbik7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIE5vZGUq
IHRhcmdldCkKK3sKKyAgICByZXR1cm4gIXRhcmdldCB8fCBjYW5BY2Nlc3NEb2N1bWVudCgmc3Rh
dGUsICZ0YXJnZXQtPmRvY3VtZW50KCksIExvZ1NlY3VyaXR5RXJyb3IpOworfQorICAgIAorc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIHRocm93VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7Cisg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgZXJyb3JNZXNzYWdlKTsK
K30KKworc3RhdGljIHZvaWQgYXBwZW5kQXJndW1lbnRNdXN0QmUoU3RyaW5nQnVpbGRlciYgYnVp
bGRlciwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7Cisg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJBcmd1bWVudCAiKTsKKyAgICBidWlsZGVyLmFwcGVu
ZE51bWJlcihhcmd1bWVudEluZGV4ICsgMSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIg
KCciKTsKKyAgICBidWlsZGVyLmFwcGVuZChhcmd1bWVudE5hbWUpOworICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiJykgdG8gIik7CisgICAgaWYgKCFmdW5jdGlvbk5hbWUpIHsKKyAgICAgICAg
YnVpbGRlci5hcHBlbmRMaXRlcmFsKCJ0aGUgIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGlu
dGVyZmFjZU5hbWUpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBjb25zdHJ1Y3Rv
ciIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGludGVyZmFjZU5hbWUp
OworICAgICAgICBidWlsZGVyLmFwcGVuZCgnLicpOworICAgICAgICBidWlsZGVyLmFwcGVuZChm
dW5jdGlvbk5hbWUpOworICAgIH0KKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBtdXN0IGJl
ICIpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHJlcG9ydERlcHJlY2F0ZWRHZXR0ZXJFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291
cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRl
bXB0IHRvIGFjY2VzcyBwcm9wZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwg
aW50ZXJmYWNlTmFtZSwgIiBvYmplY3QuIikpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Cit9CisgICAgCit2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0
IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgYXV0byYgY29udGV4dCA9ICpqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihzdGF0ZS5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291
cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgbWFrZVN0cmluZygiRGVwcmVjYXRlZCBhdHRl
bXB0IHRvIHNldCBwcm9wZXJ0eSAnIiwgYXR0cmlidXRlTmFtZSwgIicgb24gYSBub24tIiwgaW50
ZXJmYWNlTmFtZSwgIiBvYmplY3QuIikpOworfQorCit2b2lkIHRocm93Tm90U3VwcG9ydGVkRXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAg
IEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSKSk7Cit9
CisKK3ZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7
CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZz
dGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIsICZtZXNzYWdlU3RyaW5nKSk7Cit9CisKK3ZvaWQgdGhy
b3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7CisgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7CisgICAgdGhyb3dF
eGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5WQUxJ
RF9TVEFURV9FUlIsICZtZXNzYWdlU3RyaW5nKSk7Cit9CisKK3ZvaWQgdGhyb3dTZWN1cml0eUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAg
IHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUs
IFNFQ1VSSVRZX0VSUiwgbWVzc2FnZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93
QXJndW1lbnRNdXN0QmVFbnVtRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVu
dE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFZhbHVlcykKK3sKKyAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CisgICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJ
bmRleCwgYXJndW1lbnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7
CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJvbmUgb2Y6ICIpOworICAgIGJ1aWxkZXIuYXBw
ZW5kKGV4cGVjdGVkVmFsdWVzKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUs
IHNjb3BlLCBidWlsZGVyLnRvU3RyaW5nKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRo
cm93QXJndW1lbnRNdXN0QmVGdW5jdGlvbkVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciog
YXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGFwcGVuZEFyZ3Vt
ZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgaW50ZXJmYWNl
TmFtZSwgZnVuY3Rpb25OYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImEgZnVuY3Rp
b24iKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVy
LnRvU3RyaW5nKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93QXJndW1lbnRUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNp
Z25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIq
IGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBj
aGFyKiBleHBlY3RlZFR5cGUpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGFw
cGVuZEFyZ3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwg
ZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiYW4gaW5zdGFuY2Ugb2YgIik7CisgICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRU
eXBlKTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVy
LnRvU3RyaW5nKCkpOworfQorCit2b2lkIHRocm93QXJyYXlFbGVtZW50VHlwZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICB0aHJvd1R5
cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiSW52YWxpZCBBcnJheSBlbGVtZW50
IHR5cGUiKSk7Cit9CisKK3ZvaWQgdGhyb3dBdHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUp
Cit7CisgICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwg
aW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGF0dHJpYnV0ZSBtdXN0IGJlIGFu
IGluc3RhbmNlIG9mICIsIGV4cGVjdGVkVHlwZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVl
IHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFyKiBk
aWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQoreworICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIk1lbWJlciAiKTsKKyAg
ICBidWlsZGVyLmFwcGVuZChkaWN0aW9uYXJ5TmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmQoJy4n
KTsKKyAgICBidWlsZGVyLmFwcGVuZChtZW1iZXJOYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIiBpcyByZXF1aXJlZCBhbmQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiKTsKKyAgICBi
dWlsZGVyLmFwcGVuZChleHBlY3RlZFR5cGUpOworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpT
VmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSkKK3sKKyAgICByZXR1cm4gdGhyb3dWTUVycm9yKCZzdGF0ZSwg
c2NvcGUsIGNyZWF0ZVJlZmVyZW5jZUVycm9yKCZzdGF0ZSwgbWFrZVN0cmluZyhpbnRlcmZhY2VO
YW1lLCAiIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgZXhlY3V0aW9uIGNvbnRleHQgaXMgdW5hdmFp
bGFibGUiKSkpOworfQorCit2b2lkIHRocm93U2VxdWVuY2VUeXBlRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIHRocm93VHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJWYWx1ZSBpcyBub3QgYSBzZXF1ZW5jZSIpKTsK
K30KKwordm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiVGhlIHByb3ZpZGVkIHZhbHVlIGlzIG5vbi1maW5pdGUiKSk7Cit9CisK
K1N0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQoreworICAgIHJldHVybiBtYWtlU3RyaW5n
KCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRyaWJ1dGVOYW1lLCAiIGdldHRlciBjYW4g
b25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKK30KKworSlND
OjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3Io
JnN0YXRlLCBzY29wZSwgbWFrZUdldHRlclR5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwg
YXR0cmlidXRlTmFtZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VX
aXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKK3sKKyAgICByZXR1cm4gY3Jl
YXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZUdldHRlclR5cGVFcnJv
ck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgYXR0cmlidXRlTmFtZSkpOworfQorCitib29sIHRocm93
U2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFt
ZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAi
LCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgc2V0dGVyIGNhbiBvbmx5IGJl
IHVzZWQgb24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK1N0cmluZyBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIHJldHVybiBtYWtl
U3RyaW5nKCJDYW4gb25seSBjYWxsICIsIGludGVyZmFjZU5hbWUsICcuJywgZnVuY3Rpb25OYW1l
LCAiIG9uIGluc3RhbmNlcyBvZiAiLCBpbnRlcmZhY2VOYW1lKTsKK30KKworRW5jb2RlZEpTVmFs
dWUgdGhyb3dUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lKQoreworICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VU
aGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpKTsKK30KKwor
SlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBlRXJyb3IoRGVmZXJy
ZWRQcm9taXNlJiBwcm9taXNlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBtZXRob2ROYW1lKQoreworICAgIHByb21pc2UucmVqZWN0KFR5cGVFcnJvciwgbWFrZVRoaXNU
eXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVl
IHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCit7CisgICAg
cmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3Ioc3RhdGUsIG1ha2VUaGlz
VHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBtZXRob2ROYW1lKSk7Cit9CisKK3ZvaWQg
Y2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQorewor
ICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7CisgICAgSlNDOjpDYWxsVHlwZSBjYWxsVHlwZSA9
IEpTQzo6Z2V0Q2FsbERhdGEoJmZ1bmN0aW9uLCBjYWxsRGF0YSk7CisgICAgQVNTRVJUKGNhbGxU
eXBlICE9IENhbGxUeXBlOjpOb25lKTsKKworICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIg
YXJndW1lbnRzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGF0ZS5hcmd1bWVudENv
dW50KCk7ICsraSkKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChzdGF0ZS51bmNoZWNrZWRBcmd1
bWVudChpKSk7CisgICAgSlNDOjpjYWxsKCZzdGF0ZSwgJmZ1bmN0aW9uLCBjYWxsVHlwZSwgY2Fs
bERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVudHMpOworfQorCit2b2lkIERPTUNvbnN0cnVjdG9y
SlNCdWlsdGluT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQzo6SlNDZWxsKiBjZWxsLCBKU0M6OlNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RE9N
Q29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX2lu
aXRpYWxpemVGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGxUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiQ29uc3RydWN0b3Ig
cmVxdWlyZXMgJ25ldycgb3BlcmF0b3IiKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSk7Cit9CisKK0NhbGxUeXBlIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpnZXRDYWxsRGF0
YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEubmF0aXZlLmZ1
bmN0aW9uID0gY2FsbFRocm93VHlwZUVycm9yOworICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsK
K30KKwordm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsK
KyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0
YXRlLCBTWU5UQVhfRVJSKSk7Cit9CisKK3ZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgQVNTRVJUKCFz
Y29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3Jl
YXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgREFUQV9DTE9ORV9FUlIpKTsKK30KKwordm9pZCB0aHJv
d0luZGV4U2l6ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTkRFWF9TSVpF
X0VSUikpOworfQorCit2b2lkIHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhj
ZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4
Y2VwdGlvbigmc3RhdGUsIFRZUEVfTUlTTUFUQ0hfRVJSKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCww
ICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3Rvci5jcHAJKHJldmlz
aW9uIDIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw5NTkgKzIwLDE3IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3IuaCIKIAotI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgotI2luY2x1ZGUgIkNv
bW1vblZNLmgiCi0jaW5jbHVkZSAiRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9u
LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uSGVhZGVycy5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbklu
dGVyZmFjZXMuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlv
bXMuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIkpTRE9N
Q29udmVydC5oIgotI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5oIgotI2luY2x1ZGUgIkpTRE9NV2lu
ZG93Q3VzdG9tLmgiCi0jaW5jbHVkZSAiSlNFeGNlcHRpb25CYXNlLmgiCi0jaW5jbHVkZSAiU2Vj
dXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlIDxieXRlY29kZS9Db2RlQmxvY2suaD4KLSNpbmNsdWRl
IDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL1Njcmlw
dENhbGxTdGFja0ZhY3RvcnkuaD4KLSNpbmNsdWRlIDxydW50aW1lL0RhdGVJbnN0YW5jZS5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9ySGFuZGxp
bmdTY29wZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5oPgotI2luY2x1ZGUg
PHJ1bnRpbWUvRXhjZXB0aW9uLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJz
Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+
Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFy
YWN0ZXJOYW1lcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0pTQ0lubGluZXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKLXVzaW5n
IG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1RBVElDX0FT
U0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yT2JqZWN0KTsKIFNU
QVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3RvcldpdGhE
b2N1bWVudCk7Ci0KLXZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJiBw
cm9wZXJ0eU5hbWUpCi17Ci0gICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0
eU5hbWUpOwotfQotCi1KU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgaWYgKHMuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBqc051bGwoKTsKLSAgICByZXR1cm4ganNPd25lZFN0cmluZyhleGVjLCBzKTsKLX0KLQotSlNW
YWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBz
KQotewotICAgIGlmIChzLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcyk7Ci19Ci0KLUpTVmFsdWUganNT
dHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKLXsKLSAgICByZXR1cm4ganNT
dHJpbmdXaXRoQ2FjaGUoZXhlYywgdXJsLnN0cmluZygpKTsKLX0KLQotSlNWYWx1ZSBqc1N0cmlu
Z09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCi17Ci0gICAgaWYg
KHVybC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJu
IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgU3RyaW5nIHN0cmluZ1RvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlLCBTdHJpbmcmJiBzdHJpbmcpCi17Ci0gICAgaWYgKCFzdHJpbmcuY29udGFp
bnNPbmx5TGF0aW4xKCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7
Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0cmluZzsKLX0KLQot
U3RyaW5nIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllcikKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIFN0cmluZyBzdHJpbmcg
PSBpZGVudGlmaWVyLnN0cmluZygpOwotICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3Rh
dGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOwotfQotCi1TdHJpbmcgdmFsdWVUb0J5dGVTdHJp
bmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0
ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAg
IFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICByZXR1cm4gc3RyaW5nVG9CeXRlU3RyaW5n
KHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotc3RhdGljIGlubGluZSBib29s
IGhhc1VucGFpcmVkU3Vycm9nYXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQotewotICAgIC8vIEZhc3Qg
cGF0aCBmb3IgOC1iaXQgc3RyaW5nczsgdGhleSBjYW4ndCBoYXZlIGFueSBzdXJyb2dhdGVzLgot
ICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3Ig
KGF1dG8gY29kZVBvaW50IDogc3RyaW5nLmNvZGVQb2ludHMoKSkgewotICAgICAgICBpZiAoVV9J
U19TVVJST0dBVEUoY29kZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvVVNW
U3RyaW5nKFN0cmluZyYmIHN0cmluZykKLXsKLSAgICAvLyBGYXN0IHBhdGggZm9yIHRoZSBjYXNl
IHdoZXJlIHRoZXJlIGFyZSBubyB1bnBhaXJlZCBzdXJyb2dhdGVzLgotICAgIGlmICghaGFzVW5w
YWlyZWRTdXJyb2dhdGUoc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIHN0cmluZzsKLQotICAgIC8v
IFNsb3cgcGF0aDogaHR0cDovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tb2J0YWluLXVu
aWNvZGUKLSAgICAvLyBSZXBsYWNlcyB1bnBhaXJlZCBzdXJyb2dhdGVzIHdpdGggdGhlIHJlcGxh
Y2VtZW50IGNoYXJhY3Rlci4KLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICByZXN1bHQu
cmVzZXJ2ZUNhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nVmlldyB2aWV3IHsg
c3RyaW5nIH07Ci0gICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHZpZXcuY29kZVBvaW50cygpKSB7
Ci0gICAgICAgIGlmIChVX0lTX1NVUlJPR0FURShjb2RlUG9pbnQpKQotICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChyZXBsYWNlbWVudENoYXJhY3Rlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoY29kZVBvaW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdC50
b1N0cmluZygpOwotfQotCi1TdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYs
IGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCi17Ci0gICAgU3RyaW5nIHN0cmluZyA9IGlk
ZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUo
c3RyaW5nKSk7Ci19Ci0KLVN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nID0gdmFs
dWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwotCi0gICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7Ci19
Ci0KLUpTVmFsdWUganNEYXRlKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlKQotewotICAg
IHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOwotfQotCi1kb3VibGUgdmFsdWVU
b0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5p
c051bWJlcigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNOdW1iZXIoKTsKLSAgICBpZiAoIXZh
bHVlLmluaGVyaXRzKGV4ZWMtPnZtKCksIERhdGVJbnN0YW5jZTo6aW5mbygpKSkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHZhbHVlLnRvT2JqZWN0KGV4ZWMpKS0+aW50
ZXJuYWxOdW1iZXIoKTsKLX0KLQotdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKLXsK
LSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRU
aHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpzRHluYW1p
Y0Rvd25jYXN0PEpTQzo6RXhjZXB0aW9uKj4odm0sIGV4Y2VwdGlvblZhbHVlKTsKLSAgICBpZiAo
IWV4Y2VwdGlvbikgewotICAgICAgICBleGNlcHRpb24gPSB2bS5sYXN0RXhjZXB0aW9uKCk7Ci0g
ICAgICAgIGlmICghZXhjZXB0aW9uKQotICAgICAgICAgICAgZXhjZXB0aW9uID0gSlNDOjpFeGNl
cHRpb246OmNyZWF0ZShleGVjLT52bSgpLCBleGNlcHRpb25WYWx1ZSwgSlNDOjpFeGNlcHRpb246
OkRvTm90Q2FwdHVyZVN0YWNrKTsKLSAgICB9Ci0KLSAgICByZXBvcnRFeGNlcHRpb24oZXhlYywg
ZXhjZXB0aW9uLCBjYWNoZWRTY3JpcHQpOwotfQotCi1TdHJpbmcgcmV0cmlldmVFcnJvck1lc3Nh
Z2UoRXhlY1N0YXRlJiBzdGF0ZSwgVk0mIHZtLCBKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2F0Y2hTY29w
ZSYgY2F0Y2hTY29wZSkKLXsKLSAgICBpZiAoYXV0byogZXhjZXB0aW9uQmFzZSA9IHRvRXhjZXB0
aW9uQmFzZSh2bSwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkJhc2UtPnRv
U3RyaW5nKCk7Ci0KLSAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE1MDg3PiBX
ZWIgSW5zcGVjdG9yOiBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24gc2hvdWxkIG5vdCBldmFsdWF0
ZSBKYXZhU2NyaXB0IGhhbmRsaW5nIGV4Y2VwdGlvbnMKLSAgICAvLyBJZiB0aGlzIGlzIGEgY3Vz
dG9tIGV4Y2VwdGlvbiBvYmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5IGFuZCBnZXQg
YSBuaWNlIHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4KLSAgICBTdHJp
bmcgZXJyb3JNZXNzYWdlOwotICAgIGlmIChhdXRvKiBlcnJvciA9IGpzRHluYW1pY0Rvd25jYXN0
PEVycm9ySW5zdGFuY2UqPih2bSwgZXhjZXB0aW9uKSkKLSAgICAgICAgZXJyb3JNZXNzYWdlID0g
ZXJyb3ItPnNhbml0aXplZFRvU3RyaW5nKCZzdGF0ZSk7Ci0gICAgZWxzZQotICAgICAgICBlcnJv
ck1lc3NhZ2UgPSBleGNlcHRpb24udG9XVEZTdHJpbmcoJnN0YXRlKTsKLQotICAgIC8vIFdlIG5l
ZWQgdG8gY2xlYXIgYW55IG5ldyBleGNlcHRpb24gdGhhdCBtYXkgYmUgdGhyb3duIGluIHRoZSB0
b1N0cmluZygpIGNhbGwgYWJvdmUuCi0gICAgLy8gcmVwb3J0RXhjZXB0aW9uKCkgaXMgbm90IHN1
cHBvc2VkIHRvIGJlIG1ha2luZyBuZXcgZXhjZXB0aW9ucy4KLSAgICBjYXRjaFNjb3BlLmNsZWFy
RXhjZXB0aW9uKCk7Ci0gICAgdm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7Ci0gICAgcmV0dXJuIGVy
cm9yTWVzc2FnZTsKLX0KLQotdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCwgRXhj
ZXB0aW9uRGV0YWlscyogZXhjZXB0aW9uRGV0YWlscykKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLQotICAgIFJF
TEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwotICAgIGlm
IChpc1Rlcm1pbmF0ZWRFeGVjdXRpb25FeGNlcHRpb24odm0sIGV4Y2VwdGlvbikpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkp
OwotCi0gICAgUmVmUHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENh
bGxTdGFja0Zyb21FeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBTY3JpcHRDYWxsU3RhY2s6Om1h
eENhbGxTdGFja1NpemVUb0NhcHR1cmUpKTsKLSAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwot
ICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOwotCi0gICAgSlNET01HbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSk7Ci0gICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cgPSBqc0R5bmFtaWNEb3du
Y2FzdDxKU0RPTVdpbmRvdyo+KHZtLCBnbG9iYWxPYmplY3QpKSB7Ci0gICAgICAgIGlmICghd2lu
ZG93LT53cmFwcGVkKCkuaXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaW50IGxpbmVOdW1iZXIgPSAwOwotICAgIGludCBjb2x1
bW5OdW1iZXIgPSAwOwotICAgIFN0cmluZyBleGNlcHRpb25Tb3VyY2VVUkw7Ci0gICAgaWYgKGNv
bnN0IFNjcmlwdENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbFN0YWNrLT5maXJzdE5vbk5hdGl2
ZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgIGxpbmVOdW1iZXIgPSBjYWxsRnJhbWUtPmxpbmVOdW1i
ZXIoKTsKLSAgICAgICAgY29sdW1uTnVtYmVyID0gY2FsbEZyYW1lLT5jb2x1bW5OdW1iZXIoKTsK
LSAgICAgICAgZXhjZXB0aW9uU291cmNlVVJMID0gY2FsbEZyYW1lLT5zb3VyY2VVUkwoKTsKLSAg
ICB9Ci0KLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gcmV0cmlldmVFcnJvck1lc3NhZ2UoKmV4
ZWMsIHZtLCBleGNlcHRpb24tPnZhbHVlKCksIHNjb3BlKTsKLSAgICBTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cmVwb3J0RXhjZXB0
aW9uKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBleGNlcHRpb25Tb3Vy
Y2VVUkwsIGV4Y2VwdGlvbiwgY2FsbFN0YWNrLT5zaXplKCkgPyBjYWxsU3RhY2sgOiBudWxscHRy
LCBjYWNoZWRTY3JpcHQpOwotCi0gICAgaWYgKGV4Y2VwdGlvbkRldGFpbHMpIHsKLSAgICAgICAg
ZXhjZXB0aW9uRGV0YWlscy0+bWVzc2FnZSA9IGVycm9yTWVzc2FnZTsKLSAgICAgICAgZXhjZXB0
aW9uRGV0YWlscy0+bGluZU51bWJlciA9IGxpbmVOdW1iZXI7Ci0gICAgICAgIGV4Y2VwdGlvbkRl
dGFpbHMtPmNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJlcjsKLSAgICAgICAgZXhjZXB0aW9uRGV0
YWlscy0+c291cmNlVVJMID0gZXhjZXB0aW9uU291cmNlVVJMOwotICAgIH0KLX0KLQotdm9pZCBy
ZXBvcnRDdXJyZW50RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKLSAg
ICBhdXRvKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKLSAgICBzY29wZS5jbGVhckV4
Y2VwdGlvbigpOwotICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOwotfQotCi1z
dGF0aWMgSlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRp
b25Db2RlIGVjLCBjb25zdCBTdHJpbmcqIG1lc3NhZ2UgPSBudWxscHRyKQotewotICAgIGlmICgh
ZWMgfHwgZWMgPT0gRXhpc3RpbmdFeGNlcHRpb25FcnJvcikKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0KLSAgICAvLyBGSVhNRTogSGFuZGxlIG90aGVyIFdlYklETCBleGNlcHRpb24g
dHlwZXMuCi0gICAgaWYgKGVjID09IFR5cGVFcnJvcikgewotICAgICAgICBpZiAoIW1lc3NhZ2Ug
fHwgbWVzc2FnZS0+aXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJv
cihleGVjKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAqbWVzc2FnZSk7
Ci0gICAgfQotCi0gICAgaWYgKGVjID09IFJhbmdlRXJyb3IpIHsKLSAgICAgICAgaWYgKCFtZXNz
YWdlIHx8IG1lc3NhZ2UtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5n
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiQmFkIHZhbHVlIikpOwotICAgICAgICByZXR1cm4g
Y3JlYXRlUmFuZ2VFcnJvcihleGVjLCAqbWVzc2FnZSk7Ci0gICAgfQotCi0gICAgaWYgKGVjID09
IFN0YWNrT3ZlcmZsb3dFcnJvcikKLSAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YWNrT3ZlcmZsb3dF
cnJvcihleGVjKTsKLQotICAgIC8vIEZJWE1FOiBBbGwgY2FsbGVycyB0byBjcmVhdGVET01FeGNl
cHRpb24gbmVlZCB0byBwYXNzIGluIHRoZSBjb3JyZWN0IGdsb2JhbCBvYmplY3QuCi0gICAgLy8g
Rm9yIG5vdywgd2UncmUgZ29pbmcgdG8gYXNzdW1lIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LiBX
aGljaCBpcyB3cm9uZyBpbiBjYXNlcyBsaWtlIHRoaXM6Ci0gICAgLy8gZnJhbWVzWzBdLmRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQobnVsbCwgbnVsbCk7IC8vIHRocm93cyBhbiBleGNlcHRpb24gd2hp
Y2ggc2hvdWxkIGhhdmUgdGhlIHN1YmZyYW1lJ3MgcHJvdG90eXBlcy4KLSAgICBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlw
ZShleGVjKTsKLQotICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7
Ci0KLSAgICBDU3RyaW5nIG1lc3NhZ2VDU3RyaW5nOwotICAgIGlmIChtZXNzYWdlKQotICAgICAg
ICBtZXNzYWdlQ1N0cmluZyA9IG1lc3NhZ2UtPnV0ZjgoKTsKLSAgICBpZiAobWVzc2FnZSAmJiAh
bWVzc2FnZS0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIEl0IGlzIHNhZmUgdG8gZG8gdGhpcyBi
ZWNhdXNlIHRoZSBjaGFyKiBjb250ZW50cyBvZiB0aGUgQ1N0cmluZyBhcmUgY29waWVkIGludG8g
YSBuZXcgV1RGOjpTdHJpbmcgYmVmb3JlIHRoZSBDU3RyaW5nIGlzIGRlc3Ryb3llZC4KLSAgICAg
ICAgZGVzY3JpcHRpb24uZGVzY3JpcHRpb24gPSBtZXNzYWdlQ1N0cmluZy5kYXRhKCk7Ci0gICAg
fQotCi0gICAgSlNWYWx1ZSBlcnJvck9iamVjdDsKLSAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLnR5
cGUpIHsKLSAgICBjYXNlIERPTUNvcmVFeGNlcHRpb25UeXBlOgotI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotICAgIGNhc2UgSURCRGF0YWJhc2VFeGNlcHRpb25UeXBlOgotI2VuZGlmCi0g
ICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIERPTUNvcmVFeGNl
cHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZp
bGVFeGNlcHRpb25UeXBlOgotICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBGaWxlRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBTUUxFeGNlcHRpb25UeXBlOgotICAgICAgICBlcnJvck9iamVjdCA9IHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBTUUxFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNWR0V4Y2VwdGlvblR5cGU6Ci0gICAgICAgIGVy
cm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFNWR0V4Y2VwdGlvbjo6Y3JlYXRl
KGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgWFBhdGhFeGNlcHRpb25U
eXBlOgotICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBYUGF0
aEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
ICAgICAKLSAgICBBU1NFUlQoZXJyb3JPYmplY3QpOwotICAgIGFkZEVycm9ySW5mbyhleGVjLCBh
c09iamVjdChlcnJvck9iamVjdCksIHRydWUpOwotICAgIHJldHVybiBlcnJvck9iamVjdDsKLX0K
LQotSlNWYWx1ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25D
b2RlIGVjLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZURPTUV4
Y2VwdGlvbihleGVjLCBlYywgJm1lc3NhZ2UpOwotfQotCi1KU1ZhbHVlIGNyZWF0ZURPTUV4Y2Vw
dGlvbihFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCi17Ci0gICAgcmV0
dXJuIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIGV4Y2VwdGlvbi5jb2RlKCksIGV4Y2VwdGlv
bi5yZWxlYXNlTWVzc2FnZSgpKTsKLX0KLQotdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0
aChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhj
ZXB0aW9uJiYgZXhjZXB0aW9uKQotewotICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24o
KSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVET01FeGNl
cHRpb24oc3RhdGUsIFdURk1vdmUoZXhjZXB0aW9uKSkpOwotfQotCi1ib29sIGhhc0l0ZXJhdG9y
TWV0aG9kKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAg
IGF1dG8mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7Ci0KLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKLSAg
ICBDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZTsKLSAgICBKU1ZhbHVl
IGFwcGx5TWV0aG9kID0gb2JqZWN0LT5nZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwgY2FsbFR5
cGUsIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBBU0NJSUxpdGVyYWwoIlN5bWJv
bC5pdGVyYXRvciBwcm9wZXJ0eSBzaG91bGQgYmUgY2FsbGFibGUiKSk7Ci0gICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgZmFsc2UpOwotCi0gICAgcmV0dXJuICFhcHBseU1ldGhvZC5pc1Vu
ZGVmaW5lZCgpOwotfQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NU
b0ZyYW1lKEV4ZWNTdGF0ZSYgc3RhdGUsIEZyYW1lJiBmcmFtZSwgU3RyaW5nJiBtZXNzYWdlKQot
ewotICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3Rh
dGUsICZmcmFtZSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgbWVzc2FnZSA9IGZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5jcm9zc0Rv
bWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NU
b0RPTVdpbmRvdyhFeGVjU3RhdGUmIHN0YXRlLCBET01XaW5kb3cmIGdsb2JhbE9iamVjdCwgU3Ry
aW5nJiBtZXNzYWdlKQotewotICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9ET01XaW5kb3coJnN0YXRlLCBnbG9iYWxPYmplY3QsIERvTm90UmVwb3J0U2VjdXJpdHlF
cnJvcikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIG1lc3NhZ2UgPSBnbG9iYWxPYmplY3Qu
Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSkpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZy
YW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICghZnJhbWUpCi0g
ICAgICAgIHJldHVybjsKLSAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPnByaW50
RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOwotfQotCi1TdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVj
dHVyZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbykKLXsKLSAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9i
amVjdC5zdHJ1Y3R1cmVzKE5vTG9ja2luZ05lY2Vzc2FyeSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVy
ZXMuZ2V0KGNsYXNzSW5mbykuZ2V0KCk7Ci19Ci0KLVN0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1
cmUoSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQotewotICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1
cmluZ01hcmtpbmcoZ2xvYmFsT2JqZWN0LnZtKCkuaGVhcCwgZ2xvYmFsT2JqZWN0LmdjTG9jaygp
KTsKLSAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5zdHJ1
Y3R1cmVzKGxvY2tlcik7Ci0gICAgQVNTRVJUKCFzdHJ1Y3R1cmVzLmNvbnRhaW5zKGNsYXNzSW5m
bykpOwotICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChjbGFzc0luZm8sIFdyaXRlQmFycmllcjxT
dHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC52bSgpLCAmZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKS5p
dGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBpbnQzMl90IGtNYXhJbnQz
MiA9IDB4N2ZmZmZmZmY7Ci1zdGF0aWMgY29uc3QgaW50MzJfdCBrTWluSW50MzIgPSAta01heElu
dDMyIC0gMTsKLXN0YXRpYyBjb25zdCB1aW50MzJfdCBrTWF4VUludDMyID0gMHhmZmZmZmZmZlU7
Ci1zdGF0aWMgY29uc3QgaW50NjRfdCBrSlNNYXhJbnRlZ2VyID0gMHgyMDAwMDAwMDAwMDAwMExM
IC0gMTsgLy8gMl41MyAtIDEsIGxhcmdlc3QgaW50ZWdlciBleGFjdGx5IHJlcHJlc2VudGFibGUg
aW4gRUNNQVNjcmlwdC4KLQotc3RhdGljIFN0cmluZyByYW5nZUVycm9yU3RyaW5nKGRvdWJsZSB2
YWx1ZSwgZG91YmxlIG1pbiwgZG91YmxlIG1heCkKLXsKLSAgICByZXR1cm4gbWFrZVN0cmluZygi
VmFsdWUgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQodmFsdWUpLCAiIGlzIG91
dHNpZGUgdGhlIHJhbmdlIFsiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtaW4p
LCAiLCAiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtYXgpLCAiXSIpOwotfQot
Ci1zdGF0aWMgZG91YmxlIGVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgeCwg
ZG91YmxlIG1pbmltdW0sIGRvdWJsZSBtYXhpbXVtKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZt
KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYg
KHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSkgewotICAgICAgICB0aHJvd1R5cGVFcnJv
cigmc3RhdGUsIHNjb3BlLCByYW5nZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHggPSB0cnVuYyh4KTsKLSAgICBpZiAoeCA8
IG1pbmltdW0gfHwgeCA+IG1heGltdW0pIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSk7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4geDsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0cyB7Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IElu
dFR5cGVMaW1pdHM8aW50OF90PiB7Ci0gICAgc3RhdGljIGNvbnN0IGludDhfdCBtaW5WYWx1ZSA9
IC0xMjg7Ci0gICAgc3RhdGljIGNvbnN0IGludDhfdCBtYXhWYWx1ZSA9IDEyNzsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAotfTsKLQotdGVt
cGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQ4X3Q+IHsKLSAgICBzdGF0aWMgY29u
c3QgdWludDhfdCBtYXhWYWx1ZSA9IDI1NTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVt
YmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRU
eXBlTGltaXRzPGludDE2X3Q+IHsKLSAgICBzdGF0aWMgY29uc3Qgc2hvcnQgbWluVmFsdWUgPSAt
MzI3Njg7Ci0gICAgc3RhdGljIGNvbnN0IHNob3J0IG1heFZhbHVlID0gMzI3Njc7Ci0gICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKLX07Ci0K
LXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50MTZfdD4gewotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtYXhWYWx1ZSA9IDY1NTM1OwotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Ci19OwotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJJbnQoRXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZp
Z3VyYXRpb24pCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2ln
bmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5
IGJlIHVzZWQgZm9yIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOwotCi0gICAgdHlwZWRlZiBJbnRU
eXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OwotICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUg
aXMgYWxyZWFkeSBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCi0g
ICAgaWYgKHZhbHVlLmlzSW50MzIoKSkgewotICAgICAgICBpbnQzMl90IGQgPSB2YWx1ZS5hc0lu
dDMyKCk7Ci0gICAgICAgIGlmIChkID49IExpbWl0c1RyYWl0OjptaW5WYWx1ZSAmJiBkIDw9IExp
bWl0c1RyYWl0OjptYXhWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihk
KTsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToK
LSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOwotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpD
bGFtcDoKLSAgICAgICAgICAgIHJldHVybiBkIDwgTGltaXRzVHJhaXQ6Om1pblZhbHVlID8gTGlt
aXRzVHJhaXQ6Om1pblZhbHVlIDogTGltaXRzVHJhaXQ6Om1heFZhbHVlOwotICAgICAgICB9Ci0g
ICAgICAgIGQgJT0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzOwotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VD4oZCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/IGQgLSBMaW1pdHNUcmFp
dDo6bnVtYmVyT2ZWYWx1ZXMgOiBkKTsKLSAgICB9Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRv
TnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0KLSAg
ICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICByZXR1cm4gZW5mb3Jj
ZVJhbmdlKHN0YXRlLCB4LCBMaW1pdHNUcmFpdDo6bWluVmFsdWUsIExpbWl0c1RyYWl0OjptYXhW
YWx1ZSk7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgot
ICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOwotICAgIH0K
LQotICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFi
cyh4KSk7Ci0gICAgeCA9IGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKTsKLQot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih4ID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8geCAt
IExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyA6IHgpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLXN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9u
KQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwotCi0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPFQ+
Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVz
ZWQgZm9yIHVuc2lnbmVkIGludGVncmFsIHR5cGVzIik7Ci0KLSAgICB0eXBlZGVmIEludFR5cGVM
aW1pdHM8VD4gTGltaXRzVHJhaXQ7Ci0gICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBh
bHJlYWR5IGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgotICAg
IGlmICh2YWx1ZS5pc1VJbnQzMigpKSB7Ci0gICAgICAgIHVpbnQzMl90IGQgPSB2YWx1ZS5hc1VJ
bnQzMigpOwotICAgICAgICBpZiAoZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCi0gICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7Ci0gICAgICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsOgotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwotICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAg
ICAgICAgICAgcmV0dXJuIExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCAwKTsKLQotICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAg
IGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2U6Ci0gICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIExpbWl0c1RyYWl0
OjptYXhWYWx1ZSk7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wOgotICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOwot
ICAgIH0KLQotICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxv
b3IoZmFicyh4KSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGZtb2QoeCwgTGltaXRzVHJh
aXQ6Om51bWJlck9mVmFsdWVzKSk7Ci19Ci0KLWludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxs
ZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotdWludDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVy
VUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotaW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhf
dD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsK
LX0KLQotdWludDhfdCB0b1VJbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Ci19Ci0KLS8vIGh0dHA6
Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtYnl0ZQotaW50OF90IHRvSW50OChFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90
PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsK
LX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1vY3RldAotdWludDhfdCB0
b1VJbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRv
U21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZp
Z3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLWludDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8
aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVu
Zm9yY2VSYW5nZSk7Ci19Ci0KLXVpbnQxNl90IHRvVUludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWlu
dDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZv
cmNlUmFuZ2UpOwotfQotCi1pbnQxNl90IHRvSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUs
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKLX0KLQotdWlu
dDE2X3QgdG9VSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJD
b252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9y
Zy9UUi9XZWJJREwvI2VzLXNob3J0Ci1pbnQxNl90IHRvSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwg
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRl
LCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi0v
LyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLXNob3J0Ci11aW50MTZf
dCB0b1VJbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVy
biB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2Vi
SURMLyNlcy1sb25nCi1pbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0
ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmICh2YWx1ZS5pc0ludDMy
KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZh
bHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7
Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwga01pbkludDMyLCBrTWF4SW50MzIp
OwotfQotCi1pbnQzMl90IHRvSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQotewotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5h
c0ludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAg
cmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxpbnQzMl90Pih4KTsKLX0KLQotdWlu
dDMyX3QgdG9VSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewot
ICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIo
KTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4g
c3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPHVpbnQzMl90Pih4KTsKLX0KLQotLy8gaHR0cDov
L3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nCi11aW50MzJfdCB0b1VJbnQz
MkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5h
c1VJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uo
c3RhdGUsIHgsIDAsIGtNYXhVSW50MzIpOwotfQotCi1pbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFu
Z2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIC1r
SlNNYXhJbnRlZ2VyLCBrSlNNYXhJbnRlZ2VyKTsKLX0KLQotdWludDY0X3QgdG9VSW50NjRFbmZv
cmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUs
IHgsIDAsIGtKU01heEludGVnZXIpOwotfQotCi1pbnQ2NF90IHRvSW50NjRDbGFtcChFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50
b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19j
YXN0PGludDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAta0pTTWF4
SW50ZWdlciksIGtKU01heEludGVnZXIpKTsKLX0KLQotdWludDY0X3QgdG9VSW50NjRDbGFtcChF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2
YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwg
MCksIGtKU01heEludGVnZXIpKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURM
LyNlcy1sb25nLWxvbmcKLWludDY0X3QgdG9JbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLQotICAg
IC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1ZXMg
bW9kdWxvIDJeNjQuCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIG47Ci0gICAgZG91YmxlVG9JbnRl
Z2VyKHgsIG4pOwotICAgIHJldHVybiBuOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9X
ZWJJREwvI2VzLXVuc2lnbmVkLWxvbmctbG9uZwotdWludDY0X3QgdG9VSW50NjQoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7Ci0KLSAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVy
dCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0LgotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOwot
ICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsKLSAgICByZXR1cm4gbjsKLX0KLQotY2xhc3MgR2V0
Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvciB7Ci1wdWJsaWM6Ci0gICAgR2V0Q2FsbGVyR2xvYmFs
T2JqZWN0RnVuY3RvcigpID0gZGVmYXVsdDsKLQotICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9w
ZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYg
KCFtX2hhc1NraXBwZWRGaXJzdEZyYW1lKSB7Ci0gICAgICAgICAgICBtX2hhc1NraXBwZWRGaXJz
dEZyYW1lID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF1dG8qIGNvZGVCbG9jayA9IHZpc2l0b3ItPmNv
ZGVCbG9jaygpKQotICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCh2aXNpdG9yLT5j
YWxsZWUoKSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQ2FsbGVlIGlzIG5vdCBhbiBvYmplY3Qg
aWYgdGhlIGNhbGxlciBpcyBXZWIgQXNzZW1ibHkuCi0gICAgICAgICAgICAvLyBGaWd1cmUgb3V0
IHdoYXQgdG8gZG8gaGVyZS4gV2UgY2FuIHByb2JhYmx5IGdldCB0aGUgZ2xvYmFsIG9iamVjdAot
ICAgICAgICAgICAgLy8gZnJvbSB0aGUgdG9wLW1vc3QgV2FzbSBJbnN0YW5jZS4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcyMQotICAgICAgICAgICAgaWYgKHZp
c2l0b3ItPmNhbGxlZSgpLT5pc09iamVjdCgpKQotICAgICAgICAgICAgICAgIG1fZ2xvYmFsT2Jq
ZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3Qo
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOwotICAgIH0K
LQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2ds
b2JhbE9iamVjdDsgfQotCi1wcml2YXRlOgotICAgIG11dGFibGUgYm9vbCBtX2hhc1NraXBwZWRG
aXJzdEZyYW1lIHsgZmFsc2UgfTsKLSAgICBtdXRhYmxlIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2Jh
bE9iamVjdCB7IG51bGxwdHIgfTsKLX07Ci0KLURPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yIGl0ZXI7
Ci0gICAgZXhlYy0+aXRlcmF0ZShpdGVyKTsKLSAgICByZXR1cm4gaXRlci5nbG9iYWxPYmplY3Qo
KSA/IGFzSlNET01XaW5kb3coaXRlci5nbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKSA6IGZpcnN0
RE9NV2luZG93KGV4ZWMpOwotfQotCi1ET01XaW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKS0+d3JhcHBlZCgpOwotfQotCi1ET01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT52bUVudHJ5
R2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5B
Y2Nlc3NEb2N1bWVudChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERvY3VtZW50KiB0YXJnZXREb2N1
bWVudCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQotewotICAgIFZN
JiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLQotICAgIGlmICghdGFyZ2V0RG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIERPTVdpbmRvdyYgYWN0aXZlID0gYWN0aXZlRE9NV2luZG93KHN0YXRlKTsKLQotICAg
IGlmIChhY3RpdmUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5jYW5BY2Nlc3ModGFyZ2V0
RG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IHN3aXRjaCAocmVwb3J0aW5nT3B0aW9uKSB7Ci0gICAgY2FzZSBUaHJvd1NlY3VyaXR5RXJyb3I6
Ci0gICAgICAgIHRocm93U2VjdXJpdHlFcnJvcigqc3RhdGUsIHNjb3BlLCB0YXJnZXREb2N1bWVu
dC0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZSkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIExvZ1NlY3VyaXR5RXJyb3I6Ci0gICAgICAgIHByaW50
RXJyb3JNZXNzYWdlRm9yRnJhbWUodGFyZ2V0RG9jdW1lbnQtPmZyYW1lKCksIHRhcmdldERvY3Vt
ZW50LT5kb21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yOgotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQmluZGlu
Z1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgRE9NV2luZG93JiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGlu
Z09wdGlvbikKLXsKLSAgICByZXR1cm4gY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC5k
b2N1bWVudCgpLCByZXBvcnRpbmdPcHRpb24pOwotfQotCi1ib29sIEJpbmRpbmdTZWN1cml0eTo6
c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRnJhbWUqIHRh
cmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQotewotICAgIHJl
dHVybiB0YXJnZXQgJiYgY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC0+ZG9jdW1lbnQo
KSwgcmVwb3J0aW5nT3B0aW9uKTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9Ob2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgTm9kZSogdGFyZ2V0KQotewot
ICAgIHJldHVybiAhdGFyZ2V0IHx8IGNhbkFjY2Vzc0RvY3VtZW50KCZzdGF0ZSwgJnRhcmdldC0+
ZG9jdW1lbnQoKSwgTG9nU2VjdXJpdHlFcnJvcik7Ci19Ci0gICAgCi1zdGF0aWMgRW5jb2RlZEpT
VmFsdWUgdGhyb3dUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICByZXR1cm4gdGhy
b3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOwotfQotCi1zdGF0aWMg
dm9pZCBhcHBlbmRBcmd1bWVudE11c3RCZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCB1bnNpZ25l
ZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICBidWlsZGVyLmFw
cGVuZExpdGVyYWwoIkFyZ3VtZW50ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGFyZ3Vt
ZW50SW5kZXggKyAxKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAoJyIpOwotICAgIGJ1
aWxkZXIuYXBwZW5kKGFyZ3VtZW50TmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIn
KSB0byAiKTsKLSAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgewotICAgICAgICBidWlsZGVyLmFwcGVu
ZExpdGVyYWwoInRoZSAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGNvbnN0cnVjdG9yIik7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCcuJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZ1bmN0aW9uTmFtZSk7
Ci0gICAgfQotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG11c3QgYmUgIik7Ci19Ci0KLUpT
Qzo6RW5jb2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmli
dXRlTmFtZSkKLXsKLSAgICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKLSAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNz
YWdlTGV2ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNz
IHByb3BlcnR5ICciLCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VOYW1l
LCAiIG9iamVjdC4iKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKLX0KLSAgICAKLXZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmli
dXRlTmFtZSkKLXsKLSAgICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKLSAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNz
YWdlTGV2ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gc2V0IHBy
b3BlcnR5ICciLCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VOYW1lLCAi
IG9iamVjdC4iKSk7Ci19Ci0KLXZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRl
RE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpKTsKLX0KLQotdm9pZCB0aHJv
d05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2Vw
dGlvbigpKTsKLSAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKLSAgICB0aHJvd0V4
Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQ
UE9SVEVEX0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsKLX0KLQotdm9pZCB0aHJvd0ludmFsaWRTdGF0
ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29u
c3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAg
ICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3Rh
dGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTlZBTElEX1NUQVRFX0VSUiwg
Jm1lc3NhZ2VTdHJpbmcpKTsKLX0KLQotdm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRp
b24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU0VDVVJJVFlfRVJS
LCBtZXNzYWdlKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RC
ZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUs
IHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3Qg
Y2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNv
bnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVzKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsK
LSAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVu
dE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKLSAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoIm9uZSBvZjogIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRW
YWx1ZXMpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxk
ZXIudG9TdHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11
c3RCZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUs
IGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsK
LSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVp
bGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBpbnRlcmZhY2VOYW1lLCBmdW5jdGlv
bk5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYSBmdW5jdGlvbiIpOwotICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7
Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50
SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRl
cmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVk
VHlwZSkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBwZW5kQXJndW1lbnRN
dXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBmdW5jdGlvbkludGVy
ZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJhbiBp
bnN0YW5jZSBvZiAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFR5cGUpOwotICAgIHJl
dHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7
Ci19Ci0KLXZvaWQgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIHRocm93VHlwZUVycm9yKHN0YXRl
LCBzY29wZSwgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIEFycmF5IGVsZW1lbnQgdHlwZSIpKTsKLX0K
LQotdm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKLXsKLSAgICB0aHJv
d1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1l
LCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgYXR0cmlidXRlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2Yg
IiwgZXhwZWN0ZWRUeXBlKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dSZXF1aXJl
ZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUsIGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1l
LCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiTWVtYmVyICIpOwotICAgIGJ1aWxkZXIuYXBw
ZW5kKGRpY3Rpb25hcnlOYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnLicpOwotICAgIGJ1aWxk
ZXIuYXBwZW5kKG1lbWJlck5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGlzIHJl
cXVpcmVkIGFuZCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICIpOwotICAgIGJ1aWxkZXIuYXBwZW5k
KGV4cGVjdGVkVHlwZSk7Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSwgYnVpbGRlci50b1N0cmluZygpKTsKLX0KLQotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0Nv
bnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZh
Y2VOYW1lKQotewotICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoJnN0YXRlLCBzY29wZSwgY3JlYXRl
UmVmZXJlbmNlRXJyb3IoJnN0YXRlLCBtYWtlU3RyaW5nKGludGVyZmFjZU5hbWUsICIgY29uc3Ry
dWN0b3IgYXNzb2NpYXRlZCBleGVjdXRpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpKSk7Ci19
Ci0KLXZvaWQgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIlZhbHVlIGlzIG5vdCBhIHNlcXVlbmNlIikpOwotfQotCi12b2lkIHRo
cm93Tm9uRmluaXRlVHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpCi17Ci0gICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFs
KCJUaGUgcHJvdmlkZWQgdmFsdWUgaXMgbm9uLWZpbml0ZSIpKTsKLX0KLQotU3RyaW5nIG1ha2VH
ZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRl
cmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgZ2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQg
b24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpOwotfQotCi1KU0M6OkVuY29kZWRKU1Zh
bHVlIHRocm93R2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0
cmlidXRlTmFtZSkKLXsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3Bl
LCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1l
KSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewotICAgIHJldHVybiBjcmVhdGVSZWplY3RlZFBy
b21pc2VXaXRoVHlwZUVycm9yKHN0YXRlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRl
cmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7Ci19Ci0KLWJvb2wgdGhyb3dTZXR0ZXJUeXBlRXJy
b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewotICAgIHRo
cm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5h
bWUsICcuJywgYXR0cmlidXRlTmFtZSwgIiBzZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBpbnN0
YW5jZXMgb2YgIiwgaW50ZXJmYWNlTmFtZSkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3Ry
aW5nIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNhbiBv
bmx5IGNhbGwgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBmdW5jdGlvbk5hbWUsICIgb24gaW5zdGFu
Y2VzIG9mICIsIGludGVyZmFjZU5hbWUpOwotfQotCi1FbmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNU
eXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0g
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVRoaXNUeXBlRXJyb3JN
ZXNzYWdlKGludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSkpOwotfQotCi1KU0M6OkVuY29kZWRK
U1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmIHBy
b21pc2UsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUp
Ci17Ci0gICAgcHJvbWlzZS5yZWplY3QoVHlwZUVycm9yLCBtYWtlVGhpc1R5cGVFcnJvck1lc3Nh
Z2UoaW50ZXJmYWNlTmFtZSwgbWV0aG9kTmFtZSkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlz
ZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKLXsKLSAgICByZXR1cm4gY3JlYXRl
UmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNz
YWdlKGludGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKLX0KLQogdm9pZCBjYWxsRnVuY3Rpb25X
aXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3Qm
IHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYgZnVuY3Rpb24pCiB7CiAgICAgSlNDOjpDYWxs
RGF0YSBjYWxsRGF0YTsKQEAgLTEwMDcsMjggKzY1LDQgQEAgQ2FsbFR5cGUgRE9NQ29uc3RydWN0
b3JPYmplY3Q6OmdldENhbGxEYQogICAgIHJldHVybiBDYWxsVHlwZTo6SG9zdDsKIH0KIAotdm9p
ZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTWU5U
QVhfRVJSKSk7Ci19Ci0KLXZvaWQgdGhyb3dEYXRhQ2xvbmVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNl
cHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhj
ZXB0aW9uKCZzdGF0ZSwgREFUQV9DTE9ORV9FUlIpKTsKLX0KLQotdm9pZCB0aHJvd0luZGV4U2l6
ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsK
LSAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3Rh
dGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTkRFWF9TSVpFX0VSUikpOwot
fQotCi12b2lkIHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigm
c3RhdGUsIFRZUEVfTUlTTUFUQ0hfRVJSKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnN0cnVjdG9yLmgJ
KHJldmlzaW9uIDIxMTM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
c3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTksMTEgKzE5LDY0IEBACiAKICNwcmFnbWEg
b25jZQogCi0jaW5jbHVkZSAiRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIEJhc2UgY2xhc3MgZm9yIGFsbCBjb25zdHJ1Y3RvciBv
YmplY3RzIGluIHRoZSBKU0MgYmluZGluZ3MuCitjbGFzcyBET01Db25zdHJ1Y3Rvck9iamVjdCA6
IHB1YmxpYyBKU0RPTU9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0RPTU9iamVjdCBC
YXNlOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6OkltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2UgfCBKU0M6OlR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YTsK
KyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNWYWx1ZSk7CisKK3Byb3RlY3RlZDoKKyAgICBET01D
b25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisK
KyAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOworICAgIHN0YXRp
YyBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIEpTQzo6Q2FsbERhdGEmKTsKK307
CisKKy8vIENvbnN0cnVjdG9ycyB1c2luZyB0aGlzIGJhc2UgY2xhc3MgZGVwZW5kIG9uIGJlaW5n
IGluIGEgRG9jdW1lbnQgYW5kCisvLyBjYW4gbmV2ZXIgYmUgdXNlZCBmcm9tIGEgV29ya2VyR2xv
YmFsU2NvcGUuCitjbGFzcyBET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCA6IHB1YmxpYyBET01D
b25zdHJ1Y3Rvck9iamVjdCB7CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNl
OworcHVibGljOgorICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Cisg
ICAgfQorCitwcm90ZWN0ZWQ6CisgICAgRE9NQ29uc3RydWN0b3JXaXRoRG9jdW1lbnQoSlNDOjpT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKKyAg
ICAgICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKKyAg
ICB7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFs
T2JqZWN0LnZtKCkpOworICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0LnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+aXNEb2N1bWVudCgpKTsKKyAgICB9Cit9OworCitjbGFzcyBET01Db25zdHJ1
Y3RvckpTQnVpbHRpbk9iamVjdCA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBCYXNlOworCitwcm90ZWN0ZWQ6
CisgICAgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RP
TUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDOjpKU0Nl
bGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisKKyAgICBKU0M6OkpTRnVuY3Rpb24qIGluaXRpYWxp
emVGdW5jdGlvbigpOworICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mLCBK
U0M6OkpTRnVuY3Rpb24mKTsKKworcHJpdmF0ZToKKyAgICBKU0M6OldyaXRlQmFycmllcjxKU0M6
OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6ZUZ1bmN0aW9uOworfTsKKwogdGVtcGxhdGU8dHlwZW5h
bWUgSlNDbGFzcz4gY2xhc3MgSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVjdGFibGUgOiBwdWJs
aWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewogcHVibGljOgogICAgIHR5cGVkZWYgRE9NQ29uc3Ry
dWN0b3JPYmplY3QgQmFzZTsKQEAgLTEzMSw2ICsxODQsMzcgQEAgcHJpdmF0ZToKICAgICBKU0M6
OkZ1bmN0aW9uRXhlY3V0YWJsZSogaW5pdGlhbGl6ZUV4ZWN1dGFibGUoSlNDOjpWTSYpOwogfTsK
IAoraW5saW5lIEpTQzo6U3RydWN0dXJlKiBET01Db25zdHJ1Y3Rvck9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitpbmxpbmUgRE9NQ29uc3RydWN0
b3JPYmplY3Q6OkRPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgOiBKU0RPTU9iamVjdChzdHJ1
Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3sKK30KKworaW5saW5lIFN0cmluZyBET01Db25zdHJ1Y3Rv
ck9iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KikKK3sKKyAgICByZXR1cm4gQVNDSUlM
aXRlcmFsKCJGdW5jdGlvbiIpOworfQorCitpbmxpbmUgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5P
YmplY3Q6OkRPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgOiBET01Db25zdHJ1
Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3sKK30KKworaW5saW5lIEpTQzo6
SlNGdW5jdGlvbiogRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OmluaXRpYWxpemVGdW5j
dGlvbigpCit7CisgICAgcmV0dXJuIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLmdldCgpOworfQorCitp
bmxpbmUgdm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6c2V0SW5pdGlhbGl6ZUZ1
bmN0aW9uKEpTQzo6Vk0mIHZtLCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQoreworICAgIG1f
aW5pdGlhbGl6ZUZ1bmN0aW9uLnNldCh2bSwgdGhpcywgJmZ1bmN0aW9uKTsKK30KKworCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0cnVj
dGFibGU8SlNDbGFzcz4qIEpTRE9NQ29uc3RydWN0b3JOb3RDb25zdHJ1Y3RhYmxlPEpTQ2xhc3M+
OjpjcmVhdGUoSlNDOjpWTSYgdm0sIEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7CiAgICAgSlNET01Db25zdHJ1Y3Rvck5vdENvbnN0
cnVjdGFibGUqIGNvbnN0cnVjdG9yID0gbmV3IChOb3ROdWxsLCBKU0M6OmFsbG9jYXRlQ2VsbDxK
U0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZT4odm0uaGVhcCkpIEpTRE9NQ29uc3RydWN0
b3JOb3RDb25zdHJ1Y3RhYmxlKHN0cnVjdHVyZSwgZ2xvYmFsT2JqZWN0KTsKQEAgLTIyMCw2ICsz
MDQsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgdm9pZCBKCiAgICAgaW5p
dGlhbGl6ZVByb3BlcnRpZXModm0sIGdsb2JhbE9iamVjdCk7CiB9CiAKK3ZvaWQgY2FsbEZ1bmN0
aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTT2JqZWN0JiB0
aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rpb24mKTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFz
cz4gaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNCdWlsdGluQ29uc3RydWN0b3I8SlNDbGFz
cz46OmNhbGxDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3Qm
IG9iamVjdCkKIHsKICAgICBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhzdGF0ZSwg
b2JqZWN0LCAqaW5pdGlhbGl6ZUZ1bmN0aW9uKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0LmgJKHJldmlzaW9uIDIxMTM5NykKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw3IEBACiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklETFR5
cGVzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRp
b25IYW5kbGluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RJbmxpbmVzLmg+
CiAjaW5jbHVkZSA8cnVudGltZS9KU09OT2JqZWN0Lmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3BwCShyZXZp
c2lvbiAyMTEzNTMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5jcHA6MjExMzUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRp
b25IYW5kbGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDM0IEBACisvKgorICog
IENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTEsIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIDxzYW1A
d2Via2l0Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMgTWljaGFlbCBQcnVldHQgPG1pY2hh
ZWxANjhrLm9yZz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKworI2luY2x1ZGUgIkNhY2hlZFNj
cmlwdC5oIgorI2luY2x1ZGUgIkNvbW1vblZNLmgiCisjaW5jbHVkZSAiRE9NQ29uc3RydWN0b3JX
aXRoRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uSGVhZGVycy5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbkludGVyZmFjZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKKyNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlv
bi5oIgorI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgIkpTRE9NUHJvbWlzZS5o
IgorI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCisjaW5jbHVkZSAiSlNFeGNlcHRpb25C
YXNlLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlIDxieXRlY29kZS9D
b2RlQmxvY2suaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+CisjaW5j
bHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4KKyNpbmNsdWRlIDxydW50
aW1lL0RhdGVJbnN0YW5jZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0Vycm9ySGFuZGxpbmdTY29wZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JJ
bnN0YW5jZS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+CisjaW5jbHVkZSA8cnVu
dGltZS9FeGNlcHRpb25IZWxwZXJzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+
CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKK3VzaW5nIG5hbWVzcGFjZSBJ
bnNwZWN0b3I7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU1RBVElDX0FTU0VSVF9JU19UUklW
SUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yT2JqZWN0KTsKK1NUQVRJQ19BU1NFUlRf
SVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudCk7CisK
K3ZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
Cit7CisgICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOworfQor
CitKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJp
bmcmIHMpCit7CisgICAgaWYgKHMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc051bGwoKTsK
KyAgICByZXR1cm4ganNPd25lZFN0cmluZyhleGVjLCBzKTsKK30KKworSlNWYWx1ZSBqc1N0cmlu
Z09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU3RyaW5nJiBzKQoreworICAgIGlm
IChzLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4g
anNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcyk7Cit9CisKK0pTVmFsdWUganNTdHJpbmcoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2Fj
aGUoZXhlYywgdXJsLnN0cmluZygpKTsKK30KKworSlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVk
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCit7CisgICAgaWYgKHVybC5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIGpzU3RyaW5nV2l0
aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHN0
cmluZ1RvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCBTdHJpbmcmJiBzdHJpbmcpCit7CisgICAgaWYgKCFzdHJpbmcuY29udGFpbnNPbmx5TGF0aW4x
KCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KKworU3RyaW5nIGlkZW50
aWZpZXJUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnRpZmllcikKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSBpZGVudGlmaWVy
LnN0cmluZygpOworICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3RhdGUsIHNjb3BlLCBX
VEZNb3ZlKHN0cmluZykpOworfQorCitTdHJpbmcgdmFsdWVUb0J5dGVTdHJpbmcoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBzdHJp
bmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisKKyAgICByZXR1cm4gc3RyaW5nVG9CeXRlU3RyaW5nKHN0YXRlLCBzY29w
ZSwgV1RGTW92ZShzdHJpbmcpKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGhhc1VucGFpcmVk
U3Vycm9nYXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQoreworICAgIC8vIEZhc3QgcGF0aCBmb3IgOC1i
aXQgc3RyaW5nczsgdGhleSBjYW4ndCBoYXZlIGFueSBzdXJyb2dhdGVzLgorICAgIGlmIChzdHJp
bmcuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKGF1dG8gY29kZVBv
aW50IDogc3RyaW5nLmNvZGVQb2ludHMoKSkgeworICAgICAgICBpZiAoVV9JU19TVVJST0dBVEUo
Y29kZVBvaW50KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvVVNWU3RyaW5nKFN0cmlu
ZyYmIHN0cmluZykKK3sKKyAgICAvLyBGYXN0IHBhdGggZm9yIHRoZSBjYXNlIHdoZXJlIHRoZXJl
IGFyZSBubyB1bnBhaXJlZCBzdXJyb2dhdGVzLgorICAgIGlmICghaGFzVW5wYWlyZWRTdXJyb2dh
dGUoc3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIHN0cmluZzsKKworICAgIC8vIFNsb3cgcGF0aDog
aHR0cDovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4tb2J0YWluLXVuaWNvZGUKKyAgICAv
LyBSZXBsYWNlcyB1bnBhaXJlZCBzdXJyb2dhdGVzIHdpdGggdGhlIHJlcGxhY2VtZW50IGNoYXJh
Y3Rlci4KKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUNhcGFj
aXR5KHN0cmluZy5sZW5ndGgoKSk7CisgICAgU3RyaW5nVmlldyB2aWV3IHsgc3RyaW5nIH07Cisg
ICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHZpZXcuY29kZVBvaW50cygpKSB7CisgICAgICAgIGlm
IChVX0lTX1NVUlJPR0FURShjb2RlUG9pbnQpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChy
ZXBsYWNlbWVudENoYXJhY3Rlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoY29kZVBvaW50KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwor
fQorCitTdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIpCit7CisgICAgU3RyaW5nIHN0cmluZyA9IGlkZW50aWZpZXIuc3Ry
aW5nKCk7CisgICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7Cit9
CisKK1N0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBTdHJpbmcgc3RyaW5nID0gdmFsdWUudG9XVEZTdHJp
bmcoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAg
cmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3RyaW5nKSk7Cit9CisKK0pTVmFsdWUg
anNEYXRlKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVlKQoreworICAgIHJldHVybiBEYXRl
SW5zdGFuY2U6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOworfQorCitkb3VibGUgdmFsdWVUb0RhdGUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQor
ICAgICAgICByZXR1cm4gdmFsdWUuYXNOdW1iZXIoKTsKKyAgICBpZiAoIXZhbHVlLmluaGVyaXRz
KGV4ZWMtPnZtKCksIERhdGVJbnN0YW5jZTo6aW5mbygpKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PERhdGVJbnN0YW5jZSo+KHZhbHVlLnRvT2JqZWN0KGV4ZWMpKS0+aW50ZXJuYWxOdW1iZXIo
KTsKK30KKwordm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGV4
Y2VwdGlvblZhbHVlLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCkKK3sKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIFJFTEVBU0VfQVNTRVJUKHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRp
bmdBUElMb2NrKCkpOworICAgIGF1dG8qIGV4Y2VwdGlvbiA9IGpzRHluYW1pY0Rvd25jYXN0PEpT
Qzo6RXhjZXB0aW9uKj4odm0sIGV4Y2VwdGlvblZhbHVlKTsKKyAgICBpZiAoIWV4Y2VwdGlvbikg
eworICAgICAgICBleGNlcHRpb24gPSB2bS5sYXN0RXhjZXB0aW9uKCk7CisgICAgICAgIGlmICgh
ZXhjZXB0aW9uKQorICAgICAgICAgICAgZXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246OmNyZWF0
ZShleGVjLT52bSgpLCBleGNlcHRpb25WYWx1ZSwgSlNDOjpFeGNlcHRpb246OkRvTm90Q2FwdHVy
ZVN0YWNrKTsKKyAgICB9CisKKyAgICByZXBvcnRFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBj
YWNoZWRTY3JpcHQpOworfQorCitTdHJpbmcgcmV0cmlldmVFcnJvck1lc3NhZ2UoRXhlY1N0YXRl
JiBzdGF0ZSwgVk0mIHZtLCBKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2F0Y2hTY29wZSYgY2F0Y2hTY29w
ZSkKK3sKKyAgICBpZiAoYXV0byogZXhjZXB0aW9uQmFzZSA9IHRvRXhjZXB0aW9uQmFzZSh2bSwg
ZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbkJhc2UtPnRvU3RyaW5nKCk7CisK
KyAgICAvLyBGSVhNRTogPGh0dHA6Ly93ZWJraXQub3JnL2IvMTE1MDg3PiBXZWIgSW5zcGVjdG9y
OiBXZWJDb3JlOjpyZXBvcnRFeGNlcHRpb24gc2hvdWxkIG5vdCBldmFsdWF0ZSBKYXZhU2NyaXB0
IGhhbmRsaW5nIGV4Y2VwdGlvbnMKKyAgICAvLyBJZiB0aGlzIGlzIGEgY3VzdG9tIGV4Y2VwdGlv
biBvYmplY3QsIGNhbGwgdG9TdHJpbmcgb24gaXQgdG8gdHJ5IGFuZCBnZXQgYSBuaWNlIHN0cmlu
ZyByZXByZXNlbnRhdGlvbiBmb3IgdGhlIGV4Y2VwdGlvbi4KKyAgICBTdHJpbmcgZXJyb3JNZXNz
YWdlOworICAgIGlmIChhdXRvKiBlcnJvciA9IGpzRHluYW1pY0Rvd25jYXN0PEVycm9ySW5zdGFu
Y2UqPih2bSwgZXhjZXB0aW9uKSkKKyAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3ItPnNhbml0
aXplZFRvU3RyaW5nKCZzdGF0ZSk7CisgICAgZWxzZQorICAgICAgICBlcnJvck1lc3NhZ2UgPSBl
eGNlcHRpb24udG9XVEZTdHJpbmcoJnN0YXRlKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2xlYXIg
YW55IG5ldyBleGNlcHRpb24gdGhhdCBtYXkgYmUgdGhyb3duIGluIHRoZSB0b1N0cmluZygpIGNh
bGwgYWJvdmUuCisgICAgLy8gcmVwb3J0RXhjZXB0aW9uKCkgaXMgbm90IHN1cHBvc2VkIHRvIGJl
IG1ha2luZyBuZXcgZXhjZXB0aW9ucy4KKyAgICBjYXRjaFNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgdm0uY2xlYXJMYXN0RXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIGVycm9yTWVzc2FnZTsK
K30KKwordm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0M6OkV4Y2VwdGlv
biogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCwgRXhjZXB0aW9uRGV0YWls
cyogZXhjZXB0aW9uRGV0YWlscykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1
dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKworICAgIFJFTEVBU0VfQVNTRVJU
KHZtLmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIGlmIChpc1Rlcm1pbmF0
ZWRFeGVjdXRpb25FeGNlcHRpb24odm0sIGV4Y2VwdGlvbikpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEVycm9ySGFuZGxpbmdTY29wZSBlcnJvclNjb3BlKGV4ZWMtPnZtKCkpOworCisgICAgUmVm
UHRyPFNjcmlwdENhbGxTdGFjaz4gY2FsbFN0YWNrKGNyZWF0ZVNjcmlwdENhbGxTdGFja0Zyb21F
eGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1Np
emVUb0NhcHR1cmUpKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOworICAgIHZtLmNsZWFy
TGFzdEV4Y2VwdGlvbigpOworCisgICAgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7
CisgICAgaWYgKEpTRE9NV2luZG93KiB3aW5kb3cgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0RPTVdp
bmRvdyo+KHZtLCBnbG9iYWxPYmplY3QpKSB7CisgICAgICAgIGlmICghd2luZG93LT53cmFwcGVk
KCkuaXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaW50IGxpbmVOdW1iZXIgPSAwOworICAgIGludCBjb2x1bW5OdW1iZXIgPSAw
OworICAgIFN0cmluZyBleGNlcHRpb25Tb3VyY2VVUkw7CisgICAgaWYgKGNvbnN0IFNjcmlwdENh
bGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbFN0YWNrLT5maXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSgp
KSB7CisgICAgICAgIGxpbmVOdW1iZXIgPSBjYWxsRnJhbWUtPmxpbmVOdW1iZXIoKTsKKyAgICAg
ICAgY29sdW1uTnVtYmVyID0gY2FsbEZyYW1lLT5jb2x1bW5OdW1iZXIoKTsKKyAgICAgICAgZXhj
ZXB0aW9uU291cmNlVVJMID0gY2FsbEZyYW1lLT5zb3VyY2VVUkwoKTsKKyAgICB9CisKKyAgICBT
dHJpbmcgZXJyb3JNZXNzYWdlID0gcmV0cmlldmVFcnJvck1lc3NhZ2UoKmV4ZWMsIHZtLCBleGNl
cHRpb24tPnZhbHVlKCksIHNjb3BlKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0ID0gZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+cmVwb3J0RXhjZXB0aW9uKGVycm9yTWVz
c2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBleGNlcHRpb25Tb3VyY2VVUkwsIGV4Y2Vw
dGlvbiwgY2FsbFN0YWNrLT5zaXplKCkgPyBjYWxsU3RhY2sgOiBudWxscHRyLCBjYWNoZWRTY3Jp
cHQpOworCisgICAgaWYgKGV4Y2VwdGlvbkRldGFpbHMpIHsKKyAgICAgICAgZXhjZXB0aW9uRGV0
YWlscy0+bWVzc2FnZSA9IGVycm9yTWVzc2FnZTsKKyAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+
bGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAgICAgIGV4Y2VwdGlvbkRldGFpbHMtPmNvbHVt
bk51bWJlciA9IGNvbHVtbk51bWJlcjsKKyAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+c291cmNl
VVJMID0gZXhjZXB0aW9uU291cmNlVVJMOworICAgIH0KK30KKwordm9pZCByZXBvcnRDdXJyZW50
RXhjZXB0aW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBhdXRvKiBleGNl
cHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKKyAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwor
ICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOworfQorCitzdGF0aWMgSlNWYWx1
ZSBjcmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVjLCBj
b25zdCBTdHJpbmcqIG1lc3NhZ2UgPSBudWxscHRyKQoreworICAgIGlmICghZWMgfHwgZWMgPT0g
RXhpc3RpbmdFeGNlcHRpb25FcnJvcikKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisK
KyAgICAvLyBGSVhNRTogSGFuZGxlIG90aGVyIFdlYklETCBleGNlcHRpb24gdHlwZXMuCisgICAg
aWYgKGVjID09IFR5cGVFcnJvcikgeworICAgICAgICBpZiAoIW1lc3NhZ2UgfHwgbWVzc2FnZS0+
aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVjKTsKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAqbWVzc2FnZSk7CisgICAgfQorCisg
ICAgaWYgKGVjID09IFJhbmdlRXJyb3IpIHsKKyAgICAgICAgaWYgKCFtZXNzYWdlIHx8IG1lc3Nh
Z2UtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbCgiQmFkIHZhbHVlIikpOworICAgICAgICByZXR1cm4gY3JlYXRlUmFuZ2VF
cnJvcihleGVjLCAqbWVzc2FnZSk7CisgICAgfQorCisgICAgaWYgKGVjID09IFN0YWNrT3ZlcmZs
b3dFcnJvcikKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVN0YWNrT3ZlcmZsb3dFcnJvcihleGVjKTsK
KworICAgIC8vIEZJWE1FOiBBbGwgY2FsbGVycyB0byBjcmVhdGVET01FeGNlcHRpb24gbmVlZCB0
byBwYXNzIGluIHRoZSBjb3JyZWN0IGdsb2JhbCBvYmplY3QuCisgICAgLy8gRm9yIG5vdywgd2Un
cmUgZ29pbmcgdG8gYXNzdW1lIHRoZSBsZXhpY2FsR2xvYmFsT2JqZWN0LiBXaGljaCBpcyB3cm9u
ZyBpbiBjYXNlcyBsaWtlIHRoaXM6CisgICAgLy8gZnJhbWVzWzBdLmRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQobnVsbCwgbnVsbCk7IC8vIHRocm93cyBhbiBleGNlcHRpb24gd2hpY2ggc2hvdWxkIGhh
dmUgdGhlIHN1YmZyYW1lJ3MgcHJvdG90eXBlcy4KKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKTsKKwor
ICAgIEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbiBkZXNjcmlwdGlvbihlYyk7CisKKyAgICBDU3Ry
aW5nIG1lc3NhZ2VDU3RyaW5nOworICAgIGlmIChtZXNzYWdlKQorICAgICAgICBtZXNzYWdlQ1N0
cmluZyA9IG1lc3NhZ2UtPnV0ZjgoKTsKKyAgICBpZiAobWVzc2FnZSAmJiAhbWVzc2FnZS0+aXNF
bXB0eSgpKSB7CisgICAgICAgIC8vIEl0IGlzIHNhZmUgdG8gZG8gdGhpcyBiZWNhdXNlIHRoZSBj
aGFyKiBjb250ZW50cyBvZiB0aGUgQ1N0cmluZyBhcmUgY29waWVkIGludG8gYSBuZXcgV1RGOjpT
dHJpbmcgYmVmb3JlIHRoZSBDU3RyaW5nIGlzIGRlc3Ryb3llZC4KKyAgICAgICAgZGVzY3JpcHRp
b24uZGVzY3JpcHRpb24gPSBtZXNzYWdlQ1N0cmluZy5kYXRhKCk7CisgICAgfQorCisgICAgSlNW
YWx1ZSBlcnJvck9iamVjdDsKKyAgICBzd2l0Y2ggKGRlc2NyaXB0aW9uLnR5cGUpIHsKKyAgICBj
YXNlIERPTUNvcmVFeGNlcHRpb25UeXBlOgorI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQor
ICAgIGNhc2UgSURCRGF0YWJhc2VFeGNlcHRpb25UeXBlOgorI2VuZGlmCisgICAgICAgIGVycm9y
T2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIERPTUNvcmVFeGNlcHRpb246OmNyZWF0
ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbGVFeGNlcHRpb25U
eXBlOgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBGaWxl
RXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBTUUxFeGNlcHRpb25UeXBlOgorICAgICAgICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCBTUUxFeGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFNWR0V4Y2VwdGlvblR5cGU6CisgICAgICAgIGVycm9yT2JqZWN0ID0g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFNWR0V4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9u
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWFBhdGhFeGNlcHRpb25UeXBlOgorICAgICAg
ICBlcnJvck9iamVjdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBYUGF0aEV4Y2VwdGlvbjo6
Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQoZXJyb3JPYmplY3QpOworICAgIGFkZEVycm9ySW5mbyhleGVjLCBhc09iamVjdChlcnJv
ck9iamVjdCksIHRydWUpOworICAgIHJldHVybiBlcnJvck9iamVjdDsKK30KKworSlNWYWx1ZSBj
cmVhdGVET01FeGNlcHRpb24oRXhlY1N0YXRlKiBleGVjLCBFeGNlcHRpb25Db2RlIGVjLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgcmV0dXJuIGNyZWF0ZURPTUV4Y2VwdGlvbihleGVj
LCBlYywgJm1lc3NhZ2UpOworfQorCitKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3Rh
dGUmIHN0YXRlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCit7CisgICAgcmV0dXJuIGNyZWF0ZURP
TUV4Y2VwdGlvbigmc3RhdGUsIGV4Y2VwdGlvbi5jb2RlKCksIGV4Y2VwdGlvbi5yZWxlYXNlTWVz
c2FnZSgpKTsKK30KKwordm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgdGhyb3dTY29wZSwgRXhjZXB0aW9uJiYgZXhj
ZXB0aW9uKQoreworICAgIEFTU0VSVCghdGhyb3dTY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhy
b3dFeGNlcHRpb24oJnN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVET01FeGNlcHRpb24oc3RhdGUs
IFdURk1vdmUoZXhjZXB0aW9uKSkpOworfQorCitib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGF1dG8mIHZtID0g
c3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisK
KyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEpTT2JqZWN0KiBvYmplY3QgPSBKU0M6OmFzT2JqZWN0KHZhbHVlKTsKKyAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZTsKKyAgICBKU1ZhbHVlIGFwcGx5TWV0aG9k
ID0gb2JqZWN0LT5nZXRNZXRob2QoJnN0YXRlLCBjYWxsRGF0YSwgY2FsbFR5cGUsIHZtLnByb3Bl
cnR5TmFtZXMtPml0ZXJhdG9yU3ltYm9sLCBBU0NJSUxpdGVyYWwoIlN5bWJvbC5pdGVyYXRvciBw
cm9wZXJ0eSBzaG91bGQgYmUgY2FsbGFibGUiKSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgZmFsc2UpOworCisgICAgcmV0dXJuICFhcHBseU1ldGhvZC5pc1VuZGVmaW5lZCgpOwor
fQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEV4ZWNT
dGF0ZSYgc3RhdGUsIEZyYW1lJiBmcmFtZSwgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmIChC
aW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZSgmc3RhdGUsICZmcmFtZSwg
RG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgbWVz
c2FnZSA9IGZyYW1lLmRvY3VtZW50KCktPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vy
cm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhF
eGVjU3RhdGUmIHN0YXRlLCBET01XaW5kb3cmIGdsb2JhbE9iamVjdCwgU3RyaW5nJiBtZXNzYWdl
KQoreworICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5k
b3coJnN0YXRlLCBnbG9iYWxPYmplY3QsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIG1lc3NhZ2UgPSBnbG9iYWxPYmplY3QuY3Jvc3NEb21haW5B
Y2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KCZzdGF0ZSkpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiBmcmFtZSwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVy
bjsKKyAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPnByaW50RXJyb3JNZXNzYWdl
KG1lc3NhZ2UpOworfQorCitTdHJ1Y3R1cmUqIGdldENhY2hlZERPTVN0cnVjdHVyZShKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKK3sK
KyAgICBKU0RPTVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5zdHJ1Y3R1
cmVzKE5vTG9ja2luZ05lY2Vzc2FyeSk7CisgICAgcmV0dXJuIHN0cnVjdHVyZXMuZ2V0KGNsYXNz
SW5mbykuZ2V0KCk7Cit9CisKK1N0cnVjdHVyZSogY2FjaGVET01TdHJ1Y3R1cmUoSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IENsYXNz
SW5mbyogY2xhc3NJbmZvKQoreworICAgIGF1dG8gbG9ja2VyID0gbG9ja0R1cmluZ01hcmtpbmco
Z2xvYmFsT2JqZWN0LnZtKCkuaGVhcCwgZ2xvYmFsT2JqZWN0LmdjTG9jaygpKTsKKyAgICBKU0RP
TVN0cnVjdHVyZU1hcCYgc3RydWN0dXJlcyA9IGdsb2JhbE9iamVjdC5zdHJ1Y3R1cmVzKGxvY2tl
cik7CisgICAgQVNTRVJUKCFzdHJ1Y3R1cmVzLmNvbnRhaW5zKGNsYXNzSW5mbykpOworICAgIHJl
dHVybiBzdHJ1Y3R1cmVzLnNldChjbGFzc0luZm8sIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGds
b2JhbE9iamVjdC52bSgpLCAmZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUpKS5pdGVyYXRvci0+dmFs
dWUuZ2V0KCk7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQzMl90IGtNYXhJbnQzMiA9IDB4N2ZmZmZm
ZmY7CitzdGF0aWMgY29uc3QgaW50MzJfdCBrTWluSW50MzIgPSAta01heEludDMyIC0gMTsKK3N0
YXRpYyBjb25zdCB1aW50MzJfdCBrTWF4VUludDMyID0gMHhmZmZmZmZmZlU7CitzdGF0aWMgY29u
c3QgaW50NjRfdCBrSlNNYXhJbnRlZ2VyID0gMHgyMDAwMDAwMDAwMDAwMExMIC0gMTsgLy8gMl41
MyAtIDEsIGxhcmdlc3QgaW50ZWdlciBleGFjdGx5IHJlcHJlc2VudGFibGUgaW4gRUNNQVNjcmlw
dC4KKworc3RhdGljIFN0cmluZyByYW5nZUVycm9yU3RyaW5nKGRvdWJsZSB2YWx1ZSwgZG91Ymxl
IG1pbiwgZG91YmxlIG1heCkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiVmFsdWUgIiwgU3Ry
aW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQodmFsdWUpLCAiIGlzIG91dHNpZGUgdGhlIHJh
bmdlIFsiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtaW4pLCAiLCAiLCBTdHJp
bmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdChtYXgpLCAiXSIpOworfQorCitzdGF0aWMgZG91
YmxlIGVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBkb3VibGUgeCwgZG91YmxlIG1pbmlt
dW0sIGRvdWJsZSBtYXhpbXVtKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHN0ZDo6aXNuYW4o
eCkgfHwgc3RkOjppc2luZih4KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNj
b3BlLCByYW5nZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIHggPSB0cnVuYyh4KTsKKyAgICBpZiAoeCA8IG1pbmltdW0gfHwg
eCA+IG1heGltdW0pIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFu
Z2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhpbXVtKSk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICByZXR1cm4geDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
SW50VHlwZUxpbWl0cyB7Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVMaW1pdHM8
aW50OF90PiB7CisgICAgc3RhdGljIGNvbnN0IGludDhfdCBtaW5WYWx1ZSA9IC0xMjg7CisgICAg
c3RhdGljIGNvbnN0IGludDhfdCBtYXhWYWx1ZSA9IDEyNzsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAorfTsKKwordGVtcGxhdGUgPD4KK3N0
cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBt
YXhWYWx1ZSA9IDI1NTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMg
PSAyNTY7IC8vIDJeOAorfTsKKwordGVtcGxhdGUgPD4KK3N0cnVjdCBJbnRUeXBlTGltaXRzPGlu
dDE2X3Q+IHsKKyAgICBzdGF0aWMgY29uc3Qgc2hvcnQgbWluVmFsdWUgPSAtMzI3Njg7CisgICAg
c3RhdGljIGNvbnN0IHNob3J0IG1heFZhbHVlID0gMzI3Njc7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG51bWJlck9mVmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKK307CisKK3RlbXBsYXRlIDw+
CitzdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50MTZfdD4geworICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBzaG9ydCBtYXhWYWx1ZSA9IDY1NTM1OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBu
dW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK3N0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1
ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7
CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2lnbmVkPFQ+Ojp2YWx1
ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9y
IHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOworCisgICAgdHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+
IExpbWl0c1RyYWl0OworICAgIC8vIEZhc3QgcGF0aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBh
IDMyLWJpdCBzaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCisgICAgaWYgKHZhbHVl
LmlzSW50MzIoKSkgeworICAgICAgICBpbnQzMl90IGQgPSB2YWx1ZS5hc0ludDMyKCk7CisgICAg
ICAgIGlmIChkID49IExpbWl0c1RyYWl0OjptaW5WYWx1ZSAmJiBkIDw9IExpbWl0c1RyYWl0Ojpt
YXhWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKKyAgICAgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
bnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAgICAg
IHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUpOworICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcDoKKyAgICAg
ICAgICAgIHJldHVybiBkIDwgTGltaXRzVHJhaXQ6Om1pblZhbHVlID8gTGltaXRzVHJhaXQ6Om1p
blZhbHVlIDogTGltaXRzVHJhaXQ6Om1heFZhbHVlOworICAgICAgICB9CisgICAgICAgIGQgJT0g
TGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VD4oZCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/IGQgLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZW
YWx1ZXMgOiBkKTsKKyAgICB9CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisKKyAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24pIHsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6
Tm9ybWFsOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRl
LCB4LCBMaW1pdHNUcmFpdDo6bWluVmFsdWUsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7CisgICAg
Y2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICByZXR1
cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOworICAgIH0KKworICAgIGlmIChz
dGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7CisgICAg
eCA9IGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKTsKKworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPih4ID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8geCAtIExpbWl0c1RyYWl0
OjpudW1iZXJPZlZhbHVlcyA6IHgpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRp
YyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uKQoreworICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBz
dGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHVuc2ln
bmVkIGludGVncmFsIHR5cGVzIik7CisKKyAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4gTGlt
aXRzVHJhaXQ7CisgICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzIt
Yml0IHVuc2lnbmVkIGludGVnZXIgaW4gdGhlIHJpZ2h0IHJhbmdlLgorICAgIGlmICh2YWx1ZS5p
c1VJbnQzMigpKSB7CisgICAgICAgIHVpbnQzMl90IGQgPSB2YWx1ZS5hc1VJbnQzMigpOworICAg
ICAgICBpZiAoZCA8PSBMaW1pdHNUcmFpdDo6bWF4VmFsdWUpCisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAg
ICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgorICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOworICAgICAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAgICAgICAgcmV0
dXJuIExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRvdWJs
ZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCAwKTsKKworICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgeworICAgIGNhc2UgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAg
IHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7
CisgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAg
ICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPFQ+KHgpOworICAgIH0KKworICAg
IGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkgfHwgIXgpCisgICAgICAgIHJldHVy
biAwOworCisgICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9m
VmFsdWVzKSk7Cit9CisKK2ludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90
PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlKTsKK30KKwordWludDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90
PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlKTsKK30KKworaW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZh
bHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKwordWludDhf
dCB0b1VJbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQorewor
ICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNv
bnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3Jn
L1RSL1dlYklETC8jZXMtYnl0ZQoraW50OF90IHRvSW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKK30KKworLy8gaHR0
cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1vY3RldAordWludDhfdCB0b1VJbnQ4KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8
dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5v
cm1hbCk7Cit9CisKK2ludDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRl
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3Rh
dGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7
Cit9CisKK3VpbnQxNl90IHRvVUludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRl
LCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwor
fQorCitpbnQxNl90IHRvSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKwordWludDE2X3QgdG9VSW50
MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0
b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXApOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwv
I2VzLXNob3J0CitpbnQxNl90IHRvSW50MTYoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVySW50PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50
ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQorCisvLyBodHRwOi8vd3d3
LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLXNob3J0Cit1aW50MTZfdCB0b1VJbnQxNihF
eGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJV
SW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
bjo6Tm9ybWFsKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25n
CitpbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAg
IHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7CisgICAgcmV0dXJu
IGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwga01pbkludDMyLCBrTWF4SW50MzIpOworfQorCitpbnQz
Ml90IHRvSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAg
IGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7CisK
KyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6
aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxpbnQzMl90Pih4KTsKK30KKwordWludDMyX3QgdG9VSW50
MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZS5pc1VJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUuYXNVSW50MzIoKTsKKworICAgIGRv
dWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjppc25hbih4
KSA/IDAgOiBjbGFtcFRvPHVpbnQzMl90Pih4KTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nCit1aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5n
ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
aWYgKHZhbHVlLmlzVUludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwor
CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAs
IGtNYXhVSW50MzIpOworfQorCitpbnQ2NF90IHRvSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRl
JiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIC1rSlNNYXhJbnRlZ2Vy
LCBrSlNNYXhJbnRlZ2VyKTsKK30KKwordWludDY0X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
ZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIDApOworICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtKU01h
eEludGVnZXIpOworfQorCitpbnQ2NF90IHRvSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PGludDY0X3Q+
KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAta0pTTWF4SW50ZWdlciksIGtK
U01heEludGVnZXIpKTsKK30KKwordWludDY0X3QgdG9VSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6bWF4PGRvdWJsZT4oeCwgMCksIGtKU01heElu
dGVnZXIpKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nLWxv
bmcKK2ludDY0X3QgdG9JbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQorewor
ICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKworICAgIC8vIE1hcCBOYU5z
IGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQu
CisgICAgdW5zaWduZWQgbG9uZyBsb25nIG47CisgICAgZG91YmxlVG9JbnRlZ2VyKHgsIG4pOwor
ICAgIHJldHVybiBuOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVu
c2lnbmVkLWxvbmctbG9uZwordWludDY0X3QgdG9VSW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisK
KyAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5pdHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFs
dWVzIG1vZHVsbyAyXjY0LgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuOworICAgIGRvdWJsZVRv
SW50ZWdlcih4LCBuKTsKKyAgICByZXR1cm4gbjsKK30KKworY2xhc3MgR2V0Q2FsbGVyR2xvYmFs
T2JqZWN0RnVuY3RvciB7CitwdWJsaWM6CisgICAgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3Rv
cigpID0gZGVmYXVsdDsKKworICAgIFN0YWNrVmlzaXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3Rh
Y2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2hhc1NraXBw
ZWRGaXJzdEZyYW1lKSB7CisgICAgICAgICAgICBtX2hhc1NraXBwZWRGaXJzdEZyYW1lID0gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGF1dG8qIGNvZGVCbG9jayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpKQor
ICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVCh2aXNpdG9yLT5jYWxsZWUoKSk7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogQ2FsbGVlIGlzIG5vdCBhbiBvYmplY3QgaWYgdGhlIGNhbGxl
ciBpcyBXZWIgQXNzZW1ibHkuCisgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8g
aGVyZS4gV2UgY2FuIHByb2JhYmx5IGdldCB0aGUgZ2xvYmFsIG9iamVjdAorICAgICAgICAgICAg
Ly8gZnJvbSB0aGUgdG9wLW1vc3QgV2FzbSBJbnN0YW5jZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NTcyMQorICAgICAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxl
ZSgpLT5pc09iamVjdCgpKQorICAgICAgICAgICAgICAgIG1fZ2xvYmFsT2JqZWN0ID0ganNDYXN0
PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9yOjpEb25lOworICAgIH0KKworICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbE9iamVjdDsg
fQorCitwcml2YXRlOgorICAgIG11dGFibGUgYm9vbCBtX2hhc1NraXBwZWRGaXJzdEZyYW1lIHsg
ZmFsc2UgfTsKKyAgICBtdXRhYmxlIEpTR2xvYmFsT2JqZWN0KiBtX2dsb2JhbE9iamVjdCB7IG51
bGxwdHIgfTsKK307CisKK0RPTVdpbmRvdyYgY2FsbGVyRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yIGl0ZXI7CisgICAgZXhlYy0+
aXRlcmF0ZShpdGVyKTsKKyAgICByZXR1cm4gaXRlci5nbG9iYWxPYmplY3QoKSA/IGFzSlNET01X
aW5kb3coaXRlci5nbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKSA6IGZpcnN0RE9NV2luZG93KGV4
ZWMpOworfQorCitET01XaW5kb3cmIGFjdGl2ZURPTVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+
d3JhcHBlZCgpOworfQorCitET01XaW5kb3cmIGZpcnN0RE9NV2luZG93KEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0
KCkpLT53cmFwcGVkKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjYW5BY2Nlc3NEb2N1bWVu
dChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERvY3VtZW50KiB0YXJnZXREb2N1bWVudCwgU2VjdXJp
dHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQoreworICAgIFZNJiB2bSA9IHN0YXRl
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IGlmICghdGFyZ2V0RG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIERPTVdp
bmRvdyYgYWN0aXZlID0gYWN0aXZlRE9NV2luZG93KHN0YXRlKTsKKworICAgIGlmIChhY3RpdmUu
ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5jYW5BY2Nlc3ModGFyZ2V0RG9jdW1lbnQtPnNl
Y3VyaXR5T3JpZ2luKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHN3aXRjaCAocmVw
b3J0aW5nT3B0aW9uKSB7CisgICAgY2FzZSBUaHJvd1NlY3VyaXR5RXJyb3I6CisgICAgICAgIHRo
cm93U2VjdXJpdHlFcnJvcigqc3RhdGUsIHNjb3BlLCB0YXJnZXREb2N1bWVudC0+ZG9tV2luZG93
KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIExvZ1NlY3VyaXR5RXJyb3I6CisgICAgICAgIHByaW50RXJyb3JNZXNzYWdl
Rm9yRnJhbWUodGFyZ2V0RG9jdW1lbnQtPmZyYW1lKCksIHRhcmdldERvY3VtZW50LT5kb21XaW5k
b3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yOgorICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5Ojpz
aG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRE9NV2lu
ZG93JiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKK3sK
KyAgICByZXR1cm4gY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC5kb2N1bWVudCgpLCBy
ZXBvcnRpbmdPcHRpb24pOworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dB
Y2Nlc3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRnJhbWUqIHRhcmdldCwgU2VjdXJp
dHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQoreworICAgIHJldHVybiB0YXJnZXQg
JiYgY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRhcmdldC0+ZG9jdW1lbnQoKSwgcmVwb3J0aW5n
T3B0aW9uKTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9O
b2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgTm9kZSogdGFyZ2V0KQoreworICAgIHJldHVybiAh
dGFyZ2V0IHx8IGNhbkFjY2Vzc0RvY3VtZW50KCZzdGF0ZSwgJnRhcmdldC0+ZG9jdW1lbnQoKSwg
TG9nU2VjdXJpdHlFcnJvcik7Cit9CisgICAgCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgdGhyb3dU
eXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKK3sKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cigmc3RhdGUsIHNjb3BlLCBlcnJvck1lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRB
cmd1bWVudE11c3RCZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCB1bnNpZ25lZCBhcmd1bWVudElu
ZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
IkFyZ3VtZW50ICIpOworICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGFyZ3VtZW50SW5kZXggKyAx
KTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiAoJyIpOworICAgIGJ1aWxkZXIuYXBwZW5k
KGFyZ3VtZW50TmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCInKSB0byAiKTsKKyAg
ICBpZiAoIWZ1bmN0aW9uTmFtZSkgeworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoInRo
ZSAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7CisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGNvbnN0cnVjdG9yIik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFtZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCcuJyk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZ1bmN0aW9uTmFtZSk7CisgICAgfQorICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG11c3QgYmUgIik7Cit9CisKK0pTQzo6RW5jb2RlZEpT
VmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKK3sK
KyAgICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxl
eGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBjb250
ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVy
cm9yLCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICci
LCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VOYW1lLCAiIG9iamVjdC4i
KSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKyAgICAK
K3ZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKK3sK
KyAgICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxl
eGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBjb250
ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVy
cm9yLCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0dGVtcHQgdG8gc2V0IHByb3BlcnR5ICciLCBh
dHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBpbnRlcmZhY2VOYW1lLCAiIG9iamVjdC4iKSk7
Cit9CisKK3ZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24o
KSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9u
KCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpKTsKK30KKwordm9pZCB0aHJvd05vdFN1cHBvcnRl
ZEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29u
c3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAg
ICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3Rh
dGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUiwg
Jm1lc3NhZ2VTdHJpbmcpKTsKK30KKwordm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVz
c2FnZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICBTdHJpbmcgbWVz
c2FnZVN0cmluZyhtZXNzYWdlKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBj
cmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTlZBTElEX1NUQVRFX0VSUiwgJm1lc3NhZ2VTdHJp
bmcpKTsKK30KKwordm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAg
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBz
Y29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU0VDVVJJVFlfRVJSLCBtZXNzYWdlKSk7
Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcihK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFy
Z3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rp
b25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4
cGVjdGVkVmFsdWVzKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBhcHBlbmRB
cmd1bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0
aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoIm9uZSBvZjogIik7CisgICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRWYWx1ZXMpOworICAg
IHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmco
KSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9u
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNp
Z25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIq
IGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisgICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1l
bnRJbmRleCwgYXJndW1lbnROYW1lLCBpbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOworICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYSBmdW5jdGlvbiIpOworICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Cit9CisKK0pTQzo6
RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0
IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKK3sKKyAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRl
ciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1
bmN0aW9uTmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJhbiBpbnN0YW5jZSBvZiAi
KTsKKyAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFR5cGUpOworICAgIHJldHVybiB0aHJvd1ZN
VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Cit9CisKK3ZvaWQg
dGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRo
cm93U2NvcGUmIHNjb3BlKQoreworICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVND
SUlMaXRlcmFsKCJJbnZhbGlkIEFycmF5IGVsZW1lbnQgdHlwZSIpKTsKK30KKwordm9pZCB0aHJv
d0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0
ZU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJvcihz
dGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJp
YnV0ZU5hbWUsICIgYXR0cmlidXRlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIiwgZXhwZWN0ZWRU
eXBlKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0
IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25zdCBjaGFy
KiBleHBlY3RlZFR5cGUpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiTWVtYmVyICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGRpY3Rpb25h
cnlOYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZCgnLicpOworICAgIGJ1aWxkZXIuYXBwZW5kKG1l
bWJlck5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGlzIHJlcXVpcmVkIGFuZCBt
dXN0IGJlIGFuIGluc3RhbmNlIG9mICIpOworICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVHlw
ZSk7CisgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50
b1N0cmluZygpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9yU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKQorewor
ICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoJnN0YXRlLCBzY29wZSwgY3JlYXRlUmVmZXJlbmNlRXJy
b3IoJnN0YXRlLCBtYWtlU3RyaW5nKGludGVyZmFjZU5hbWUsICIgY29uc3RydWN0b3IgYXNzb2Np
YXRlZCBleGVjdXRpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpKSk7Cit9CisKK3ZvaWQgdGhy
b3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29w
ZSYgc2NvcGUpCit7CisgICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVy
YWwoIlZhbHVlIGlzIG5vdCBhIHNlcXVlbmNlIikpOworfQorCit2b2lkIHRocm93Tm9uRmluaXRl
VHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7Cisg
ICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJUaGUgcHJvdmlk
ZWQgdmFsdWUgaXMgbm9uLWZpbml0ZSIpKTsKK30KKworU3RyaW5nIG1ha2VHZXR0ZXJUeXBlRXJy
b3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0
ZU5hbWUpCit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAn
LicsIGF0dHJpYnV0ZU5hbWUsICIgZ2V0dGVyIGNhbiBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2Vz
IG9mICIsIGludGVyZmFjZU5hbWUpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93R2V0
dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29w
ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkK
K3sKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBtYWtlR2V0dGVy
VHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7Cit9CisKK0pT
Qzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhHZXR0ZXJUeXBlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBh
dHRyaWJ1dGVOYW1lKQoreworICAgIHJldHVybiBjcmVhdGVSZWplY3RlZFByb21pc2VXaXRoVHlw
ZUVycm9yKHN0YXRlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBh
dHRyaWJ1dGVOYW1lKSk7Cit9CisKK2Jvb2wgdGhyb3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZh
Y2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQoreworICAgIHRocm93VHlwZUVycm9y
KHN0YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcuJywgYXR0
cmlidXRlTmFtZSwgIiBzZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBpbnN0YW5jZXMgb2YgIiwg
aW50ZXJmYWNlTmFtZSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIG1ha2VUaGlz
VHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUpCit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNhbiBvbmx5IGNhbGwgIiwg
aW50ZXJmYWNlTmFtZSwgJy4nLCBmdW5jdGlvbk5hbWUsICIgb24gaW5zdGFuY2VzIG9mICIsIGlu
dGVyZmFjZU5hbWUpOworfQorCitFbmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBp
bnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7CisgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVy
ZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVj
dFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmIHByb21pc2UsIGNvbnN0
IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG1ldGhvZE5hbWUpCit7CisgICAgcHJv
bWlzZS5yZWplY3QoVHlwZUVycm9yLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNl
TmFtZSwgbWV0aG9kTmFtZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlw
ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogbWV0aG9kTmFtZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlUmVqZWN0ZWRQcm9t
aXNlV2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFj
ZU5hbWUsIG1ldGhvZE5hbWUpKTsKK30KKwordm9pZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFy
Z3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3Qs
IEpTQzo6SlNGdW5jdGlvbiYgZnVuY3Rpb24pCit7CisgICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0
YTsKKyAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBlID0gSlNDOjpnZXRDYWxsRGF0YSgmZnVuY3Rp
b24sIGNhbGxEYXRhKTsKKyAgICBBU1NFUlQoY2FsbFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwor
CisgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0YXRlLmFyZ3VtZW50Q291bnQoKTsgKytpKQorICAgICAgICBhcmd1
bWVudHMuYXBwZW5kKHN0YXRlLnVuY2hlY2tlZEFyZ3VtZW50KGkpKTsKKyAgICBKU0M6OmNhbGwo
JnN0YXRlLCAmZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgJnRoaXNPYmplY3QsIGFyZ3Vt
ZW50cyk7Cit9CisKK3ZvaWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnZpc2l0Q2hp
bGRyZW4oSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVj
dCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAg
IHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1faW5pdGlhbGl6ZUZ1bmN0aW9uKTsKK30KKwor
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY2FsbFRocm93VHlwZUVycm9yKEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBz
Y29wZSwgQVNDSUlMaXRlcmFsKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyBvcGVyYXRvciIp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKK30KKworQ2FsbFR5cGUg
RE9NQ29uc3RydWN0b3JPYmplY3Q6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxs
RGF0YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsVGhyb3dUeXBlRXJy
b3I7CisgICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0OworfQorCit2b2lkIHRocm93RE9NU3ludGF4
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQorewor
ICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIFNZTlRBWF9FUlIpKTsKK30KKwor
dm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0
aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBE
QVRBX0NMT05FX0VSUikpOworfQorCit2b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VSVCghc2Nv
cGUuZXhjZXB0aW9uKCkpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0
ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElOREVYX1NJWkVfRVJSKSk7Cit9CisKK3ZvaWQgdGhyb3dU
eXBlTWlzbWF0Y2hFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpCit7CisgICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNl
cHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgVFlQRV9NSVNN
QVRDSF9FUlIpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcAkocmV2aXNpb24gMjExMzUzKQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwLDE3MCArMjAsMzIgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRp
b25IYW5kbGluZy5oIgogCiAjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiQ29t
bW9uVk0uaCIKLSNpbmNsdWRlICJET01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oIgotI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJFeGNlcHRpb25IZWFkZXJzLmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uSW50ZXJmYWNlcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0j
aW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0
aW9uLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNl
LmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRv
dy5oIgorI2luY2x1ZGUgIkpTRHluYW1pY0Rvd25jYXN0LmgiCiAjaW5jbHVkZSAiSlNFeGNlcHRp
b25CYXNlLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlIDxieXRlY29k
ZS9Db2RlQmxvY2suaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+CiAj
aW5jbHVkZSA8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3RvcnkuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0RhdGVJbnN0YW5jZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNs
dWRlIDxydW50aW1lL0Vycm9ySGFuZGxpbmdTY29wZS5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJy
b3JJbnN0YW5jZS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRXhjZXB0aW9uLmg+CiAjaW5jbHVkZSA8
cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9u
Lmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNp
bmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIAorI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2luY2x1
ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKLXVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
U1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yT2Jq
ZWN0KTsKLVNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShET01Db25zdHJ1
Y3RvcldpdGhEb2N1bWVudCk7Ci0KLXZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWlj
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgY29tbW9uVk0oKS5hZGRJbXB1cmVQcm9wZXJ0
eShwcm9wZXJ0eU5hbWUpOwotfQotCi1KU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgaWYgKHMuaXNOdWxsKCkpCi0gICAg
ICAgIHJldHVybiBqc051bGwoKTsKLSAgICByZXR1cm4ganNPd25lZFN0cmluZyhleGVjLCBzKTsK
LX0KLQotSlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
U3RyaW5nJiBzKQotewotICAgIGlmIChzLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgcyk7Ci19Ci0KLUpT
VmFsdWUganNTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKLXsKLSAgICBy
ZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdXJsLnN0cmluZygpKTsKLX0KLQotSlNWYWx1
ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVJMJiB1cmwpCi17
Ci0gICAgaWYgKHVybC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHVybC5zdHJpbmcoKSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgU3RyaW5nIHN0cmluZ1RvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlLCBTdHJpbmcmJiBzdHJpbmcpCi17Ci0gICAgaWYgKCFzdHJp
bmcuY29udGFpbnNPbmx5TGF0aW4xKCkpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0cmlu
ZzsKLX0KLQotU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52bSgp
OwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIFN0cmlu
ZyBzdHJpbmcgPSBpZGVudGlmaWVyLnN0cmluZygpOwotICAgIHJldHVybiBzdHJpbmdUb0J5dGVT
dHJpbmcoc3RhdGUsIHNjb3BlLCBXVEZNb3ZlKHN0cmluZykpOwotfQotCi1TdHJpbmcgdmFsdWVU
b0J5dGVTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYg
dm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLQotICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUpOwotICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICByZXR1cm4gc3RyaW5nVG9C
eXRlU3RyaW5nKHN0YXRlLCBzY29wZSwgV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotc3RhdGljIGlu
bGluZSBib29sIGhhc1VucGFpcmVkU3Vycm9nYXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQotewotICAg
IC8vIEZhc3QgcGF0aCBmb3IgOC1iaXQgc3RyaW5nczsgdGhleSBjYW4ndCBoYXZlIGFueSBzdXJy
b2dhdGVzLgotICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBmb3IgKGF1dG8gY29kZVBvaW50IDogc3RyaW5nLmNvZGVQb2ludHMoKSkgewotICAgICAg
ICBpZiAoVV9JU19TVVJST0dBVEUoY29kZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU3RyaW5nIHN0
cmluZ1RvVVNWU3RyaW5nKFN0cmluZyYmIHN0cmluZykKLXsKLSAgICAvLyBGYXN0IHBhdGggZm9y
IHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSBubyB1bnBhaXJlZCBzdXJyb2dhdGVzLgotICAgIGlm
ICghaGFzVW5wYWlyZWRTdXJyb2dhdGUoc3RyaW5nKSkKLSAgICAgICAgcmV0dXJuIHN0cmluZzsK
LQotICAgIC8vIFNsb3cgcGF0aDogaHR0cDovL2hleWNhbS5naXRodWIuaW8vd2ViaWRsLyNkZm4t
b2J0YWluLXVuaWNvZGUKLSAgICAvLyBSZXBsYWNlcyB1bnBhaXJlZCBzdXJyb2dhdGVzIHdpdGgg
dGhlIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4KLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAg
ICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgU3RyaW5nVmll
dyB2aWV3IHsgc3RyaW5nIH07Ci0gICAgZm9yIChhdXRvIGNvZGVQb2ludCA6IHZpZXcuY29kZVBv
aW50cygpKSB7Ci0gICAgICAgIGlmIChVX0lTX1NVUlJPR0FURShjb2RlUG9pbnQpKQotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChyZXBsYWNlbWVudENoYXJhY3Rlcik7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29kZVBvaW50KTsKLSAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdC50b1N0cmluZygpOwotfQotCi1TdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEV4
ZWNTdGF0ZSYsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCi17Ci0gICAgU3RyaW5nIHN0
cmluZyA9IGlkZW50aWZpZXIuc3RyaW5nKCk7Ci0gICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5n
KFdURk1vdmUoc3RyaW5nKSk7Ci19Ci0KLVN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEV4ZWNTdGF0
ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBTdHJpbmcgc3Ry
aW5nID0gdmFsdWUudG9XVEZTdHJpbmcoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOwotCi0gICAgcmV0dXJuIHN0cmluZ1RvVVNWU3RyaW5nKFdURk1vdmUoc3Ry
aW5nKSk7Ci19Ci0KLUpTVmFsdWUganNEYXRlKEV4ZWNTdGF0ZSogZXhlYywgZG91YmxlIHZhbHVl
KQotewotICAgIHJldHVybiBEYXRlSW5zdGFuY2U6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1Y3R1cmUoKSwgdmFsdWUpOwotfQotCi1kb3Vi
bGUgdmFsdWVUb0RhdGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlm
ICh2YWx1ZS5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gdmFsdWUuYXNOdW1iZXIoKTsKLSAg
ICBpZiAoIXZhbHVlLmluaGVyaXRzKGV4ZWMtPnZtKCksIERhdGVJbnN0YW5jZTo6aW5mbygpKSkK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHZhbHVlLnRvT2JqZWN0KGV4
ZWMpKS0+aW50ZXJuYWxOdW1iZXIoKTsKLX0KLQogdm9pZCByZXBvcnRFeGNlcHRpb24oRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVlLCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNj
cmlwdCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpAQCAtMjI5LDEyICs5MSwxMiBAQCB2
b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTCiAKICAgICBFcnJvckhhbmRs
aW5nU2NvcGUgZXJyb3JTY29wZShleGVjLT52bSgpKTsKIAotICAgIFJlZlB0cjxTY3JpcHRDYWxs
U3RhY2s+IGNhbGxTdGFjayhjcmVhdGVTY3JpcHRDYWxsU3RhY2tGcm9tRXhjZXB0aW9uKGV4ZWMs
IGV4Y2VwdGlvbiwgU2NyaXB0Q2FsbFN0YWNrOjptYXhDYWxsU3RhY2tTaXplVG9DYXB0dXJlKSk7
CisgICAgYXV0byBjYWxsU3RhY2sgPSBJbnNwZWN0b3I6OmNyZWF0ZVNjcmlwdENhbGxTdGFja0Zy
b21FeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uLCBJbnNwZWN0b3I6OlNjcmlwdENhbGxTdGFjazo6
bWF4Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVyZSk7CiAgICAgc2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
ICAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKIAotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpOwotICAgIGlmIChKU0RPTVdpbmRvdyogd2luZG93ID0ganNEeW5hbWljRG93
bmNhc3Q8SlNET01XaW5kb3cqPih2bSwgZ2xvYmFsT2JqZWN0KSkgeworICAgIGF1dG8qIGdsb2Jh
bE9iamVjdCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSk7CisgICAgaWYgKGF1dG8qIHdpbmRvdyA9IGpzRHluYW1pY0Rvd25jYXN0PEpTRE9N
V2luZG93Kj4odm0sIGdsb2JhbE9iamVjdCkpIHsKICAgICAgICAgaWYgKCF3aW5kb3ctPndyYXBw
ZWQoKS5pc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0yNDIsMTUgKzEwNCwxNCBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTCiAgICAgaW50IGxpbmVOdW1iZXIgPSAwOwogICAgIGludCBjb2x1bW5OdW1i
ZXIgPSAwOwogICAgIFN0cmluZyBleGNlcHRpb25Tb3VyY2VVUkw7Ci0gICAgaWYgKGNvbnN0IFNj
cmlwdENhbGxGcmFtZSogY2FsbEZyYW1lID0gY2FsbFN0YWNrLT5maXJzdE5vbk5hdGl2ZUNhbGxG
cmFtZSgpKSB7CisgICAgaWYgKGF1dG8qIGNhbGxGcmFtZSA9IGNhbGxTdGFjay0+Zmlyc3ROb25O
YXRpdmVDYWxsRnJhbWUoKSkgewogICAgICAgICBsaW5lTnVtYmVyID0gY2FsbEZyYW1lLT5saW5l
TnVtYmVyKCk7CiAgICAgICAgIGNvbHVtbk51bWJlciA9IGNhbGxGcmFtZS0+Y29sdW1uTnVtYmVy
KCk7CiAgICAgICAgIGV4Y2VwdGlvblNvdXJjZVVSTCA9IGNhbGxGcmFtZS0+c291cmNlVVJMKCk7
CiAgICAgfQogCi0gICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IHJldHJpZXZlRXJyb3JNZXNzYWdl
KCpleGVjLCB2bSwgZXhjZXB0aW9uLT52YWx1ZSgpLCBzY29wZSk7Ci0gICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IGdsb2JhbE9iamVjdC0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnJlcG9ydEV4
Y2VwdGlvbihlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgZXhjZXB0aW9u
U291cmNlVVJMLCBleGNlcHRpb24sIGNhbGxTdGFjay0+c2l6ZSgpID8gY2FsbFN0YWNrIDogbnVs
bHB0ciwgY2FjaGVkU2NyaXB0KTsKKyAgICBhdXRvIGVycm9yTWVzc2FnZSA9IHJldHJpZXZlRXJy
b3JNZXNzYWdlKCpleGVjLCB2bSwgZXhjZXB0aW9uLT52YWx1ZSgpLCBzY29wZSk7CisgICAgZ2xv
YmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnJlcG9ydEV4Y2VwdGlvbihlcnJv
ck1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgZXhjZXB0aW9uU291cmNlVVJMLCBl
eGNlcHRpb24sIGNhbGxTdGFjay0+c2l6ZSgpID8gY2FsbFN0YWNrLnB0cigpIDogbnVsbHB0ciwg
Y2FjaGVkU2NyaXB0KTsKIAogICAgIGlmIChleGNlcHRpb25EZXRhaWxzKSB7CiAgICAgICAgIGV4
Y2VwdGlvbkRldGFpbHMtPm1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7CkBAIC0zNDcsNDYzICsyMDgs
NiBAQCB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKEpTQzo6RXhlCiAgICAgQVNTRVJU
KCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKICAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbihzdGF0ZSwgV1RGTW92ZShleGNlcHRpb24pKSk7
CiB9Ci0KLWJvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmICghdmFsdWUuaXNPYmpl
Y3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNPYmplY3QqIG9iamVjdCA9IEpT
Qzo6YXNPYmplY3QodmFsdWUpOwotICAgIENhbGxEYXRhIGNhbGxEYXRhOwotICAgIENhbGxUeXBl
IGNhbGxUeXBlOwotICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBvYmplY3QtPmdldE1ldGhvZCgm
c3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1i
b2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0ZXJhdG9yIHByb3BlcnR5IHNob3VsZCBiZSBjYWxs
YWJsZSIpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7Ci0KLSAgICBy
ZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5kZWZpbmVkKCk7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoRXhlY1N0YXRlJiBzdGF0ZSwgRnJhbWUmIGZy
YW1lLCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxk
QWxsb3dBY2Nlc3NUb0ZyYW1lKCZzdGF0ZSwgJmZyYW1lLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJy
b3IpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBtZXNzYWdlID0gZnJhbWUuZG9jdW1lbnQo
KS0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdlKGFjdGl2ZURPTVdp
bmRvdygmc3RhdGUpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQmluZGluZ1NlY3Vy
aXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEV4ZWNTdGF0ZSYgc3RhdGUsIERPTVdp
bmRvdyYgZ2xvYmFsT2JqZWN0LCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKEJpbmRpbmdT
ZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUsIGdsb2JhbE9iamVj
dCwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
bWVzc2FnZSA9IGdsb2JhbE9iamVjdC5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3Rp
dmVET01XaW5kb3coJnN0YXRlKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIHByaW50
RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Ci17Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZyYW1lLT5kb2N1bWVu
dCgpLT5kb21XaW5kb3coKS0+cHJpbnRFcnJvck1lc3NhZ2UobWVzc2FnZSk7Ci19Ci0KLVN0cnVj
dHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQotewotICAgIEpTRE9NU3RydWN0dXJlTWFw
JiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LnN0cnVjdHVyZXMoTm9Mb2NraW5nTmVjZXNzYXJ5
KTsKLSAgICByZXR1cm4gc3RydWN0dXJlcy5nZXQoY2xhc3NJbmZvKS5nZXQoKTsKLX0KLQotU3Ry
dWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCi17Ci0g
ICAgYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFya2luZyhnbG9iYWxPYmplY3Qudm0oKS5oZWFw
LCBnbG9iYWxPYmplY3QuZ2NMb2NrKCkpOwotICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1
cmVzID0gZ2xvYmFsT2JqZWN0LnN0cnVjdHVyZXMobG9ja2VyKTsKLSAgICBBU1NFUlQoIXN0cnVj
dHVyZXMuY29udGFpbnMoY2xhc3NJbmZvKSk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZXMuc2V0KGNs
YXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4oZ2xvYmFsT2JqZWN0LnZtKCksICZnbG9i
YWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLX0KLQotc3RhdGlj
IGNvbnN0IGludDMyX3Qga01heEludDMyID0gMHg3ZmZmZmZmZjsKLXN0YXRpYyBjb25zdCBpbnQz
Ml90IGtNaW5JbnQzMiA9IC1rTWF4SW50MzIgLSAxOwotc3RhdGljIGNvbnN0IHVpbnQzMl90IGtN
YXhVSW50MzIgPSAweGZmZmZmZmZmVTsKLXN0YXRpYyBjb25zdCBpbnQ2NF90IGtKU01heEludGVn
ZXIgPSAweDIwMDAwMDAwMDAwMDAwTEwgLSAxOyAvLyAyXjUzIC0gMSwgbGFyZ2VzdCBpbnRlZ2Vy
IGV4YWN0bHkgcmVwcmVzZW50YWJsZSBpbiBFQ01BU2NyaXB0LgotCi1zdGF0aWMgU3RyaW5nIHJh
bmdlRXJyb3JTdHJpbmcoZG91YmxlIHZhbHVlLCBkb3VibGUgbWluLCBkb3VibGUgbWF4KQotewot
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJWYWx1ZSAiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNN
QVNjcmlwdCh2YWx1ZSksICIgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWyIsIFN0cmluZzo6bnVtYmVy
VG9TdHJpbmdFQ01BU2NyaXB0KG1pbiksICIsICIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01B
U2NyaXB0KG1heCksICJdIik7Ci19Ci0KLXN0YXRpYyBkb3VibGUgZW5mb3JjZVJhbmdlKEV4ZWNT
dGF0ZSYgc3RhdGUsIGRvdWJsZSB4LCBkb3VibGUgbWluaW11bSwgZG91YmxlIG1heGltdW0pCi17
Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoc3RkOjppc25hbih4KSB8fCBzdGQ6OmlzaW5mKHgpKSB7
Ci0gICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIHJhbmdlRXJyb3JTdHJpbmco
eCwgbWluaW11bSwgbWF4aW11bSkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgeCA9
IHRydW5jKHgpOwotICAgIGlmICh4IDwgbWluaW11bSB8fCB4ID4gbWF4aW11bSkgewotICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5nZUVycm9yU3RyaW5nKHgsIG1pbmlt
dW0sIG1heGltdW0pKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiB4Owot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzIHsKLX07Ci0K
LXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czxpbnQ4X3Q+IHsKLSAgICBzdGF0aWMg
Y29uc3QgaW50OF90IG1pblZhbHVlID0gLTEyODsKLSAgICBzdGF0aWMgY29uc3QgaW50OF90IG1h
eFZhbHVlID0gMTI3OwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9
IDI1NjsgLy8gMl44Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8dWlu
dDhfdD4gewotICAgIHN0YXRpYyBjb25zdCB1aW50OF90IG1heFZhbHVlID0gMjU1OwotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDI1NjsgLy8gMl44Ci19OwotCi10
ZW1wbGF0ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8aW50MTZfdD4gewotICAgIHN0YXRpYyBj
b25zdCBzaG9ydCBtaW5WYWx1ZSA9IC0zMjc2ODsKLSAgICBzdGF0aWMgY29uc3Qgc2hvcnQgbWF4
VmFsdWUgPSAzMjc2NzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMg
PSA2NTUzNjsgLy8gMl4xNgotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRz
PHVpbnQxNl90PiB7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG1heFZhbHVlID0g
NjU1MzU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gNjU1MzY7
IC8vIDJeMTYKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBUIHRv
U21hbGxlckludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19zaWduZWQ8VD46OnZhbHVlICYmIHN0ZDo6aXNfaW50ZWdyYWw8
VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Igc2lnbmVkIGludGVncmFsIHR5cGVz
Iik7Ci0KLSAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4gTGltaXRzVHJhaXQ7Ci0gICAgLy8g
RmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0IHNpZ25lZCBpbnRlZ2Vy
IGluIHRoZSByaWdodCByYW5nZS4KLSAgICBpZiAodmFsdWUuaXNJbnQzMigpKSB7Ci0gICAgICAg
IGludDMyX3QgZCA9IHZhbHVlLmFzSW50MzIoKTsKLSAgICAgICAgaWYgKGQgPj0gTGltaXRzVHJh
aXQ6Om1pblZhbHVlICYmIGQgPD0gTGltaXRzVHJhaXQ6Om1heFZhbHVlKQotICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOwotICAgICAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24p
IHsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmln
dXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRl
LCBzY29wZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIGQgPCBMaW1p
dHNUcmFpdDo6bWluVmFsdWUgPyBMaW1pdHNUcmFpdDo6bWluVmFsdWUgOiBMaW1pdHNUcmFpdDo6
bWF4VmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgZCAlPSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZW
YWx1ZXM7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkID4gTGltaXRzVHJhaXQ6Om1h
eFZhbHVlID8gZCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyA6IGQpOwotICAgIH0KLQot
ICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCAwKTsKLQotICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgIGNh
c2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6
Ci0gICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIExpbWl0c1RyYWl0OjptaW5W
YWx1ZSwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKLSAgICBjYXNlIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6
IGNsYW1wVG88VD4oeCk7Ci0gICAgfQotCi0gICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjpp
c2luZih4KSB8fCAheCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB4ID0geCA8IDAgPyAtZmxv
b3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsKLSAgICB4ID0gZm1vZCh4LCBMaW1pdHNUcmFp
dDo6bnVtYmVyT2ZWYWx1ZXMpOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHggPiBMaW1p
dHNUcmFpdDo6bWF4VmFsdWUgPyB4IC0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzIDogeCk7
Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIGlubGluZSBUIHRvU21hbGxlclVJ
bnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZhbHVlICYmIHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZh
bHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdW5zaWduZWQgaW50ZWdyYWwgdHlwZXMiKTsK
LQotICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBMaW1pdHNUcmFpdDsKLSAgICAvLyBGYXN0
IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciBp
biB0aGUgcmlnaHQgcmFuZ2UuCi0gICAgaWYgKHZhbHVlLmlzVUludDMyKCkpIHsKLSAgICAgICAg
dWludDMyX3QgZCA9IHZhbHVlLmFzVUludDMyKCk7Ci0gICAgICAgIGlmIChkIDw9IExpbWl0c1Ry
YWl0OjptYXhWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihkKTsKLSAg
ICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VD4oZCk7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpF
bmZvcmNlUmFuZ2U6Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsK
LSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgICAgICByZXR1cm4gTGltaXRzVHJhaXQ6Om1heFZh
bHVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigm
c3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotCi0gICAgc3dpdGNo
IChjb25maWd1cmF0aW9uKSB7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246Ok5vcm1hbDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKLSAgICAgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShz
dGF0ZSwgeCwgMCwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKLSAgICBjYXNlIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6Ci0gICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKHgp
ID8gMCA6IGNsYW1wVG88VD4oeCk7Ci0gICAgfQotCi0gICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwg
c3RkOjppc2luZih4KSB8fCAheCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB4ID0geCA8IDAg
PyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VD4oZm1vZCh4LCBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMpKTsKLX0KLQotaW50OF90
IHRvSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi11aW50OF90IHRv
VUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQot
ewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdl
ckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi1pbnQ4X3QgdG9J
bnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJl
dHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9u
Q29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi11aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJ
bnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkNsYW1wKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1ieXRlCi1p
bnQ4X3QgdG9JbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0
dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJ
REwvI2VzLW9jdGV0Ci11aW50OF90IHRvVUludDgoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2
YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUs
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotaW50MTZfdCB0
b0ludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252
ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotdWludDE2X3QgdG9VSW50
MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVy
c2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLWludDE2X3QgdG9JbnQxNkNs
YW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21h
bGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Q2xhbXApOwotfQotCi11aW50MTZfdCB0b1VJbnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+
KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7Ci19
Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtc2hvcnQKLWludDE2X3QgdG9J
bnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1Nt
YWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246Ok5vcm1hbCk7Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMt
dW5zaWduZWQtc2hvcnQKLXVpbnQxNl90IHRvVUludDE2KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2
YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOwotfQotCi0vLyBo
dHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmcKLWludDMyX3QgdG9JbnQzMkVuZm9y
Y2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9
IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwot
Ci0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIo
KTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLSAgICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4
LCBrTWluSW50MzIsIGtNYXhJbnQzMik7Ci19Ci0KLWludDMyX3QgdG9JbnQzMkNsYW1wKEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkK
LSAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUu
dG9OdW1iZXIoJnN0YXRlKTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRv
PGludDMyX3Q+KHgpOwotfQotCi11aW50MzJfdCB0b1VJbnQzMkNsYW1wKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAg
IHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88dWludDMy
X3Q+KHgpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVk
LWxvbmcKLXVpbnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAodmFsdWUuaXNVSW50MzIoKSkK
LSAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVl
LnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0g
ICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga01heFVJbnQzMik7Ci19Ci0KLWlu
dDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZz
dGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0gICAgcmV0dXJuIGVu
Zm9yY2VSYW5nZShzdGF0ZSwgeCwgLWtKU01heEludGVnZXIsIGtKU01heEludGVnZXIpOwotfQot
Ci11aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVt
YmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgMCk7Ci0gICAgcmV0
dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga0pTTWF4SW50ZWdlcik7Ci19Ci0KLWludDY0
X3QgdG9JbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6
aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjptaW48ZG91YmxlPihzdGQ6
Om1heDxkb3VibGU+KHgsIC1rSlNNYXhJbnRlZ2VyKSwga0pTTWF4SW50ZWdlcikpOwotfQotCi11
aW50NjRfdCB0b1VJbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKLXsKLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgcmV0dXJu
IHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHN0ZDo6bWluPGRvdWJs
ZT4oc3RkOjptYXg8ZG91YmxlPih4LCAwKSwga0pTTWF4SW50ZWdlcikpOwotfQotCi0vLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmctbG9uZwotaW50NjRfdCB0b0ludDY0KEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91YmxlIHggPSB2YWx1ZS50
b051bWJlcigmc3RhdGUpOwotCi0gICAgLy8gTWFwIE5hTnMgYW5kICsvLUluZmluaXR5IHRvIDA7
IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4KLSAgICB1bnNpZ25lZCBsb25nIGxv
bmcgbjsKLSAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7Ci0gICAgcmV0dXJuIG47Ci19Ci0KLS8v
IGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtbG9uZy1sb25nCi11aW50
NjRfdCB0b1VJbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGRv
dWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKLQotICAgIC8vIE1hcCBOYU5zIGFuZCAr
Ly1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCi0gICAg
dW5zaWduZWQgbG9uZyBsb25nIG47Ci0gICAgZG91YmxlVG9JbnRlZ2VyKHgsIG4pOwotICAgIHJl
dHVybiBuOwotfQotCi1jbGFzcyBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yIHsKLXB1Ymxp
YzoKLSAgICBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9yKCkgPSBkZWZhdWx0OwotCi0gICAg
U3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFja1Zpc2l0b3ImIHZpc2l0b3IpIGNv
bnN0Ci0gICAgewotICAgICAgICBpZiAoIW1faGFzU2tpcHBlZEZpcnN0RnJhbWUpIHsKLSAgICAg
ICAgICAgIG1faGFzU2tpcHBlZEZpcnN0RnJhbWUgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJu
IFN0YWNrVmlzaXRvcjo6Q29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXV0byog
Y29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCkpCi0gICAgICAgICAgICBtX2dsb2JhbE9i
amVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgQVNTRVJUKHZpc2l0b3ItPmNhbGxlZSgpKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBD
YWxsZWUgaXMgbm90IGFuIG9iamVjdCBpZiB0aGUgY2FsbGVyIGlzIFdlYiBBc3NlbWJseS4KLSAg
ICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyBoZXJlLiBXZSBjYW4gcHJvYmFibHkg
Z2V0IHRoZSBnbG9iYWwgb2JqZWN0Ci0gICAgICAgICAgICAvLyBmcm9tIHRoZSB0b3AtbW9zdCBX
YXNtIEluc3RhbmNlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1
NzIxCi0gICAgICAgICAgICBpZiAodmlzaXRvci0+Y2FsbGVlKCktPmlzT2JqZWN0KCkpCi0gICAg
ICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPih2aXNpdG9yLT5j
YWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTdGFj
a1Zpc2l0b3I6OkRvbmU7Ci0gICAgfQotCi0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0OyB9Ci0KLXByaXZhdGU6Ci0gICAgbXV0
YWJsZSBib29sIG1faGFzU2tpcHBlZEZpcnN0RnJhbWUgeyBmYWxzZSB9OwotICAgIG11dGFibGUg
SlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0IHsgbnVsbHB0ciB9OwotfTsKLQotRE9NV2lu
ZG93JiBjYWxsZXJET01XaW5kb3coRXhlY1N0YXRlKiBleGVjKQotewotICAgIEdldENhbGxlckds
b2JhbE9iamVjdEZ1bmN0b3IgaXRlcjsKLSAgICBleGVjLT5pdGVyYXRlKGl0ZXIpOwotICAgIHJl
dHVybiBpdGVyLmdsb2JhbE9iamVjdCgpID8gYXNKU0RPTVdpbmRvdyhpdGVyLmdsb2JhbE9iamVj
dCgpKS0+d3JhcHBlZCgpIDogZmlyc3RET01XaW5kb3coZXhlYyk7Ci19Ci0KLURPTVdpbmRvdyYg
YWN0aXZlRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gYXNKU0RPTVdp
bmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCk7Ci19Ci0KLURPTVdp
bmRvdyYgZmlyc3RET01XaW5kb3coRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBhc0pT
RE9NV2luZG93KGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3QoKSktPndyYXBwZWQoKTsKLX0KLQot
c3RhdGljIGlubGluZSBib29sIGNhbkFjY2Vzc0RvY3VtZW50KEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgRG9jdW1lbnQqIHRhcmdldERvY3VtZW50LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBv
cnRpbmdPcHRpb24pCi17Ci0gICAgVk0mIHZtID0gc3RhdGUtPnZtKCk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKCF0YXJnZXREb2N1bWVudCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRE9NV2luZG93JiBhY3RpdmUgPSBhY3RpdmVE
T01XaW5kb3coc3RhdGUpOwotCi0gICAgaWYgKGFjdGl2ZS5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLmNhbkFjY2Vzcyh0YXJnZXREb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgc3dpdGNoIChyZXBvcnRpbmdPcHRpb24pIHsKLSAgICBj
YXNlIFRocm93U2VjdXJpdHlFcnJvcjoKLSAgICAgICAgdGhyb3dTZWN1cml0eUVycm9yKCpzdGF0
ZSwgc2NvcGUsIHRhcmdldERvY3VtZW50LT5kb21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NF
cnJvck1lc3NhZ2UoYWN0aXZlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTG9nU2VjdXJp
dHlFcnJvcjoKLSAgICAgICAgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZSh0YXJnZXREb2N1bWVu
dC0+ZnJhbWUoKSwgdGFyZ2V0RG9jdW1lbnQtPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vz
c0Vycm9yTWVzc2FnZShhY3RpdmUpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb05vdFJl
cG9ydFNlY3VyaXR5RXJyb3I6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01X
aW5kb3coSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBET01XaW5kb3cmIHRhcmdldCwgU2VjdXJpdHlS
ZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQotewotICAgIHJldHVybiBjYW5BY2Nlc3NE
b2N1bWVudChzdGF0ZSwgdGFyZ2V0LmRvY3VtZW50KCksIHJlcG9ydGluZ09wdGlvbik7Ci19Ci0K
LWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBGcmFtZSogdGFyZ2V0LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBv
cnRpbmdPcHRpb24pCi17Ci0gICAgcmV0dXJuIHRhcmdldCAmJiBjYW5BY2Nlc3NEb2N1bWVudChz
dGF0ZSwgdGFyZ2V0LT5kb2N1bWVudCgpLCByZXBvcnRpbmdPcHRpb24pOwotfQotCi1ib29sIEJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBOb2RlKiB0YXJnZXQpCi17Ci0gICAgcmV0dXJuICF0YXJnZXQgfHwgY2FuQWNjZXNzRG9j
dW1lbnQoJnN0YXRlLCAmdGFyZ2V0LT5kb2N1bWVudCgpLCBMb2dTZWN1cml0eUVycm9yKTsKLX0K
ICAgICAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSB0aHJvd1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlKQogewpAQCAtOTczLDQwICszNzcsNiBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFBy
b21pc2VXaXRoVGhpCiAgICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJy
b3Ioc3RhdGUsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBtZXRob2RO
YW1lKSk7CiB9CiAKLXZvaWQgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTT2JqZWN0JiB0aGlzT2JqZWN0LCBKU0M6OkpTRnVuY3Rp
b24mIGZ1bmN0aW9uKQotewotICAgIEpTQzo6Q2FsbERhdGEgY2FsbERhdGE7Ci0gICAgSlNDOjpD
YWxsVHlwZSBjYWxsVHlwZSA9IEpTQzo6Z2V0Q2FsbERhdGEoJmZ1bmN0aW9uLCBjYWxsRGF0YSk7
Ci0gICAgQVNTRVJUKGNhbGxUeXBlICE9IENhbGxUeXBlOjpOb25lKTsKLQotICAgIEpTQzo6TWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdGF0ZS5hcmd1bWVudENvdW50KCk7ICsraSkKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZChz
dGF0ZS51bmNoZWNrZWRBcmd1bWVudChpKSk7Ci0gICAgSlNDOjpjYWxsKCZzdGF0ZSwgJmZ1bmN0
aW9uLCBjYWxsVHlwZSwgY2FsbERhdGEsICZ0aGlzT2JqZWN0LCBhcmd1bWVudHMpOwotfQotCi12
b2lkIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQzo6SlND
ZWxsKiBjZWxsLCBKU0M6OlNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIGF1dG8qIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8RE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QqPihjZWxsKTsKLSAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX2luaXRpYWxpemVGdW5jdGlvbik7Ci19Ci0KLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNhbGxUaHJvd1R5cGVFcnJvcihFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7Ci0gICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldycgb3BlcmF0b3IiKSk7Ci0gICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci19Ci0KLUNhbGxUeXBlIERPTUNvbnN0cnVjdG9y
T2JqZWN0OjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCi17Ci0gICAg
Y2FsbERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbFRocm93VHlwZUVycm9yOwotICAgIHJldHVy
biBDYWxsVHlwZTo6SG9zdDsKLX0KLQogdm9pZCB0aHJvd0RPTVN5bnRheEVycm9yKEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKIHsKICAgICBBU1NFUlQoIXNj
b3BlLmV4Y2VwdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgJKHJldmlzaW9uIDIxMTM1MykJKGZyb20gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6MjExMzUzKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODI1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhh
cnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDYs
IDIwMDgtMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3ZWJraXQub3JnPgorICog
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMTIgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDEzIE1pY2hhZWwgUHJ1ZXR0IDxtaWNoYWVsQDY4ay5vcmc+Cisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkRPTVdyYXBwZXJXb3JsZC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRl
ICJFeGNlcHRpb25Pci5oIgorI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVk
ZSAiSlNET01XcmFwcGVyLmgiCisjaW5jbHVkZSAiSlNEeW5hbWljRG93bmNhc3QuaCIKKyNpbmNs
dWRlICJTY3JpcHRXcmFwcGFibGUuaCIKKyNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGVJbmxpbmVz
LmgiCisjaW5jbHVkZSAiV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmgiCisjaW5jbHVkZSA8
Y3N0ZGRlZj4KKyNpbmNsdWRlIDxoZWFwL0hlYXBJbmxpbmVzLmg+CisjaW5jbHVkZSA8aGVhcC9T
bG90VmlzaXRvcklubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL1dlYWsuaD4KKyNpbmNsdWRlIDxo
ZWFwL1dlYWtJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9BdXhpbGlhcnlCYXJyaWVySW5s
aW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lL0l0
ZXJhdG9yT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgorI2luY2x1
ZGUgPHJ1bnRpbWUvSlNBcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSlNWYWx1
ZUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTQ2VsbElubGluZXMuaD4KKyNpbmNsdWRl
IDxydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFy
cmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvTG9va3VwLmg+CisjaW5jbHVkZSA8cnVudGltZS9P
YmplY3RDb25zdHJ1Y3Rvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5o
PgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50
aW1lL1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGltZS9Xcml0ZUJhcnJpZXIuaD4KKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKy8vIEZJWE1F
OiBXZSBjb3VsZCBtYWtlIHRoaXMgZmlsZSBhIGxvdCBlYXNpZXIgdG8gcmVhZCBieSBwdXR0aW5n
IGFsbCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYXQgdGhlIHRvcCwKKy8vIGFuZCBmdW5jdGlvbiBk
ZWZpbml0aW9ucyBiZWxvdywgZXZlbiBmb3IgdGVtcGxhdGUgYW5kIGlubGluZSBmdW5jdGlvbnMu
CisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgSlNGdW5jdGlvbjsKK30KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDYWNoZWRTY3JpcHQ7CitjbGFzcyBEZWZlcnJlZFByb21pc2U7Citj
bGFzcyBET01XaW5kb3c7CitjbGFzcyBGcmFtZTsKK2NsYXNzIFVSTDsKK2NsYXNzIE5vZGU7CisK
K3N0cnVjdCBFeGNlcHRpb25EZXRhaWxzIHsKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICBpbnQg
bGluZU51bWJlciB7IDAgfTsKKyAgICBpbnQgY29sdW1uTnVtYmVyIHsgMCB9OworICAgIFN0cmlu
ZyBzb3VyY2VVUkw7Cit9OworCisvLyBCYXNlIGNsYXNzIGZvciBhbGwgY29uc3RydWN0b3Igb2Jq
ZWN0cyBpbiB0aGUgSlNDIGJpbmRpbmdzLgorY2xhc3MgRE9NQ29uc3RydWN0b3JPYmplY3QgOiBw
dWJsaWMgSlNET01PYmplY3QgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNET01PYmplY3QgQmFz
ZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1
Y3R1cmVGbGFncyB8IEpTQzo6SW1wbGVtZW50c0hhc0luc3RhbmNlIHwgSlNDOjpJbXBsZW1lbnRz
RGVmYXVsdEhhc0luc3RhbmNlIHwgSlNDOjpUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGE7Cisg
ICAgc3RhdGljIEpTQzo6U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNDOjpWTSYsIEpTQzo6
SlNHbG9iYWxPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworCitwcm90ZWN0ZWQ6CisgICAgRE9NQ29u
c3RydWN0b3JPYmplY3QoSlNDOjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOworCisg
ICAgc3RhdGljIFN0cmluZyBjbGFzc05hbWUoY29uc3QgSlNPYmplY3QqKTsKKyAgICBzdGF0aWMg
SlNDOjpDYWxsVHlwZSBnZXRDYWxsRGF0YShKU0NlbGwqLCBKU0M6OkNhbGxEYXRhJik7Cit9Owor
CitjbGFzcyBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCA6IHB1YmxpYyBET01Db25zdHJ1
Y3Rvck9iamVjdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBET01Db25zdHJ1Y3Rvck9iamVjdCBC
YXNlOworCitwcm90ZWN0ZWQ6CisgICAgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3QoSlND
OjpTdHJ1Y3R1cmUqLCBKU0RPTUdsb2JhbE9iamVjdCYpOworICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDOjpKU0NlbGwqLCBKU0M6OlNsb3RWaXNpdG9yJik7CisKKyAgICBKU0M6OkpT
RnVuY3Rpb24qIGluaXRpYWxpemVGdW5jdGlvbigpOworICAgIHZvaWQgc2V0SW5pdGlhbGl6ZUZ1
bmN0aW9uKEpTQzo6Vk0mLCBKU0M6OkpTRnVuY3Rpb24mKTsKKworcHJpdmF0ZToKKyAgICBKU0M6
OldyaXRlQmFycmllcjxKU0M6OkpTRnVuY3Rpb24+IG1faW5pdGlhbGl6ZUZ1bmN0aW9uOworfTsK
KworRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKK0RPTVdpbmRv
dyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CitET01XaW5kb3cmIGZpcnN0RE9N
V2luZG93KEpTQzo6RXhlY1N0YXRlKik7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpT
VmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitXRUJDT1JF
X0VYUE9SVCB2b2lkIHJlcG9ydERlcHJlY2F0ZWRTZXR0ZXJFcnJvcihKU0M6OkV4ZWNTdGF0ZSYs
IGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwor
Cit2b2lkIHRocm93QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJv
d1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRl
TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK1dFQkNPUkVfRVhQT1JUIGJvb2wgdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25z
dCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKKwordm9p
ZCB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYpOwordm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJik7Cit2b2lkIHRocm93RE9NU3ludGF4RXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OlRocm93U2NvcGUmKTsgLy8gTm90IHRoZSBzYW1lIGFzIGEgSmF2YVNjcmlwdCBzeW50YXgg
ZXJyb3IuCit2b2lkIHRocm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmKTsKK3ZvaWQgdGhyb3dJbnZhbGlkU3RhdGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOworV0VCQ09SRV9FWFBPUlQg
dm9pZCB0aHJvd05vbkZpbml0ZVR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYpOwordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKK3ZvaWQgdGhyb3dT
ZWN1cml0eUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgdGhyb3dTZXF1ZW5jZVR5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJvd1R5cGVNaXNt
YXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7CisKK1dFQkNPUkVf
RVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUVudW1FcnJvcihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgs
IGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVz
KTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3Io
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4
LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uSW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5j
b2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50
TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlwZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6
OkVuY29kZWRKU1ZhbHVlIHRocm93UmVxdWlyZWRNZW1iZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBtZW1iZXJOYW1lLCBjb25zdCBjaGFy
KiBkaWN0aW9uYXJ5TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKK0pTQzo6RW5jb2Rl
ZEpTVmFsdWUgdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJs
ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSk7CisKK1N0cmluZyBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShjb25zdCBj
aGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKK1N0cmluZyBt
YWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3Qg
Y2hhciogYXR0cmlidXRlTmFtZSk7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFs
dWUgdGhyb3dHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsK
K1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dUaGlzVHlwZUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKKworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUp
OworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRo
aXNUeXBlRXJyb3IoRGVmZXJyZWRQcm9taXNlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRK
U1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIGNv
bnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5hbWUpOworCitX
RUJDT1JFX0VYUE9SVCBKU0M6OlN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9N
R2xvYmFsT2JqZWN0JiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKK1dFQkNPUkVfRVhQT1JUIEpT
Qzo6U3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6
U3RydWN0dXJlKiwgY29uc3QgSlNDOjpDbGFzc0luZm8qKTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
V3JhcHBlckNsYXNzPiBKU0M6OlN0cnVjdHVyZSogZ2V0RE9NU3RydWN0dXJlKEpTQzo6Vk0mLCBK
U0RPTUdsb2JhbE9iamVjdCYpOwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6
OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSopOwor
dGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTT2JqZWN0KiBnZXRET01Qcm90
b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKKwordm9pZCBjYWxsRnVuY3Rp
b25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNPYmplY3QmIHRo
aXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNz
PiBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYpOwor
CitKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYsIEpT
Qzo6QXJyYXlCdWZmZXIqKTsKK3ZvaWQqIHdyYXBwZXJLZXkoSlNDOjpBcnJheUJ1ZmZlciopOwor
CitKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2
b2lkKik7CitKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29y
bGQmLCBTY3JpcHRXcmFwcGFibGUqKTsKK0pTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKik7CisKK2Jvb2wg
c2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmpl
Y3QqLCBKU0M6OldlYWtIYW5kbGVPd25lciopOworYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVy
KERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9NT2JqZWN0KiB3cmFwcGVy
LCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKTsKK2Jvb2wgc2V0SW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVyKiwgSlNDOjpKU0Fy
cmF5QnVmZmVyKiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKTsK
KworYm9vbCBjbGVhcklubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCos
IEpTRE9NT2JqZWN0Kik7Citib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVy
V29ybGQmLCBTY3JpcHRXcmFwcGFibGUqLCBKU0RPTU9iamVjdCogd3JhcHBlcik7Citib29sIGNs
ZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBKU0M6OkFycmF5QnVmZmVy
KiwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRE9N
Q2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwg
RE9NQ2xhc3MmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUgSlNDOjpKU09i
amVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBSZWY8RE9NQ2xh
c3M+JiBvYmplY3QpIHsgcmV0dXJuIGdldENhY2hlZFdyYXBwZXIod29ybGQsIG9iamVjdC5nZXQo
KSk7IH0KK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+
IHZvaWQgY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNzKiwgV3JhcHBlckNs
YXNzKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNz
PiB2b2lkIHVuY2FjaGVXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIERPTUNsYXNzKiwgV3JhcHBl
ckNsYXNzKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gYXV0byBj
cmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpIC0+IHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBK
U0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlw
ZTsKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBhdXRvIGNyZWF0ZVdy
YXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8IXN0ZDo6aXNfc2FtZTxET01DbGFzcywgVD46OnZhbHVlLCB0eXBlbmFtZSBKU0RPTVdy
YXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3MqPjo6dHlwZTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNWYWx1ZSB3cmFwKEpTQzo6RXhlY1N0
YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBET01DbGFzcyYpOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBKU0NsYXNzPiBKU0NsYXNzJiBjYXN0VGhpc1ZhbHVlKEpTQzo6RXhlY1N0YXRlJik7CisKK3Zv
aWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5nJik7CisKK2NvbnN0IEpTQzo6
SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKEpTQzo6Vk0mLCBjb25zdCBKU0M6
Okhhc2hUYWJsZSYgc3RhdGljVGFibGUpOworCitTdHJpbmcgcmV0cmlldmVFcnJvck1lc3NhZ2Uo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiwgSlNDOjpD
YXRjaFNjb3BlJik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9ydEV4Y2VwdGlvbihKU0M6OkV4
ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogPSBudWxscHRy
KTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwg
SlNDOjpFeGNlcHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0ciwgRXhjZXB0aW9uRGV0YWls
cyogPSBudWxscHRyKTsKK3ZvaWQgcmVwb3J0Q3VycmVudEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0
ZSopOworCitKU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwg
RXhjZXB0aW9uJiYpOworSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZWNT
dGF0ZSosIEV4Y2VwdGlvbkNvZGUsIGNvbnN0IFN0cmluZyYpOworCisvLyBDb252ZXJ0IGEgRE9N
IGltcGxlbWVudGF0aW9uIGV4Y2VwdGlvbiBpbnRvIGEgSmF2YVNjcmlwdCBleGNlcHRpb24gaW4g
dGhlIGV4ZWN1dGlvbiBzdGF0ZS4KK3ZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOworV0VCQ09SRV9FWFBPUlQgdm9p
ZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dT
Y29wZSYsIEV4Y2VwdGlvbiYmKTsKKworSlNDOjpKU1ZhbHVlIGpzU3RyaW5nKEpTQzo6RXhlY1N0
YXRlKiwgY29uc3QgVVJMJik7IC8vIGVtcHR5IGlmIHRoZSBVUkwgaXMgbnVsbAorCitKU0M6OkpT
VmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYp
OyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCitKU0M6OkpTVmFsdWUganNTdHJp
bmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFVSTCYpOyAvLyB1bmRlZmluZWQg
aWYgdGhlIFVSTCBpcyBudWxsCisKKy8vIFNlZSBKYXZhU2NyaXB0Q29yZSBmb3IgZXhwbGFuYXRp
b246IFNob3VsZCBiZSB1c2VkIGZvciBhbnkgc3RyaW5nIHRoYXQgaXMgYWxyZWFkeSBvd25lZCBi
eSBhbm90aGVyCisvLyBvYmplY3QsIHRvIGxldCB0aGUgZW5naW5lIGtub3cgdGhhdCBjb2xsZWN0
aW5nIHRoZSBKU1N0cmluZyB3cmFwcGVyIGlzIHVubGlrZWx5IHRvIHNhdmUgbWVtb3J5LgorSlND
OjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJp
bmcmKTsKKworU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsK
KworQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3RyaW5nKEpTQzo6UHJvcGVydHlO
YW1lKTsKKworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZpZXJUb0J5dGVTdHJpbmcoSlND
OjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK1dFQkNPUkVfRVhQT1JUIFN0
cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitX
RUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvVVNWU3RyaW5nKEpTQzo6RXhlY1N0YXRl
JiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgdmFsdWVU
b1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK2ludDMyX3QgZmlu
aXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUsIEpTQzo6RXhlY1N0YXRlKiwgYm9vbCYgb2theSk7
CisKKy8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbnZlcnQgdmFsdWVzIHRvIGludGVnZXJz
IGFzIHBlciB0aGUgV2ViSURMIHNwZWNpZmljYXRpb24uCisvLyBUaGUgY29udmVyc2lvbiBmYWls
cyBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIG51bWJlciBvciwgaWYgRW5m
b3JjZVJhbmdlIGlzIHNwZWNpZmllZCwKKy8vIHRoZSB2YWx1ZSBpcyBvdXRzaWRlIHRoZSByYW5n
ZSBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlciB0eXBlLgorCitXRUJDT1JFX0VYUE9SVCBpbnQ4
X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dF
QkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZFbmZvcmNlUmFu
Z2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDE2
X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
V0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQzMl90IHRvVUludDMyRW5mb3Jj
ZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGlu
dDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK1dFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDhDbGFt
cChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50OF90
IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VY
UE9SVCBpbnQxNl90IHRvSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
CitXRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDMyX3QgdG9JbnQzMkNsYW1wKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQzMl90IHRvVUlu
dDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQg
aW50NjRfdCB0b0ludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VC
Q09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7CisKK1dFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDgoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4KEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNihK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0
b1VJbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBp
bnQ2NF90IHRvSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9F
WFBPUlQgdWludDY0X3QgdG9VSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwor
CitKU0M6OkpTVmFsdWUganNEYXRlKEpTQzo6RXhlY1N0YXRlKiwgZG91YmxlIHZhbHVlKTsKKwor
Ly8gTmFOIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQgdG8gYSBkYXRlLgorZG91Ymxl
IHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlKTsKKworLy8gVmFsaWRh
dGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9u
IDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCitKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2Uo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpOworCitKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgSlNDOjpB
cnJheUJ1ZmZlciYpOworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcmKTsKK0pTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyKik7
CitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBKU0M6OkFycmF5QnVmZmVyVmlldyopOwordGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUPiYmKTsK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqLCBSZWZQdHI8VD4mJik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29u
c3QgVmVjdG9yPFQ+Jik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29uc3QgVmVjdG9yPFJlZlB0cjxU
Pj4mKTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJik7CisKK0pTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0
b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSk7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yKEpTQzo6RXhlY1N0
YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUJik7CitKU0M6OkpTVmFsdWUgdG9KU0l0
ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJik7CisKK1JlZlB0cjxKU0M6OkFycmF5QnVmZmVyVmll
dz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
KTsKK1JlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDhBcnJheShKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvUG9zc2libHlT
aGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50
MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1
ZSk7CitSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhBcnJheShK
U0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0
b1Bvc3NpYmx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
CitSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQxNkFycmF5KEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRvUG9zc2li
bHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6
OkZsb2F0MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiwgSlND
OjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZs
b2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKKworUmVmUHRyPEpTQzo6QXJyYXlC
dWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOworUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVkSW50OEFycmF5KEpTQzo6Vk0m
LCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9VbnNoYXJlZEludDE2
QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0
b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6
OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUp
OworUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5zaGFyZWRVaW50OENsYW1wZWRB
cnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0
b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlND
OjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFs
dWUpOworUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hhcmVkRmxvYXQzMkFycmF5KEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b1Vuc2hh
cmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBKU1R5cGU+IFZlY3RvcjxSZWY8VD4+IHRvUmVmTmF0aXZlQXJyYXko
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNJ
dGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK2VudW0gU2Vj
dXJpdHlSZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IsIExvZ1NlY3Vy
aXR5RXJyb3IsIFRocm93U2VjdXJpdHlFcnJvciB9OworbmFtZXNwYWNlIEJpbmRpbmdTZWN1cml0
eSB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hlY2tTZWN1cml0eUZvck5vZGUoSlND
OjpFeGVjU3RhdGUmLCBUJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hlY2tTZWN1
cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUKik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwg
RXhjZXB0aW9uT3I8VCo+JiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IEV4Y2VwdGlvbk9y
PFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIEV4Y2VwdGlvbk9yPFQm
PiYmKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3Rh
dGUqLCBET01XaW5kb3cmLCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiA9IExvZ1NlY3VyaXR5RXJy
b3IpOworICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0
ZSYsIERPTVdpbmRvdyYsIFN0cmluZyYgbWVzc2FnZSk7CisgICAgYm9vbCBzaG91bGRBbGxvd0Fj
Y2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSosIFNlY3VyaXR5UmVwb3J0aW5nT3B0
aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7CisgICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRnJh
bWUoSlNDOjpFeGVjU3RhdGUmLCBGcmFtZSYsIFN0cmluZyYgbWVzc2FnZSk7CisgICAgYm9vbCBz
aG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIE5vZGUqKTsKK307CisKK3Zv
aWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSk7CisKK1N0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7CitB
dG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUp
OworCit0ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uLCBpbnQgbGVuZ3RoPiBKU0M6OkVuY29k
ZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRlcihKU0M6OkV4ZWNTdGF0ZSos
IEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lKTsKKworCitlbnVtIGNsYXNz
IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHsgVGhyb3csIFJldHVybkVhcmx5LCBSZWplY3RQcm9t
aXNlLCBBc3NlcnQgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4KK3N0cnVjdCBCaW5k
aW5nQ2FsbGVyIHsKKyAgICB1c2luZyBBdHRyaWJ1dGVTZXR0ZXJGdW5jdGlvbiA9IGJvb2woSlND
OjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OlRocm93U2NvcGUmKTsK
KyAgICB1c2luZyBBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiA9IEpTQzo6SlNWYWx1ZShKU0M6OkV4
ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OlRocm93U2NvcGUmKTsKKyAgICB1c2luZyBPcGVyYXRp
b25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBK
U0NsYXNzKiwgSlNDOjpUaHJvd1Njb3BlJik7CisgICAgdXNpbmcgUHJvbWlzZU9wZXJhdGlvbkNh
bGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQ2xh
c3MqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93U2NvcGUmKTsKKworICAgIHN0
YXRpYyBKU0NsYXNzKiBjYXN0Rm9yQXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSk7CisgICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RGb3JPcGVyYXRpb24oSlNDOjpF
eGVjU3RhdGUmKTsKKworICAgIHRlbXBsYXRlPFByb21pc2VPcGVyYXRpb25DYWxsZXJGdW5jdGlv
biBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0g
Q2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2U+CisgICAgc3RhdGljIEpTQzo6
RW5jb2RlZEpTVmFsdWUgY2FsbFByb21pc2VPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqIHN0YXRl
LCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNvbnN0IGNoYXIqIG9wZXJhdGlvbk5h
bWUpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhdGUpOworICAgICAgICBhdXRvIHRocm93U2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAgYXV0byogdGhp
c09iamVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsKKyAgICAgICAgaWYgKHNob3VsZFRo
cm93ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQgJiYgVU5MSUtFTFkoIXRoaXNP
YmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJv
cihwcm9taXNlLmdldCgpLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgb3BlcmF0aW9uTmFt
ZSk7CisgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKKyAgICAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZvKCkpOworICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2RlIHRvIHVzZSBy
ZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KKyAgICAgICAgcmV0dXJuIG9wZXJh
dGlvbkNhbGxlcihzdGF0ZSwgdGhpc09iamVjdCwgV1RGTW92ZShwcm9taXNlKSwgdGhyb3dTY29w
ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8T3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gb3BlcmF0
aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRo
aXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBj
YWxsT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29uc3QgY2hhciogb3BlcmF0aW9u
TmFtZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8gdGhyb3dT
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3RhdGUpOworICAgICAgICBpZiAoc2hvdWxk
VGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCAmJiBVTkxJS0VMWSghdGhp
c09iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJy
b3JCZWhhdmlvcjo6VGhyb3cpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVF
cnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVy
YXRpb25OYW1lKTsKKyAgICAgICAgICAgIC8vIEZvciBjdXN0b20gcHJvbWlzZS1yZXR1cm5pbmcg
b3BlcmF0aW9ucworICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVF
cnJvcigqc3RhdGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25OYW1lKTsK
KyAgICAgICAgfQorICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7CisgICAgICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6aW5mbygpKTsKKyAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmluZGluZyBnZW5lcmF0ZWQgY29kZSB0
byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNPYmplY3QuCisgICAgICAgIHJldHVy
biBvcGVyYXRpb25DYWxsZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRocm93U2NvcGUpOworICAgIH0K
KworICAgIHRlbXBsYXRlPEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9uIHNldHRlciwgQ2FzdGVkVGhp
c0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhy
b3c+CisgICAgc3RhdGljIGJvb2wgc2V0QXR0cmlidXRlKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwg
SlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHN0YXRlKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShz
dGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yQXR0cmlidXRl
KCpzdGF0ZSwgdGhpc1ZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkK
KyAgICAgICAgICAgIHJldHVybiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3I6OlRocm93KSA/IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlND
bGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpIDogZmFsc2U7CisgICAgICAg
IHJldHVybiBzZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgSlNDOjpKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSwgdGhyb3dTY29wZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8QXR0cmli
dXRlR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRU
aHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0aWMgSlNDOjpF
bmNvZGVkSlNWYWx1ZSBhdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2Fz
dEZvckF0dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7CisgICAgICAgIGlmIChVTkxJS0VMWSgh
dGhpc09iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvcjo6VGhyb3cpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUs
IGF0dHJpYnV0ZU5hbWUpOworICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRo
aXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlKQorICAgICAgICAgICAgICAgIHJldHVybiBy
ZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6OmluZm8oKS0+
Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBKU0M6OkpTVmFs
dWU6OmVuY29kZShKU0M6OmpzVW5kZWZpbmVkKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgdGhyb3dT
Y29wZSkpOworICAgIH0KK307CisKKy8vIEV4Y2VwdGlvbk9yIGhhbmRsaW5nLgordm9pZCBwcm9w
YWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRp
b25Pcjx2b2lkPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNl
cHRpb25PcjxUPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTTmV3
bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OlRocm93
U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKTsKKworLy8gSW5saW5lIGZ1bmN0aW9ucyBh
bmQgdGVtcGxhdGUgZGVmaW5pdGlvbnMuCisKK2lubGluZSBKU0M6OlN0cnVjdHVyZSogRE9NQ29u
c3RydWN0b3JPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJl
dHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
SlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
K30KKworaW5saW5lIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpET01Db25zdHJ1Y3Rvck9iamVjdChK
U0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
KQorICAgIDogSlNET01PYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmplY3QpCit7Cit9CisKK2lu
bGluZSBTdHJpbmcgRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNsYXNzTmFtZShjb25zdCBKU09iamVj
dCopCit7CisgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRnVuY3Rpb24iKTsKK30KKworaW5saW5l
IERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0OjpET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9i
amVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQorICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxPYmpl
Y3QpCit7Cit9CisKK2lubGluZSBKU0M6OkpTRnVuY3Rpb24qIERPTUNvbnN0cnVjdG9ySlNCdWls
dGluT2JqZWN0Ojppbml0aWFsaXplRnVuY3Rpb24oKQoreworICAgIHJldHVybiBtX2luaXRpYWxp
emVGdW5jdGlvbi5nZXQoKTsKK30KKworaW5saW5lIHZvaWQgRE9NQ29uc3RydWN0b3JKU0J1aWx0
aW5PYmplY3Q6OnNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZNJiB2bSwgSlNDOjpKU0Z1bmN0
aW9uJiBmdW5jdGlvbikKK3sKKyAgICBtX2luaXRpYWxpemVGdW5jdGlvbi5zZXQodm0sIHRoaXMs
ICZmdW5jdGlvbik7Cit9CisKK2lubGluZSBKU0RPTUdsb2JhbE9iamVjdCogZGVwcmVjYXRlZEds
b2JhbE9iamVjdEZvclByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICAvLyBG
SVhNRTogQ2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2luZyB0aGUgZ2xvYmFs
IG9iamVjdAorICAgIC8vIGZyb20gd2hpY2ggdGhlIG9iamVjdCBpcyBiZWluZyBjcmVhdGVkLCBp
bnN0ZWFkIG9mIGFzc3VtaW5nIHRoZSBsZXhpY2FsIG9uZS4KKyAgICAvLyBlLmcuIHN1YmZyYW1l
LmRvY3VtZW50LmJvZHkgc2hvdWxkIHVzZSB0aGUgc3ViZnJhbWUncyBnbG9iYWwgb2JqZWN0LCBu
b3QgdGhlIGxleGljYWwgb25lLgorICAgIHJldHVybiBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6U3RydWN0dXJlKiBnZXRET01TdHJ1Y3R1cmUo
SlNDOjpWTSYgdm0sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCit7CisgICAgaWYg
KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoZ2xvYmFs
T2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmluZm8oKSkpCisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmU7
CisgICAgcmV0dXJuIGNhY2hlRE9NU3RydWN0dXJlKGdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNz
OjpjcmVhdGVTdHJ1Y3R1cmUodm0sICZnbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFzczo6Y3JlYXRl
UHJvdG90eXBlKHZtLCAmZ2xvYmFsT2JqZWN0KSksIFdyYXBwZXJDbGFzczo6aW5mbygpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUq
IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
Ly8gRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgd3JvbmcuIEl0IHVzZXMgdGhlIHdyb25nIGdsb2Jh
bCBvYmplY3QgZm9yIGNyZWF0aW5nIHRoZSBwcm90b3R5cGUgc3RydWN0dXJlLgorICAgIHJldHVy
biBnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPihleGVjLT52bSgpLCAqZGVwcmVjYXRlZEds
b2JhbE9iamVjdEZvclByb3RvdHlwZShleGVjKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFdy
YXBwZXJDbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldERPTVByb3RvdHlwZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIHJldHVybiBK
U0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oYXNPYmplY3QoZ2V0RE9NU3RydWN0dXJlPFdyYXBw
ZXJDbGFzcz4odm0sICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVj
dCkpLT5zdG9yZWRQcm90b3R5cGUoKSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNz
PiBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjcmVhdGVKU0J1aWx0aW4oSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OkpTRnVuY3Rpb24mIGluaXRpYWxpemVGdW5jdGlvbiwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBK
U0NsYXNzOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpTQ2xhc3M+KGdsb2JhbE9iamVjdC52bSgp
LCBnbG9iYWxPYmplY3QpLCAmZ2xvYmFsT2JqZWN0KTsKKyAgICBjYWxsRnVuY3Rpb25XaXRoQ3Vy
cmVudEFyZ3VtZW50cyhzdGF0ZSwgKm9iamVjdCwgaW5pdGlhbGl6ZUZ1bmN0aW9uKTsKKyAgICBy
ZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUob2JqZWN0KTsKK30KKworaW5saW5lIEpTQzo6V2Vh
a0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpB
cnJheUJ1ZmZlciopCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlcio+KHdvcmxkLnZtKCkubV90eXBlZEFycmF5Q29udHJvbGxlci5nZXQoKSktPndy
YXBwZXJPd25lcigpOworfQorCitpbmxpbmUgdm9pZCogd3JhcHBlcktleShKU0M6OkFycmF5QnVm
ZmVyKiBkb21PYmplY3QpCit7CisgICAgcmV0dXJuIGRvbU9iamVjdDsKK30KKworaW5saW5lIEpT
RE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQq
KSB7IHJldHVybiBudWxscHRyOyB9CitpbmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVy
KERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCosIEpTQzo6V2Vha0hhbmRsZU93
bmVyKikgeyByZXR1cm4gZmFsc2U7IH0KK2lubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3Jh
cHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqKSB7IHJldHVybiBmYWxz
ZTsgfQorCitpbmxpbmUgSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3Jh
cHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QpCit7CisgICAgaWYg
KCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
ZG9tT2JqZWN0LT53cmFwcGVyKCk7Cit9CisKK2lubGluZSBKU0M6OkpTQXJyYXlCdWZmZXIqIGdl
dElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1
ZmZlciogYnVmZmVyKQoreworICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGJ1ZmZlci0+bV93cmFwcGVyLmdldCgpOworfQorCitp
bmxpbmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQs
IFNjcmlwdFdyYXBwYWJsZSogZG9tT2JqZWN0LCBKU0RPTU9iamVjdCogd3JhcHBlciwgSlNDOjpX
ZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcikKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9ybWFs
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb21PYmplY3QtPnNldFdyYXBwZXIod3Jh
cHBlciwgd3JhcHBlck93bmVyLCAmd29ybGQpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxp
bmUgYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpT
Qzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCwgSlNDOjpKU0FycmF5QnVmZmVyKiB3cmFwcGVyLCBK
U0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKQoreworICAgIGlmICghd29ybGQuaXNO
b3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvbU9iamVjdC0+bV93cmFwcGVy
ID0gSlNDOjpXZWFrPEpTQzo6SlNBcnJheUJ1ZmZlcj4od3JhcHBlciwgd3JhcHBlck93bmVyLCAm
d29ybGQpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBjbGVhcklubGluZUNh
Y2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21P
YmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyKQoreworICAgIGlmICghd29ybGQuaXNOb3JtYWwo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvbU9iamVjdC0+Y2xlYXJXcmFwcGVyKHdy
YXBwZXIpOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBjbGVhcklubGluZUNh
Y2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogZG9t
T2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIpCit7CisgICAgaWYgKCF3b3JsZC5p
c05vcm1hbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgd2Vha0NsZWFyKGRvbU9iamVj
dC0+bV93cmFwcGVyLCB3cmFwcGVyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVy
KERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIERPTUNsYXNzJiBkb21PYmplY3QpCit7CisgICAgaWYg
KGF1dG8qIHdyYXBwZXIgPSBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCAmZG9tT2JqZWN0
KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIHdvcmxkLm1fd3JhcHBlcnMu
Z2V0KHdyYXBwZXJLZXkoJmRvbU9iamVjdCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01D
bGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCBjYWNoZVdyYXBwZXIoRE9N
V3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgV3JhcHBlckNsYXNzKiB3
cmFwcGVyKQoreworICAgIEpTQzo6V2Vha0hhbmRsZU93bmVyKiBvd25lciA9IHdyYXBwZXJPd25l
cih3b3JsZCwgZG9tT2JqZWN0KTsKKyAgICBpZiAoc2V0SW5saW5lQ2FjaGVkV3JhcHBlcih3b3Js
ZCwgZG9tT2JqZWN0LCB3cmFwcGVyLCBvd25lcikpCisgICAgICAgIHJldHVybjsKKyAgICB3ZWFr
QWRkKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwgSlNDOjpXZWFrPEpT
Qzo6SlNPYmplY3Q+KHdyYXBwZXIsIG93bmVyLCAmd29ybGQpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIHZvaWQgdW5jYWNo
ZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MqIGRvbU9iamVjdCwgV3Jh
cHBlckNsYXNzKiB3cmFwcGVyKQoreworICAgIGlmIChjbGVhcklubGluZUNhY2hlZFdyYXBwZXIo
d29ybGQsIGRvbU9iamVjdCwgd3JhcHBlcikpCisgICAgICAgIHJldHVybjsKKyAgICB3ZWFrUmVt
b3ZlKHdvcmxkLm1fd3JhcHBlcnMsIHdyYXBwZXJLZXkoZG9tT2JqZWN0KSwgd3JhcHBlcik7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBpbmxpbmUgYXV0byBj
cmVhdGVXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIGRv
bU9iamVjdCkgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPERPTUNsYXNz
LCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFz
cz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCit7CisgICAgdXNpbmcgV3JhcHBlckNsYXNzID0gdHlw
ZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNz
OworCisgICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwg
ZG9tT2JqZWN0KSk7CisgICAgYXV0byogZG9tT2JqZWN0UHRyID0gZG9tT2JqZWN0LnB0cigpOwor
ICAgIGF1dG8qIHdyYXBwZXIgPSBXcmFwcGVyQ2xhc3M6OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8
V3JhcHBlckNsYXNzPihnbG9iYWxPYmplY3QtPnZtKCksICpnbG9iYWxPYmplY3QpLCBnbG9iYWxP
YmplY3QsIFdURk1vdmUoZG9tT2JqZWN0KSk7CisgICAgY2FjaGVXcmFwcGVyKGdsb2JhbE9iamVj
dC0+d29ybGQoKSwgZG9tT2JqZWN0UHRyLCB3cmFwcGVyKTsKKyAgICByZXR1cm4gd3JhcHBlcjsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlubGluZSBhdXRv
IGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYg
ZG9tT2JqZWN0KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPERPTUNs
YXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01D
bGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlCit7CisgICAgcmV0dXJuIGNyZWF0ZVdyYXBwZXI8
RE9NQ2xhc3M+KGdsb2JhbE9iamVjdCwgc3RhdGljX3JlZmVyZW5jZV9jYXN0PERPTUNsYXNzPihX
VEZNb3ZlKGRvbU9iamVjdCkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlu
bGluZSBKU0M6OkpTVmFsdWUgd3JhcChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIERPTUNsYXNzJiBkb21PYmplY3QpCit7CisgICAgaWYgKGF1
dG8qIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgZG9t
T2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIHRvSlNOZXdseUNy
ZWF0ZWQoc3RhdGUsIGdsb2JhbE9iamVjdCwgUmVmPERPTUNsYXNzPihkb21PYmplY3QpKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQ2xhc3MmIGNhc3RUaGlzVmFs
dWUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQoreworICAgIGF1dG8gdGhpc1ZhbHVlID0gc3RhdGUu
dGhpc1ZhbHVlKCk7CisgICAgYXV0byBjYXN0ZWRUaGlzID0ganNEeW5hbWljRG93bmNhc3Q8SlND
bGFzcyo+KHN0YXRlLnZtKCksIHRoaXNWYWx1ZSk7CisgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwor
ICAgIHJldHVybiAqY2FzdGVkVGhpczsKK30KKworaW5saW5lIGludDMyX3QgZmluaXRlSW50MzJW
YWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBib29sJiBva2F5
KQoreworICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICBva2F5
ID0gc3RkOjppc2Zpbml0ZShudW1iZXIpOworICAgIHJldHVybiBKU0M6OnRvSW50MzIobnVtYmVy
KTsKK30KKworLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5j
ZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCitpbmxpbmUgSlND
OjpKU09iamVjdCogdG9KU1NlcXVlbmNlKEpTQzo6RXhlY1N0YXRlJiBleGVjLCBKU0M6OkpTVmFs
dWUgdmFsdWUsIHVuc2lnbmVkJiBsZW5ndGgpCit7CisgICAgSlNDOjpWTSYgdm0gPSBleGVjLnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlND
OjpKU09iamVjdCogb2JqZWN0ID0gdmFsdWUuZ2V0T2JqZWN0KCk7CisgICAgaWYgKCFvYmplY3Qp
IHsKKyAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihleGVjLCBzY29wZSk7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEpTQzo6SlNWYWx1ZSBsZW5ndGhWYWx1ZSA9
IG9iamVjdC0+Z2V0KCZleGVjLCBleGVjLnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisgICAgaWYgKGxlbmd0aFZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihl
eGVjLCBzY29wZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGxlbmd0
aCA9IGxlbmd0aFZhbHVlLnRvVUludDMyKCZleGVjKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKKworICAgIHJldHVybiBvYmplY3Q7Cit9CisKK2lubGluZSBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXImIGJ1ZmZlcikKK3sKKyAgICBpZiAoYXV0byBy
ZXN1bHQgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+d29ybGQoKSwgYnVmZmVyKSkK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIC8vIFRoZSBKU0FycmF5QnVmZmVyOjpjcmVh
dGUgZnVuY3Rpb24gd2lsbCByZWdpc3RlciB0aGUgd3JhcHBlciBpbiBmaW5pc2hDcmVhdGlvbi4K
KyAgICByZXR1cm4gSlNDOjpKU0FycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGUtPnZtKCksIGdsb2Jh
bE9iamVjdC0+YXJyYXlCdWZmZXJTdHJ1Y3R1cmUoYnVmZmVyLnNoYXJpbmdNb2RlKCkpLCAmYnVm
ZmVyKTsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0
ZSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyVmll
dyYgdmlldykKK3sKKyAgICByZXR1cm4gdmlldy53cmFwKHN0YXRlLCBnbG9iYWxPYmplY3QpOwor
fQorCitpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCit7
CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOworICAgIHJl
dHVybiB0b0pTKHN0YXRlLCBnbG9iYWxPYmplY3QsICpidWZmZXIpOworfQorCitpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3KiB2aWV3KQoreworICAgIGlmICgh
dmlldykKKyAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgcmV0dXJuIHRvSlMoc3Rh
dGUsIGdsb2JhbE9iamVjdCwgKnZpZXcpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxp
bmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxUPiYmIHB0cikKK3sKKyAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgUmVmUHRyPFQ+JiYgcHRyKQoreworICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VD4mIHZlY3RvcikKK3sKKyAg
ICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3Ry
dWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKKyAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdElu
ZGV4KGV4ZWMsIGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0pKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIH0KKyAg
ICByZXR1cm4gYXJyYXk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgVmVjdG9yPFJlZlB0cjxUPj4mIHZlY3RvcikKK3sKKyAgICBKU0M6OlZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJP
V19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkpTQXJyYXkqIGFycmF5ID0gY29uc3RydWN0RW1wdHlB
cnJheShleGVjLCBudWxscHRyLCB2ZWN0b3Iuc2l6ZSgpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2
ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMs
IGksIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCB2ZWN0b3JbaV0uZ2V0KCkpKTsKKyAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgSlNDOjpKU1ZhbHVlKCkpOworICAgIH0KKyAgICBy
ZXR1cm4gYXJyYXk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJiBwcml2
YXRlTmFtZSkKK3sKKyAgICByZXR1cm4gSlNDOjpTeW1ib2w6OmNyZWF0ZShleGVjLT52bSgpLCBw
cml2YXRlTmFtZS51aWQoKSk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9y
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KCZzdGF0ZSwg
dmFsdWUsIGZhbHNlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNW
YWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBjb25zdCBUJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlSXRl
cmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFs
dWUpLCBmYWxzZSk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yRW5kKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRP
YmplY3QoJnN0YXRlLCBKU0M6OmpzVW5kZWZpbmVkKCksIHRydWUpOworfQorCitpbmxpbmUgUmVm
UHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byogd3JhcHBlciA9
IGpzRHluYW1pY0Rvd25jYXN0PEpTQzo6SlNBcnJheUJ1ZmZlclZpZXcqPih2bSwgdmFsdWUpOwor
ICAgIGlmICghd3JhcHBlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHdy
YXBwZXItPnBvc3NpYmx5U2hhcmVkSW1wbCgpOworfQorCitpbmxpbmUgUmVmUHRyPEpTQzo6QXJy
YXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mIHZtLCBKU0M6
OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byByZXN1bHQgPSB0b1Bvc3NpYmx5U2hhcmVkQXJy
YXlCdWZmZXJWaWV3KHZtLCB2YWx1ZSk7CisgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT5pc1No
YXJlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitpbmxpbmUgUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50OEFycmF5
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJs
eVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9Citp
bmxpbmUgUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDE2QXJyYXko
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5
U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MTZBZGFwdG9yPih2bSwgdmFsdWUpOyB9Citp
bmxpbmUgUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXko
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5
U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9Citp
bmxpbmUgUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4QXJyYXko
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5
U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhBZGFwdG9yPih2bSwgdmFsdWUpOyB9Citp
bmxpbmUgUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50
OENsYW1wZWRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OENsYW1wZWRBZGFw
dG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvUG9z
c2libHlTaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7
IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50MTZB
ZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6VWludDMyQXJyYXk+IHRv
UG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50
MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5
PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OkZsb2F0MzJBZGFwdG9yPih2bSwgdmFsdWUpOyB9CitpbmxpbmUgUmVmUHRyPEpTQzo6RmxvYXQ2
NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmll
dzxKU0M6OkZsb2F0NjRBZGFwdG9yPih2bSwgdmFsdWUpOyB9CisKK2lubGluZSBSZWZQdHI8SlND
OjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50
OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0
b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJl
dHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQxNkFkYXB0b3I+KHZt
LCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Vuc2hhcmVkSW50
MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRv
VW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0K
K2lubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Vuc2hhcmVkVWludDhBcnJheShKU0M6
OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRp
dmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQ
dHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5h
dGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lu
bGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9VbnNoYXJlZFVpbnQxNkFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2
ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQ
dHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBK
U0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmll
dzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpG
bG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6
RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0
QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2
NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
SlNUPiBpbmxpbmUgVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU0M6OlZNJiB2bSA9IHN0YXRl
LnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
aWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIHRocm93U2VxdWVuY2VUeXBlRXJyb3Io
c3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8
UmVmPFQ+PiByZXN1bHQ7CisgICAgZm9yRWFjaEluSXRlcmFibGUoJnN0YXRlLCB2YWx1ZSwgWyZy
ZXN1bHRdKEpTQzo6Vk0mIHZtLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNWYWx1ZSBq
c1ZhbHVlKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgICAgICBpZiAoanNWYWx1ZS5pbmhlcml0cyh2bSwgSlNUOjppbmZvKCkpKSB7CisgICAg
ICAgICAgICBhdXRvKiBvYmplY3QgPSBKU1Q6OnRvV3JhcHBlZCh2bSwganNWYWx1ZSk7CisgICAg
ICAgICAgICBBU1NFUlQob2JqZWN0KTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKm9iamVj
dCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJy
b3IoKnN0YXRlLCBzY29wZSk7CisgICAgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5s
aW5lIFN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCit7CisgICAgQVNTRVJUKCFwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSk7CisgICAgcmV0
dXJuIHByb3BlcnR5TmFtZS51aWQoKSA/IHByb3BlcnR5TmFtZS51aWQoKSA6IHByb3BlcnR5TmFt
ZS5wdWJsaWNOYW1lKCk7Cit9CisKK2lubGluZSBBdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9B
dG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIHJldHVy
biBBdG9taWNTdHJpbmcocHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVpZCgpIDog
cHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Cit9CisKK3RlbXBsYXRlPEpTQzo6TmF0aXZlRnVu
Y3Rpb24gbmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9u
Q2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkVu
Y29kZWRKU1ZhbHVlLCBKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0
dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMtPnZt
KCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgbGVuZ3RoLCBwcm9wZXJ0eU5hbWUucHVi
bGljTmFtZSgpLCBuYXRpdmVGdW5jdGlvbikpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgcHJv
cGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0
aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCit7CisgICAgaWYgKHRocm93U2NvcGUu
ZXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKyAgICBwcm9wYWdhdGVFeGNlcHRpb25TbG93
UGF0aChzdGF0ZSwgdGhyb3dTY29wZSwgV1RGTW92ZShleGNlcHRpb24pKTsKK30KKworaW5saW5l
IHZvaWQgcHJvcGFnYXRlRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJv
d1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25Pcjx2b2lkPiYmIHZhbHVlKQoreworICAgIGlm
IChVTkxJS0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpCisgICAgICAgIHByb3BhZ2F0ZUV4Y2Vw
dGlvbihzdGF0ZSwgdGhyb3dTY29wZSwgdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Nj
b3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJ
S0VMWSh2YWx1ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9u
KHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKyAgICByZXR1cm4gdG9KUygmc3RhdGUsICZnbG9iYWxPYmplY3Qs
IHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpUaHJvd1Njb3BlJiB0aHJv
d1Njb3BlLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSh2YWx1
ZS5oYXNFeGNlcHRpb24oKSkpIHsKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0
aHJvd1Njb3BlLCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZCgmc3RhdGUsICZnbG9iYWxPYmpl
Y3QsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIFQqIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBUJiBub2RlKQoreworICAgIHJldHVybiBzaG91bGRBbGxvd0FjY2Vz
c1RvTm9kZShzdGF0ZSwgJm5vZGUpID8gJm5vZGUgOiBudWxscHRyOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9k
ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQqIG5vZGUpCit7CisgICAgcmV0dXJuIHNob3VsZEFs
bG93QWNjZXNzVG9Ob2RlKHN0YXRlLCBub2RlKSA/IG5vZGUgOiBudWxscHRyOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgRXhjZXB0aW9uT3I8VCo+IEJpbmRpbmdTZWN1cml0eTo6
Y2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBFeGNlcHRpb25PcjxU
Kj4mJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgcmV0dXJuIGNoZWNrU2VjdXJpdHlG
b3JOb2RlKHN0YXRlLCB2YWx1ZS5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5OjpjaGVj
a1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQmPiYm
IHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IHZhbHVlLnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZvck5v
ZGUoc3RhdGUsIHZhbHVlLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01CaW5kaW5nLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCww
ICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01FeGNlcHRpb25IYW5kbGluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcu
aAkocmV2aXNpb24gMjExMzUzKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01F
eGNlcHRpb25IYW5kbGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw1NSArMjMsMTkgQEAKIAog
I3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJET01XcmFwcGVyV29ybGQuaCIKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKLSNpbmNsdWRlICJKU0RP
TUdsb2JhbE9iamVjdC5oIgotI2luY2x1ZGUgIkpTRE9NV3JhcHBlci5oIgotI2luY2x1ZGUgIkpT
RHluYW1pY0Rvd25jYXN0LmgiCi0jaW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCi0jaW5jbHVk
ZSAiU2NyaXB0V3JhcHBhYmxlSW5saW5lcy5oIgotI2luY2x1ZGUgIldlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlci5oIgotI2luY2x1ZGUgPGNzdGRkZWY+Ci0jaW5jbHVkZSA8aGVhcC9IZWFwSW5s
aW5lcy5oPgotI2luY2x1ZGUgPGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
aGVhcC9XZWFrLmg+Ci0jaW5jbHVkZSA8aGVhcC9XZWFrSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvQXV4aWxpYXJ5QmFycmllcklubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0Vycm9y
Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL0pTQXJyYXkuaD4KLSNpbmNsdWRlIDxydW50aW1lL0pTQXJyYXlCdWZmZXIuaD4KLSNp
bmNsdWRlIDxydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9K
U0NlbGxJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU09iamVjdElubGluZXMuaD4KLSNp
bmNsdWRlIDxydW50aW1lL0pTVHlwZWRBcnJheXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0xvb2t1
cC5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvT2JqZWN0Q29uc3RydWN0b3IuaD4KLSNpbmNsdWRlIDxy
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJ
bmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5cy5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvV3JpdGVCYXJyaWVyLmg+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRl
IDx3dGYvR2V0UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgotCi0vLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGlzIGZpbGUgYSBsb3Qg
ZWFzaWVyIHRvIHJlYWQgYnkgcHV0dGluZyBhbGwgZnVuY3Rpb24gZGVjbGFyYXRpb25zIGF0IHRo
ZSB0b3AsCi0vLyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYmVsb3csIGV2ZW4gZm9yIHRlbXBs
YXRlIGFuZCBpbmxpbmUgZnVuY3Rpb25zLgogCiBuYW1lc3BhY2UgSlNDIHsKLWNsYXNzIEpTRnVu
Y3Rpb247CitjbGFzcyBDYXRjaFNjb3BlOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIENhY2hlZFNjcmlwdDsKIGNsYXNzIERlZmVycmVkUHJvbWlzZTsKLWNsYXNzIERPTVdpbmRv
dzsKLWNsYXNzIEZyYW1lOwotY2xhc3MgVVJMOwotY2xhc3MgTm9kZTsKK2NsYXNzIEpTRE9NR2xv
YmFsT2JqZWN0OwogCiBzdHJ1Y3QgRXhjZXB0aW9uRGV0YWlscyB7CiAgICAgU3RyaW5nIG1lc3Nh
Z2U7CkBAIC04MCwzOSArNDQsNiBAQCBzdHJ1Y3QgRXhjZXB0aW9uRGV0YWlscyB7CiAgICAgU3Ry
aW5nIHNvdXJjZVVSTDsKIH07CiAKLS8vIEJhc2UgY2xhc3MgZm9yIGFsbCBjb25zdHJ1Y3RvciBv
YmplY3RzIGluIHRoZSBKU0MgYmluZGluZ3MuCi1jbGFzcyBET01Db25zdHJ1Y3Rvck9iamVjdCA6
IHB1YmxpYyBKU0RPTU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0RPTU9iamVjdCBC
YXNlOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0
cnVjdHVyZUZsYWdzIHwgSlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6OkltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2UgfCBKU0M6OlR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YTsK
LSAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiwgSlND
OjpKU0dsb2JhbE9iamVjdCosIEpTQzo6SlNWYWx1ZSk7Ci0KLXByb3RlY3RlZDoKLSAgICBET01D
b25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0K
LSAgICBzdGF0aWMgU3RyaW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwotICAgIHN0YXRp
YyBKU0M6OkNhbGxUeXBlIGdldENhbGxEYXRhKEpTQ2VsbCosIEpTQzo6Q2FsbERhdGEmKTsKLX07
Ci0KLWNsYXNzIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0IDogcHVibGljIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0
IEJhc2U7Ci0KLXByb3RlY3RlZDoKLSAgICBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChK
U0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0M6OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKLQotICAgIEpTQzo6
SlNGdW5jdGlvbiogaW5pdGlhbGl6ZUZ1bmN0aW9uKCk7Ci0gICAgdm9pZCBzZXRJbml0aWFsaXpl
RnVuY3Rpb24oSlNDOjpWTSYsIEpTQzo6SlNGdW5jdGlvbiYpOwotCi1wcml2YXRlOgotICAgIEpT
Qzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNGdW5jdGlvbj4gbV9pbml0aWFsaXplRnVuY3Rpb247Ci19
OwotCi1ET01XaW5kb3cmIGNhbGxlckRPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwotRE9NV2lu
ZG93JiBhY3RpdmVET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKLURPTVdpbmRvdyYgZmlyc3RE
T01XaW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKLQogV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVk
SlNWYWx1ZSByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25z
dCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7
CiAKQEAgLTE0Nyw0NyArNzgsNiBAQCBXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVl
IHJlamVjCiBXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VX
aXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFByb21pc2UmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VO
YW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKTsKIFdFQkNPUkVfRVhQT1JUIEpTQzo6RW5j
b2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7
CiAKLVdFQkNPUkVfRVhQT1JUIEpTQzo6U3RydWN0dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUo
SlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwotV0VCQ09SRV9FWFBP
UlQgSlNDOjpTdHJ1Y3R1cmUqIGNhY2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0Jiwg
SlNDOjpTdHJ1Y3R1cmUqLCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6U3RydWN0dXJlKiBnZXRET01TdHJ1Y3R1cmUoSlNDOjpW
TSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+
IEpTQzo6U3RydWN0dXJlKiBkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRl
Kik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldERP
TVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCopOwotCi12b2lkIGNhbGxG
dW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU09iamVj
dCYgdGhpc09iamVjdCwgSlNDOjpKU0Z1bmN0aW9uJik7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpT
Q2xhc3M+IEpTQzo6RW5jb2RlZEpTVmFsdWUgY3JlYXRlSlNCdWlsdGluKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU0Z1bmN0aW9uJiBpbml0aWFsaXplRnVuY3Rpb24sIEpTRE9NR2xvYmFsT2JqZWN0
Jik7Ci0KLUpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxk
JiwgSlNDOjpBcnJheUJ1ZmZlciopOwotdm9pZCogd3JhcHBlcktleShKU0M6OkFycmF5QnVmZmVy
Kik7Ci0KLUpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3Js
ZCYsIHZvaWQqKTsKLUpTRE9NT2JqZWN0KiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBw
ZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSopOwotSlNDOjpKU0FycmF5QnVmZmVyKiBnZXRJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKLQot
Ym9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RP
TU9iamVjdCosIEpTQzo6V2Vha0hhbmRsZU93bmVyKik7Ci1ib29sIHNldElubGluZUNhY2hlZFdy
YXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgU2NyaXB0V3JhcHBhYmxlKiwgSlNET01PYmplY3QqIHdy
YXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpOwotYm9vbCBzZXRJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqLCBKU0M6
OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3du
ZXIpOwotCi1ib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2
b2lkKiwgSlNET01PYmplY3QqKTsKLWJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdy
YXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSosIEpTRE9NT2JqZWN0KiB3cmFwcGVyKTsKLWJv
b2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlC
dWZmZXIqLCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIpOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBET01DbGFzcz4gSlNDOjpKU09iamVjdCogZ2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29y
bGQmLCBET01DbGFzcyYpOwotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6
OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFJlZjxE
T01DbGFzcz4mIG9iamVjdCkgeyByZXR1cm4gZ2V0Q2FjaGVkV3JhcHBlcih3b3JsZCwgb2JqZWN0
LmdldCgpKTsgfQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJD
bGFzcz4gdm9pZCBjYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MqLCBXcmFw
cGVyQ2xhc3MqKTsKLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVy
Q2xhc3M+IHZvaWQgdW5jYWNoZVdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MqLCBX
cmFwcGVyQ2xhc3MqKTsKLXRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBh
dXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVu
YW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+
Ojp0eXBlOwotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGF1dG8gY3Jl
YXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCosIFJlZjxUPiYmKSAtPiB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpT
RE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBl
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gSlNDOjpKU1ZhbHVlIHdyYXAoSlNDOjpF
eGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIERPTUNsYXNzJik7Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIEpTQ2xhc3M+IEpTQ2xhc3MmIGNhc3RUaGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUmKTsK
LQotdm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmKTsKLQotY29uc3Qg
SlNDOjpIYXNoVGFibGUmIGdldEhhc2hUYWJsZUZvckdsb2JhbERhdGEoSlNDOjpWTSYsIGNvbnN0
IEpTQzo6SGFzaFRhYmxlJiBzdGF0aWNUYWJsZSk7Ci0KIFN0cmluZyByZXRyaWV2ZUVycm9yTWVz
c2FnZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBK
U0M6OkNhdGNoU2NvcGUmKTsKIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlIGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiA9IG51
bGxwdHIpOwogV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkV4Y2VwdGlvbiosIENhY2hlZFNjcmlwdCogPSBudWxscHRyLCBFeGNlcHRpb25E
ZXRhaWxzKiA9IG51bGxwdHIpOwpAQCAtMjAwLDU3MiArOTAsMTEgQEAgSlNDOjpKU1ZhbHVlIGNy
ZWF0ZURPTUV4Y2VwdGlvbihKU0M6OkV4ZQogdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb24mJik7CiBXRUJDT1JFX0VYUE9S
VCB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOwogCi1KU0M6OkpTVmFsdWUganNTdHJpbmcoSlNDOjpF
eGVjU3RhdGUqLCBjb25zdCBVUkwmKTsgLy8gZW1wdHkgaWYgdGhlIFVSTCBpcyBudWxsCi0KLUpT
Qzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3Ry
aW5nJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgc3RyaW5nIGlzIG51bGwKLUpTQzo6SlNWYWx1ZSBq
c1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgVVJMJik7IC8vIHVuZGVm
aW5lZCBpZiB0aGUgVVJMIGlzIG51bGwKLQotLy8gU2VlIEphdmFTY3JpcHRDb3JlIGZvciBleHBs
YW5hdGlvbjogU2hvdWxkIGJlIHVzZWQgZm9yIGFueSBzdHJpbmcgdGhhdCBpcyBhbHJlYWR5IG93
bmVkIGJ5IGFub3RoZXIKLS8vIG9iamVjdCwgdG8gbGV0IHRoZSBlbmdpbmUga25vdyB0aGF0IGNv
bGxlY3RpbmcgdGhlIEpTU3RyaW5nIHdyYXBwZXIgaXMgdW5saWtlbHkgdG8gc2F2ZSBtZW1vcnku
Ci1KU0M6OkpTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0
IFN0cmluZyYpOwotCi1TdHJpbmcgcHJvcGVydHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5h
bWUpOwotCi1BdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9w
ZXJ0eU5hbWUpOwotCi1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvQnl0ZVN0cmlu
ZyhKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwotV0VCQ09SRV9FWFBP
UlQgU3RyaW5nIHZhbHVlVG9CeXRlU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVl
KTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoSlNDOjpFeGVj
U3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyB2
YWx1ZVRvVVNWU3RyaW5nKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotaW50MzJf
dCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWYWx1ZSwgSlNDOjpFeGVjU3RhdGUqLCBib29sJiBv
a2F5KTsKLQotLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY29udmVydCB2YWx1ZXMgdG8gaW50
ZWdlcnMgYXMgcGVyIHRoZSBXZWJJREwgc3BlY2lmaWNhdGlvbi4KLS8vIFRoZSBjb252ZXJzaW9u
IGZhaWxzIGlmIHRoZSB2YWx1ZSBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgbnVtYmVyIG9yLCBp
ZiBFbmZvcmNlUmFuZ2UgaXMgc3BlY2lmaWVkLAotLy8gdGhlIHZhbHVlIGlzIG91dHNpZGUgdGhl
IHJhbmdlIG9mIHRoZSBkZXN0aW5hdGlvbiBpbnRlZ2VyIHR5cGUuCi0KLVdFQkNPUkVfRVhQT1JU
IGludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OwotV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNkVuZm9y
Y2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1
aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgdG9VSW50MzJF
bmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBP
UlQgaW50NjRfdCB0b0ludDY0RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ2NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50
OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVp
bnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNP
UkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1Zh
bHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2Q2xhbXAoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyQ2xhbXAo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDMyX3Qg
dG9VSW50MzJDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VY
UE9SVCBpbnQ2NF90IHRvSW50NjRDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKLQotV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50OChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50OF90IHRvVUludDgoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0lu
dDE2KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQx
Nl90IHRvVUludDE2KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQ
T1JUIGludDY0X3QgdG9JbnQ2NChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJD
T1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci0KLUpTQzo6SlNWYWx1ZSBqc0RhdGUoSlNDOjpFeGVjU3RhdGUqLCBkb3VibGUgdmFsdWUp
OwotCi0vLyBOYU4gaWYgdGhlIHZhbHVlIGNhbid0IGJlIGNvbnZlcnRlZCB0byBhIGRhdGUuCi1k
b3VibGUgdmFsdWVUb0RhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUpOwotCi0vLyBW
YWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNl
Y3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KLUpTQzo6SlNPYmplY3QqIHRvSlNTZXF1
ZW5jZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSwgdW5zaWduZWQmIGxlbmd0aCk7Ci0K
LUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBK
U0M6OkFycmF5QnVmZmVyJik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyYpOwotSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZm
ZXIqKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9i
amVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3Kik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6
OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+
JiYpOwotdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJlZlB0cjxUPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3Qq
LCBjb25zdCBWZWN0b3I8VD4mKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0
b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBWZWN0b3I8UmVm
UHRyPFQ+PiYpOwotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5hbWUmKTsKLQotSlNDOjpKU1ZhbHVlIHRvSlNJ
dGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVl
KTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpF
eGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIGNvbnN0IFQmKTsKLUpTQzo6SlNWYWx1ZSB0
b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUmKTsKLQotUmVmUHRyPEpTQzo6QXJyYXlCdWZm
ZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpTQzo6Vk0mLCBKU0M6OkpT
VmFsdWUpOwotUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50OEFycmF5
KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3Nz
aWJseVNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlND
OjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OEFy
cmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJy
YXk+IHRvUG9zc2libHlTaGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1Zh
bHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDE2QXJy
YXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Q
b3NzaWJseVNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRy
PEpTQzo6RmxvYXQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0m
LCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5U2hh
cmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotCi1SZWZQdHI8SlNDOjpB
cnJheUJ1ZmZlclZpZXc+IHRvVW5zaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Vuc2hhcmVk
SW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDMyQXJy
YXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRy
PEpTQzo6VWludDhBcnJheT4gdG9VbnNoYXJlZFVpbnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xh
bXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDE2QXJy
YXk+IHRvVW5zaGFyZWRVaW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0
cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6
SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJy
YXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRv
VW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIEpTVHlwZT4gVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVB
cnJheShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBib29s
IGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLQotZW51
bSBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiB7IERvTm90UmVwb3J0U2VjdXJpdHlFcnJvciwgTG9n
U2VjdXJpdHlFcnJvciwgVGhyb3dTZWN1cml0eUVycm9yIH07Ci1uYW1lc3BhY2UgQmluZGluZ1Nl
Y3VyaXR5IHsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9k
ZShKU0M6OkV4ZWNTdGF0ZSYsIFQmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBjaGVj
a1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIFQqKTsKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBFeGNlcHRpb25PcjxUKj4gY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3Rh
dGUmLCBFeGNlcHRpb25PcjxUKj4mJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gRXhjZXB0
aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9u
T3I8VCY+JiYpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4
ZWNTdGF0ZSosIERPTVdpbmRvdyYsIFNlY3VyaXR5UmVwb3J0aW5nT3B0aW9uID0gTG9nU2VjdXJp
dHlFcnJvcik7Ci0gICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhl
Y1N0YXRlJiwgRE9NV2luZG93JiwgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICBib29sIHNob3VsZEFs
bG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSosIEZyYW1lKiwgU2VjdXJpdHlSZXBvcnRp
bmdPcHRpb24gPSBMb2dTZWN1cml0eUVycm9yKTsKLSAgICBib29sIHNob3VsZEFsbG93QWNjZXNz
VG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSYsIEZyYW1lJiwgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICBi
b29sIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKEpTQzo6RXhlY1N0YXRlJiwgTm9kZSopOwotfTsK
LQotdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZyYW1lKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKTsKLQotU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1l
KTsKLUF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5
TmFtZSk7Ci0KLXRlbXBsYXRlPEpTQzo6TmF0aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6
RW5jb2RlZEpTVmFsdWUgbm9uQ2FjaGluZ1N0YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwgSlNDOjpQcm9wZXJ0eU5hbWUpOwotCi0KLWVudW0g
Y2xhc3MgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3IgeyBUaHJvdywgUmV0dXJuRWFybHksIFJlamVj
dFByb21pc2UsIEFzc2VydCB9OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPgotc3RydWN0
IEJpbmRpbmdDYWxsZXIgewotICAgIHVzaW5nIEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9uID0gYm9v
bChKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OkpTVmFsdWUsIEpTQzo6VGhyb3dTY29w
ZSYpOwotICAgIHVzaW5nIEF0dHJpYnV0ZUdldHRlckZ1bmN0aW9uID0gSlNDOjpKU1ZhbHVlKEpT
Qzo6RXhlY1N0YXRlJiwgSlNDbGFzcyYsIEpTQzo6VGhyb3dTY29wZSYpOwotICAgIHVzaW5nIE9w
ZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNTdGF0
ZSosIEpTQ2xhc3MqLCBKU0M6OlRocm93U2NvcGUmKTsKLSAgICB1c2luZyBQcm9taXNlT3BlcmF0
aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6OkVuY29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwg
SlNDbGFzcyosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOwotCi0g
ICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RGb3JBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6
OkVuY29kZWRKU1ZhbHVlKTsKLSAgICBzdGF0aWMgSlNDbGFzcyogY2FzdEZvck9wZXJhdGlvbihK
U0M6OkV4ZWNTdGF0ZSYpOwotCi0gICAgdGVtcGxhdGU8UHJvbWlzZU9wZXJhdGlvbkNhbGxlckZ1
bmN0aW9uIG9wZXJhdGlvbkNhbGxlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhy
b3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmVqZWN0UHJvbWlzZT4KLSAgICBzdGF0aWMg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxsUHJvbWlzZU9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSwgY29uc3QgY2hhciogb3BlcmF0
aW9uTmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3RhdGUpOwotICAgICAgICBpZiAoc2hv
dWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCAmJiBVTkxJS0VMWSgh
dGhpc09iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlw
ZUVycm9yKHByb21pc2UuZ2V0KCksIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRp
b25OYW1lKTsKLSAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QpOwotICAgICAgICBBU1NFUlRfR0Nf
T0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIEpTQ2xhc3M6OmluZm8oKSk7Ci0gICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhlIGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgdG8g
dXNlIHJlZmVyZW5jZXMgZm9yIHN0YXRlIGFuZCB0aGlzT2JqZWN0LgotICAgICAgICByZXR1cm4g
b3BlcmF0aW9uQ2FsbGVyKHN0YXRlLCB0aGlzT2JqZWN0LCBXVEZNb3ZlKHByb21pc2UpLCB0aHJv
d1Njb3BlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiBv
cGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgotICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1Zh
bHVlIGNhbGxPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBjb25zdCBjaGFyKiBvcGVy
YXRpb25OYW1lKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAgYXV0byB0
aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1
dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yT3BlcmF0aW9uKCpzdGF0ZSk7Ci0gICAgICAgIGlmIChz
aG91bGRUaHJvdyAhPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0ICYmIFVOTElLRUxZ
KCF0aGlzT2JqZWN0KSkgewotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRo
aXNFcnJvckJlaGF2aW9yOjpUaHJvdykKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dUaGlz
VHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUs
IG9wZXJhdGlvbk5hbWUpOwotICAgICAgICAgICAgLy8gRm9yIGN1c3RvbSBwcm9taXNlLXJldHVy
bmluZyBvcGVyYXRpb25zCi0gICAgICAgICAgICByZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhUaGlz
VHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5h
bWUpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKLSAgICAgICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZvKCkpOwotICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBj
b2RlIHRvIHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KLSAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8QXR0cmlidXRlU2V0dGVyRnVuY3Rpb24gc2V0dGVyLCBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9y
OjpUaHJvdz4KLSAgICBzdGF0aWMgYm9vbCBzZXRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0
YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkVmFsdWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi0gICAgewotICAgICAgICBB
U1NFUlQoc3RhdGUpOwotICAgICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHN0YXRlLT52bSgpKTsKLSAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JBdHRy
aWJ1dGUoKnN0YXRlLCB0aGlzVmFsdWUpOwotICAgICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmpl
Y3QpKQotICAgICAgICAgICAgcmV0dXJuIChzaG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6VGhyb3cpID8gdGhyb3dTZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3Bl
LCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSkgOiBmYWxzZTsKLSAg
ICAgICAgcmV0dXJuIHNldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCBKU0M6OkpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpLCB0aHJvd1Njb3BlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxB
dHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiBnZXR0ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNo
b3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93PgotICAgIHN0YXRpYyBK
U0M6OkVuY29kZWRKU1ZhbHVlIGF0dHJpYnV0ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBjYXN0Rm9yQXR0cmlidXRlKCpzdGF0ZSwgdGhpc1ZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElL
RUxZKCF0aGlzT2JqZWN0KSkgewotICAgICAgICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3Rl
ZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dH
ZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNz
TmFtZSwgYXR0cmlidXRlTmFtZSk7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2UpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHJlamVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFzczo6aW5m
bygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIEpTQzo6
SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNVbmRlZmluZWQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKGdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0
aHJvd1Njb3BlKSk7Ci0gICAgfQotfTsKLQogLy8gRXhjZXB0aW9uT3IgaGFuZGxpbmcuCiB2b2lk
IHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4
Y2VwdGlvbk9yPHZvaWQ+JiYpOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYs
IEV4Y2VwdGlvbk9yPFQ+JiYpOwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6
VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFsdWUpOwogCi0vLyBJbmxpbmUgZnVuY3Rp
b25zIGFuZCB0ZW1wbGF0ZSBkZWZpbml0aW9ucy4KLQotaW5saW5lIEpTQzo6U3RydWN0dXJlKiBE
T01Db25zdHJ1Y3Rvck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCi17Ci0g
ICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwotfQotCi1pbmxpbmUgRE9NQ29uc3RydWN0b3JPYmplY3Q6OkRPTUNvbnN0cnVjdG9yT2Jq
ZWN0KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCi0gICAgOiBKU0RPTU9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKLXsKLX0K
LQotaW5saW5lIFN0cmluZyBET01Db25zdHJ1Y3Rvck9iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpT
T2JqZWN0KikKLXsKLSAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJGdW5jdGlvbiIpOwotfQotCi1p
bmxpbmUgRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OkRPTUNvbnN0cnVjdG9ySlNCdWls
dGluT2JqZWN0KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QpCi0gICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2Jh
bE9iamVjdCkKLXsKLX0KLQotaW5saW5lIEpTQzo6SlNGdW5jdGlvbiogRE9NQ29uc3RydWN0b3JK
U0J1aWx0aW5PYmplY3Q6OmluaXRpYWxpemVGdW5jdGlvbigpCi17Ci0gICAgcmV0dXJuIG1faW5p
dGlhbGl6ZUZ1bmN0aW9uLmdldCgpOwotfQotCi1pbmxpbmUgdm9pZCBET01Db25zdHJ1Y3RvckpT
QnVpbHRpbk9iamVjdDo6c2V0SW5pdGlhbGl6ZUZ1bmN0aW9uKEpTQzo6Vk0mIHZtLCBKU0M6OkpT
RnVuY3Rpb24mIGZ1bmN0aW9uKQotewotICAgIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLnNldCh2bSwg
dGhpcywgJmZ1bmN0aW9uKTsKLX0KLQotaW5saW5lIEpTRE9NR2xvYmFsT2JqZWN0KiBkZXByZWNh
dGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAg
IC8vIEZJWE1FOiBDYWxsZXJzIHRvIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzaW5nIHRoZSBn
bG9iYWwgb2JqZWN0Ci0gICAgLy8gZnJvbSB3aGljaCB0aGUgb2JqZWN0IGlzIGJlaW5nIGNyZWF0
ZWQsIGluc3RlYWQgb2YgYXNzdW1pbmcgdGhlIGxleGljYWwgb25lLgotICAgIC8vIGUuZy4gc3Vi
ZnJhbWUuZG9jdW1lbnQuYm9keSBzaG91bGQgdXNlIHRoZSBzdWJmcmFtZSdzIGdsb2JhbCBvYmpl
Y3QsIG5vdCB0aGUgbGV4aWNhbCBvbmUuCi0gICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVj
dHVyZShKU0M6OlZNJiB2bSwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKLXsKLSAg
ICBpZiAoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldENhY2hlZERPTVN0cnVjdHVyZShn
bG9iYWxPYmplY3QsIFdyYXBwZXJDbGFzczo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHN0cnVj
dHVyZTsKLSAgICByZXR1cm4gY2FjaGVET01TdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVy
Q2xhc3M6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgJmdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpj
cmVhdGVQcm90b3R5cGUodm0sICZnbG9iYWxPYmplY3QpKSwgV3JhcHBlckNsYXNzOjppbmZvKCkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVj
dHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBpcyB3cm9uZy4gSXQgdXNlcyB0aGUgd3Jvbmcg
Z2xvYmFsIG9iamVjdCBmb3IgY3JlYXRpbmcgdGhlIHByb3RvdHlwZSBzdHJ1Y3R1cmUuCi0gICAg
cmV0dXJuIGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGV4ZWMtPnZtKCksICpkZXByZWNh
dGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlNDOjpKU09iamVjdCogZ2V0RE9NUHJvdG90eXBlKEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi17Ci0gICAgcmV0
dXJuIEpTQzo6anNDYXN0PEpTQzo6SlNPYmplY3QqPihhc09iamVjdChnZXRET01TdHJ1Y3R1cmU8
V3JhcHBlckNsYXNzPih2bSwgKkpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFs
T2JqZWN0KSktPnN0b3JlZFByb3RvdHlwZSgpKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEpT
Q2xhc3M+IGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RP
TUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotewotICAgIEpTQzo6SlNPYmplY3QqIG9iamVj
dCA9IEpTQ2xhc3M6OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNDbGFzcz4oZ2xvYmFsT2JqZWN0
LnZtKCksIGdsb2JhbE9iamVjdCksICZnbG9iYWxPYmplY3QpOwotICAgIGNhbGxGdW5jdGlvbldp
dGhDdXJyZW50QXJndW1lbnRzKHN0YXRlLCAqb2JqZWN0LCBpbml0aWFsaXplRnVuY3Rpb24pOwot
ICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShvYmplY3QpOwotfQotCi1pbmxpbmUgSlND
OjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJPd25lcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBK
U0M6OkFycmF5QnVmZmVyKikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyKj4od29ybGQudm0oKS5tX3R5cGVkQXJyYXlDb250cm9sbGVyLmdldCgp
KS0+d3JhcHBlck93bmVyKCk7Ci19Ci0KLWlubGluZSB2b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJy
YXlCdWZmZXIqIGRvbU9iamVjdCkKLXsKLSAgICByZXR1cm4gZG9tT2JqZWN0OwotfQotCi1pbmxp
bmUgSlNET01PYmplY3QqIGdldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwg
dm9pZCopIHsgcmV0dXJuIG51bGxwdHI7IH0KLWlubGluZSBib29sIHNldElubGluZUNhY2hlZFdy
YXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCosIEpTRE9NT2JqZWN0KiwgSlNDOjpXZWFrSGFu
ZGxlT3duZXIqKSB7IHJldHVybiBmYWxzZTsgfQotaW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNo
ZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCopIHsgcmV0dXJu
IGZhbHNlOyB9Ci0KLWlubGluZSBKU0RPTU9iamVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCkKLXsKLSAg
ICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJl
dHVybiBkb21PYmplY3QtPndyYXBwZXIoKTsKLX0KLQotaW5saW5lIEpTQzo6SlNBcnJheUJ1ZmZl
ciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFy
cmF5QnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyLT5tX3dyYXBwZXIuZ2V0KCk7Ci19
Ci0KLWlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3
b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21PYmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyLCBK
U0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKQotewotICAgIGlmICghd29ybGQuaXNO
b3JtYWwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRvbU9iamVjdC0+c2V0V3JhcHBl
cih3cmFwcGVyLCB3cmFwcGVyT3duZXIsICZ3b3JsZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWlubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3Js
ZCwgSlNDOjpBcnJheUJ1ZmZlciogZG9tT2JqZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBw
ZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpCi17Ci0gICAgaWYgKCF3b3Js
ZC5pc05vcm1hbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0LT5tX3dy
YXBwZXIgPSBKU0M6OldlYWs8SlNDOjpKU0FycmF5QnVmZmVyPih3cmFwcGVyLCB3cmFwcGVyT3du
ZXIsICZ3b3JsZCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIGNsZWFySW5s
aW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUq
IGRvbU9iamVjdCwgSlNET01PYmplY3QqIHdyYXBwZXIpCi17Ci0gICAgaWYgKCF3b3JsZC5pc05v
cm1hbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZG9tT2JqZWN0LT5jbGVhcldyYXBw
ZXIod3JhcHBlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSBib29sIGNsZWFySW5s
aW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVy
KiBkb21PYmplY3QsIEpTQzo6SlNBcnJheUJ1ZmZlciogd3JhcHBlcikKLXsKLSAgICBpZiAoIXdv
cmxkLmlzTm9ybWFsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB3ZWFrQ2xlYXIoZG9t
T2JqZWN0LT5tX3dyYXBwZXIsIHdyYXBwZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdy
YXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKLXsKLSAg
ICBpZiAoYXV0byogd3JhcHBlciA9IGdldElubGluZUNhY2hlZFdyYXBwZXIod29ybGQsICZkb21P
YmplY3QpKQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gd29ybGQubV93cmFw
cGVycy5nZXQod3JhcHBlcktleSgmZG9tT2JqZWN0KSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IGlubGluZSB2b2lkIGNhY2hlV3JhcHBl
cihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xh
c3MqIHdyYXBwZXIpCi17Ci0gICAgSlNDOjpXZWFrSGFuZGxlT3duZXIqIG93bmVyID0gd3JhcHBl
ck93bmVyKHdvcmxkLCBkb21PYmplY3QpOwotICAgIGlmIChzZXRJbmxpbmVDYWNoZWRXcmFwcGVy
KHdvcmxkLCBkb21PYmplY3QsIHdyYXBwZXIsIG93bmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IHdlYWtBZGQod29ybGQubV93cmFwcGVycywgd3JhcHBlcktleShkb21PYmplY3QpLCBKU0M6Oldl
YWs8SlNDOjpKU09iamVjdD4od3JhcHBlciwgb3duZXIsICZ3b3JsZCkpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCB1
bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0
LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCi17Ci0gICAgaWYgKGNsZWFySW5saW5lQ2FjaGVkV3Jh
cHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFwcGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdl
YWtSZW1vdmUod29ybGQubV93cmFwcGVycywgd3JhcHBlcktleShkb21PYmplY3QpLCB3cmFwcGVy
KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlubGluZSBh
dXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+
JiYgZG9tT2JqZWN0KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8RE9N
Q2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERP
TUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGUKLXsKLSAgICB1c2luZyBXcmFwcGVyQ2xhc3Mg
PSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVy
Q2xhc3M7Ci0KLSAgICBBU1NFUlQoIWdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3Js
ZCgpLCBkb21PYmplY3QpKTsKLSAgICBhdXRvKiBkb21PYmplY3RQdHIgPSBkb21PYmplY3QucHRy
KCk7Ci0gICAgYXV0byogd3JhcHBlciA9IFdyYXBwZXJDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVj
dHVyZTxXcmFwcGVyQ2xhc3M+KGdsb2JhbE9iamVjdC0+dm0oKSwgKmdsb2JhbE9iamVjdCksIGds
b2JhbE9iamVjdCwgV1RGTW92ZShkb21PYmplY3QpKTsKLSAgICBjYWNoZVdyYXBwZXIoZ2xvYmFs
T2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3RQdHIsIHdyYXBwZXIpOwotICAgIHJldHVybiB3cmFw
cGVyOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5hbWUgVD4gaW5saW5l
IGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8
VD4mJiBkb21PYmplY3QpIC0+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8
RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRz
PERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5cGUKLXsKLSAgICByZXR1cm4gY3JlYXRlV3Jh
cHBlcjxET01DbGFzcz4oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8RE9NQ2xh
c3M+KFdURk1vdmUoZG9tT2JqZWN0KSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFz
cz4gaW5saW5lIEpTQzo6SlNWYWx1ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKLXsKLSAgICBp
ZiAoYXV0byogd3JhcHBlciA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgp
LCBkb21PYmplY3QpKQotICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gdG9KU05l
d2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBSZWY8RE9NQ2xhc3M+KGRvbU9iamVjdCkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDbGFzcyYgY2FzdFRo
aXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCi17Ci0gICAgYXV0byB0aGlzVmFsdWUgPSBz
dGF0ZS50aGlzVmFsdWUoKTsKLSAgICBhdXRvIGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNEb3duY2Fz
dDxKU0NsYXNzKj4oc3RhdGUudm0oKSwgdGhpc1ZhbHVlKTsKLSAgICBBU1NFUlQoY2FzdGVkVGhp
cyk7Ci0gICAgcmV0dXJuICpjYXN0ZWRUaGlzOwotfQotCi1pbmxpbmUgaW50MzJfdCBmaW5pdGVJ
bnQzMlZhbHVlKEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGJvb2wm
IG9rYXkpCi17Ci0gICAgZG91YmxlIG51bWJlciA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOwotICAg
IG9rYXkgPSBzdGQ6OmlzZmluaXRlKG51bWJlcik7Ci0gICAgcmV0dXJuIEpTQzo6dG9JbnQzMihu
dW1iZXIpOwotfQotCi0vLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNl
cXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KLWlubGlu
ZSBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6
SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQmIGxlbmd0aCkKLXsKLSAgICBKU0M6OlZNJiB2bSA9IGV4
ZWMudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAg
ICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS5nZXRPYmplY3QoKTsKLSAgICBpZiAoIW9i
amVjdCkgewotICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgSlNDOjpKU1ZhbHVlIGxlbmd0aFZh
bHVlID0gb2JqZWN0LT5nZXQoJmV4ZWMsIGV4ZWMucHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7Ci0KLSAgICBpZiAobGVuZ3Ro
VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVy
cm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
bGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9VSW50MzIoJmV4ZWMpOwotICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIG51bGxwdHIpOwotCi0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotaW5saW5l
IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlciYgYnVmZmVyKQotewotICAgIGlmIChh
dXRvIHJlc3VsdCA9IGdldENhY2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBidWZm
ZXIpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8gVGhlIEpTQXJyYXlCdWZmZXI6
OmNyZWF0ZSBmdW5jdGlvbiB3aWxsIHJlZ2lzdGVyIHRoZSB3cmFwcGVyIGluIGZpbmlzaENyZWF0
aW9uLgotICAgIHJldHVybiBKU0M6OkpTQXJyYXlCdWZmZXI6OmNyZWF0ZShzdGF0ZS0+dm0oKSwg
Z2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVyZShidWZmZXIuc2hhcmluZ01vZGUoKSks
ICZidWZmZXIpOwotfQotCi1pbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZm
ZXJWaWV3JiB2aWV3KQotewotICAgIHJldHVybiB2aWV3LndyYXAoc3RhdGUsIGdsb2JhbE9iamVj
dCk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZl
cikKLXsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0g
ICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVjdCwgKmJ1ZmZlcik7Ci19Ci0KLWlubGlu
ZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAg
aWYgKCF2aWV3KQotICAgICAgICByZXR1cm4gSlNDOjpqc051bGwoKTsKLSAgICByZXR1cm4gdG9K
UyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqdmlldyk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgcHRyKQotewotICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUg
VD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8VD4mJiBwdHIpCi17Ci0gICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBwdHIuZ2V0KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQot
ewotICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBj
b25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXplKCkpOwotICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBhcnJheS0+cHV0RGly
ZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXSkpOwot
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAg
fQotICAgIHJldHVybiBhcnJheTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRyPFQ+PiYgdmVjdG9yKQotewotICAgIEpT
Qzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RF
bXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5zaXplKCkpOwotICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgaSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXS5nZXQoKSkpOwotICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgfQot
ICAgIHJldHVybiBhcnJheTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5hbWUm
IHByaXZhdGVOYW1lKQotewotICAgIHJldHVybiBKU0M6OlN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZt
KCksIHByaXZhdGVOYW1lLnVpZCgpKTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRl
cmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0
YXRlLCB2YWx1ZSwgZmFsc2UpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFs
T2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIHZhbHVlKQotewotICAgIHJldHVybiBjcmVh
dGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0
LCB2YWx1ZSksIGZhbHNlKTsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JF
bmQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQotewotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJl
c3VsdE9iamVjdCgmc3RhdGUsIEpTQzo6anNVbmRlZmluZWQoKSwgdHJ1ZSk7Ci19Ci0KLWlubGlu
ZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZl
clZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvKiB3cmFw
cGVyID0ganNEeW5hbWljRG93bmNhc3Q8SlNDOjpKU0FycmF5QnVmZmVyVmlldyo+KHZtLCB2YWx1
ZSk7Ci0gICAgaWYgKCF3cmFwcGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1
cm4gd3JhcHBlci0+cG9zc2libHlTaGFyZWRJbXBsKCk7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlND
OjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5zaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0s
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRvIHJlc3VsdCA9IHRvUG9zc2libHlTaGFy
ZWRBcnJheUJ1ZmZlclZpZXcodm0sIHZhbHVlKTsKLSAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQt
PmlzU2hhcmVkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4
QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bv
c3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7
IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQxNkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MTZB
cnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9z
c2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7
IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MzJB
cnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9z
c2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7
IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhB
cnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9z
c2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7
IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50OENsYW1wZWRBcnJheT4gdG9Qb3NzaWJseVNoYXJl
ZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0
dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBl
ZEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4g
dG9Qb3NzaWJseVNoYXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFs
dWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVp
bnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJh
eT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMy
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3
PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpG
bG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlw
ZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLQotaW5saW5lIFJlZlB0
cjxKU0M6OkludDhBcnJheT4gdG9VbnNoYXJlZEludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpK
U1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlND
OjpJbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkludDE2QXJy
YXk+IHRvVW5zaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUp
IHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRv
cj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvVW5zaGFy
ZWRJbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpT
Qzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OkludDMyQWRhcHRvcj4odm0sIHZhbHVl
KTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJl
ZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5l
IFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJy
YXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hh
cmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhDbGFtcGVkQWRhcHRvcj4odm0sIHZhbHVlKTsg
fQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXko
SlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVk
TmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5l
IFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYg
dm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlw
ZWRWaWV3PEpTQzo6VWludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxK
U0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2bSwgSlND
OjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkZs
b2F0NjRBcnJheT4gdG9VbnNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpG
bG9hdDY0QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBKU1Q+IGlubGluZSBWZWN0b3I8UmVmPFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6RXhl
Y1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQotewotICAgIEpTQzo6Vk0mIHZtID0g
c3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0K
LSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVF
cnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIFZl
Y3RvcjxSZWY8VD4+IHJlc3VsdDsKLSAgICBmb3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIHZhbHVl
LCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIGpzVmFsdWUpIHsKLSAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgICAgIGlmIChqc1ZhbHVlLmluaGVyaXRzKHZtLCBKU1Q6OmluZm8oKSkpIHsK
LSAgICAgICAgICAgIGF1dG8qIG9iamVjdCA9IEpTVDo6dG9XcmFwcGVkKHZtLCBqc1ZhbHVlKTsK
LSAgICAgICAgICAgIEFTU0VSVChvYmplY3QpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgq
b2JqZWN0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0aHJvd0FycmF5RWxlbWVudFR5
cGVFcnJvcigqc3RhdGUsIHNjb3BlKTsKLSAgICB9KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1pbmxpbmUgU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKLXsKLSAgICBBU1NFUlQoIXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKTsKLSAg
ICByZXR1cm4gcHJvcGVydHlOYW1lLnVpZCgpID8gcHJvcGVydHlOYW1lLnVpZCgpIDogcHJvcGVy
dHlOYW1lLnB1YmxpY05hbWUoKTsKLX0KLQotaW5saW5lIEF0b21pY1N0cmluZyBwcm9wZXJ0eU5h
bWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAg
cmV0dXJuIEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlk
KCkgOiBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLX0KLQotdGVtcGxhdGU8SlNDOjpOYXRp
dmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbiwgaW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1
ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpT
Qzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAg
ICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUoZXhl
Yy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBsZW5ndGgsIHByb3BlcnR5TmFt
ZS5wdWJsaWNOYW1lKCksIG5hdGl2ZUZ1bmN0aW9uKSk7Ci19CiAKIEFMV0FZU19JTkxJTkUgdm9p
ZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2Nv
cGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKIHsKQEAgLTc5OCwyOCArMTI3
LDQgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZQogICAgIHJldHVy
biB0b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJl
dHVyblZhbHVlKCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGlu
Z1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQm
IG5vZGUpCi17Ci0gICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCAmbm9k
ZSkgPyAmbm9kZSA6IG51bGxwdHI7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBU
KiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgVCogbm9kZSkKLXsKLSAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3Rh
dGUsIG5vZGUpID8gbm9kZSA6IG51bGxwdHI7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlu
bGluZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9k
ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQqPiYmIHZhbHVlKQotewotICAg
IGlmICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVhc2VF
eGNlcHRpb24oKTsKLSAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIHZhbHVl
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5l
IEV4Y2VwdGlvbk9yPFQqPiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uT3I8VCY+JiYgdmFsdWUpCi17Ci0gICAgaWYg
KHZhbHVlLmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gdmFsdWUucmVsZWFzZUV4Y2Vw
dGlvbigpOwotICAgIHJldHVybiBjaGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgdmFsdWUucmVs
ZWFzZVJldHVyblZhbHVlKCkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHJldmlz
aW9uIDIxMTM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJET01XaW5k
b3cuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmdTZWN1cml0eS5oIgogI2luY2x1ZGUgIkpTRE9NR2xv
YmFsT2JqZWN0VGFzay5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVk
ZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCkBAIC0yODYsNiArMjg3LDU0IEBAIEpTRE9NV2lu
ZG93KiB0b0pTRE9NV2luZG93KEpTQzo6Vk0mIHZtLCAKICAgICByZXR1cm4gMDsKIH0KIAorRE9N
V2luZG93JiBjYWxsZXJET01XaW5kb3coRXhlY1N0YXRlKiBleGVjKQoreworICAgIGNsYXNzIEdl
dENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgR2V0Q2Fs
bGVyR2xvYmFsT2JqZWN0RnVuY3RvcigpID0gZGVmYXVsdDsKKworICAgICAgICBTdGFja1Zpc2l0
b3I6OlN0YXR1cyBvcGVyYXRvcigpKFN0YWNrVmlzaXRvciYgdmlzaXRvcikgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFtX2hhc1NraXBwZWRGaXJzdEZyYW1lKSB7CisgICAgICAg
ICAgICAgICAgbV9oYXNTa2lwcGVkRmlyc3RGcmFtZSA9IHRydWU7CisgICAgICAgICAgICAgICAg
cmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChhdXRvKiBjb2RlQmxvY2sgPSB2aXNpdG9yLT5jb2RlQmxvY2soKSkKKyAgICAgICAg
ICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmlzaXRvci0+Y2FsbGVlKCkp
OworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDYWxsZWUgaXMgbm90IGFuIG9iamVjdCBpZiB0
aGUgY2FsbGVyIGlzIFdlYiBBc3NlbWJseS4KKyAgICAgICAgICAgICAgICAvLyBGaWd1cmUgb3V0
IHdoYXQgdG8gZG8gaGVyZS4gV2UgY2FuIHByb2JhYmx5IGdldCB0aGUgZ2xvYmFsIG9iamVjdAor
ICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIHRvcC1tb3N0IFdhc20gSW5zdGFuY2UuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MjEKKyAgICAgICAgICAgICAg
ICBpZiAodmlzaXRvci0+Y2FsbGVlKCktPmlzT2JqZWN0KCkpCisgICAgICAgICAgICAgICAgICAg
IG1fZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkpLT5n
bG9iYWxPYmplY3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBTdGFja1Zp
c2l0b3I6OkRvbmU7CisgICAgICAgIH0KKworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxPYmplY3Q7IH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIG11dGFibGUgYm9vbCBtX2hhc1NraXBwZWRGaXJzdEZyYW1lIHsgZmFsc2UgfTsK
KyAgICAgICAgbXV0YWJsZSBKU0dsb2JhbE9iamVjdCogbV9nbG9iYWxPYmplY3QgeyBudWxscHRy
IH07CisgICAgfTsKKworICAgIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgaXRlcjsKKyAg
ICBleGVjLT5pdGVyYXRlKGl0ZXIpOworICAgIHJldHVybiBpdGVyLmdsb2JhbE9iamVjdCgpID8g
YXNKU0RPTVdpbmRvdyhpdGVyLmdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpIDogZmlyc3RET01X
aW5kb3coZXhlYyk7Cit9CisKK0RPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpLT53cmFwcGVkKCk7Cit9CisKK0RPTVdpbmRvdyYgZmlyc3RET01XaW5kb3coRXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPnZtRW50cnlHbG9i
YWxPYmplY3QoKSktPndyYXBwZWQoKTsKK30KKwogdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OmZpcmVG
cmFtZUNsZWFyZWRXYXRjaHBvaW50c0ZvcldpbmRvdyhET01XaW5kb3cqIHdpbmRvdykKIHsKICAg
ICBKU0M6OlZNJiB2bSA9IGNvbW1vblZNKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAkocmV2aXNpb24gMjExMzk3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3
LDQgKzk3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIEpTRE9NV2luZG93KiB0b0pTRE9N
V2luZG93KEZyYW1lKiwgRE9NV3JhcHBlcldvcmxkJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgSlNE
T01XaW5kb3cqIHRvSlNET01XaW5kb3coSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CiAKKyAgICBE
T01XaW5kb3cmIGNhbGxlckRPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworICAgIERPTVdpbmRv
dyYgYWN0aXZlRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlKik7CisgICAgRE9NV2luZG93JiBmaXJz
dERPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0N1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dDdXN0b20u
Y3BwCShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRN
TERvY3VtZW50LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIKICNpbmNsdWRl
ICJKU0V2ZW50LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiSlNI
VE1MQXVkaW9FbGVtZW50LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd1Byb3BlcnRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5jcHAJKHJldmlzaW9uIDIxMTM5NykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUg
IkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpT
RE9NQmluZGluZ1NlY3VyaXR5LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCiAjaW5j
bHVkZSAiSlNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNIVE1MQ29sbGVjdGlvbi5oIgpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmNwcAko
cmV2aXNpb24gMjExMzUzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwOjIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3Jh
cHBlckNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMzQgQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgPHNhbUB3
ZWJraXQub3JnPgorICogIENvcHlyaWdodCAoQykgMjAxMyBNaWNoYWVsIFBydWV0dCA8bWljaGFl
bEA2OGsub3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorCisjaW5jbHVkZSAiQ2FjaGVkU2Ny
aXB0LmgiCisjaW5jbHVkZSAiQ29tbW9uVk0uaCIKKyNpbmNsdWRlICJET01Db25zdHJ1Y3Rvcldp
dGhEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJFeGNl
cHRpb25Db2RlRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJFeGNlcHRpb25IZWFkZXJzLmgiCisj
aW5jbHVkZSAiRXhjZXB0aW9uSW50ZXJmYWNlcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgorI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9u
LmgiCisjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01Qcm9taXNlLmgi
CisjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKKyNpbmNsdWRlICJKU0V4Y2VwdGlvbkJh
c2UuaCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgPGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxsU3RhY2suaD4KKyNpbmNs
dWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvRGF0ZUluc3RhbmNlLmg+CisjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvRXJyb3JIYW5kbGluZ1Njb3BlLmg+CisjaW5jbHVkZSA8cnVudGltZS9FcnJvcklu
c3RhbmNlLmg+CisjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4KKyNpbmNsdWRlIDxydW50
aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KKyNpbmNsdWRlIDxydW50aW1lL0pTRnVuY3Rpb24uaD4K
KyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcgbmFtZXNwYWNlIElu
c3BlY3RvcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVEFUSUNfQVNTRVJUX0lTX1RSSVZJ
QUxMWV9ERVNUUlVDVElCTEUoRE9NQ29uc3RydWN0b3JPYmplY3QpOworU1RBVElDX0FTU0VSVF9J
U19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50KTsKKwor
dm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkK
K3sKKyAgICBjb21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7Cit9CisK
K0pTVmFsdWUganNPd25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmlu
ZyYgcykKK3sKKyAgICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwor
ICAgIHJldHVybiBqc093bmVkU3RyaW5nKGV4ZWMsIHMpOworfQorCitKU1ZhbHVlIGpzU3RyaW5n
T3JVbmRlZmluZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCit7CisgICAgaWYg
KHMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHJldHVybiBq
c1N0cmluZ1dpdGhDYWNoZShleGVjLCBzKTsKK30KKworSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFVSTCYgdXJsKQoreworICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNo
ZShleGVjLCB1cmwuc3RyaW5nKCkpOworfQorCitKU1ZhbHVlIGpzU3RyaW5nT3JVbmRlZmluZWQo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBVUkwmIHVybCkKK3sKKyAgICBpZiAodXJsLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4ganNTdHJpbmdXaXRo
Q2FjaGUoZXhlYywgdXJsLnN0cmluZygpKTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc3Ry
aW5nVG9CeXRlU3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUs
IFN0cmluZyYmIHN0cmluZykKK3sKKyAgICBpZiAoIXN0cmluZy5jb250YWluc09ubHlMYXRpbjEo
KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nOworfQorCitTdHJpbmcgaWRlbnRp
ZmllclRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVu
dGlmaWVyKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIHN0cmluZyA9IGlkZW50aWZpZXIu
c3RyaW5nKCk7CisgICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdU
Rk1vdmUoc3RyaW5nKSk7Cit9CisKK1N0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgU3RyaW5nIHN0cmlu
ZyA9IHZhbHVlLnRvV1RGU3RyaW5nKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKworICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3RhdGUsIHNjb3Bl
LCBXVEZNb3ZlKHN0cmluZykpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaGFzVW5wYWlyZWRT
dXJyb2dhdGUoU3RyaW5nVmlldyBzdHJpbmcpCit7CisgICAgLy8gRmFzdCBwYXRoIGZvciA4LWJp
dCBzdHJpbmdzOyB0aGV5IGNhbid0IGhhdmUgYW55IHN1cnJvZ2F0ZXMuCisgICAgaWYgKHN0cmlu
Zy5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAoYXV0byBjb2RlUG9p
bnQgOiBzdHJpbmcuY29kZVBvaW50cygpKSB7CisgICAgICAgIGlmIChVX0lTX1NVUlJPR0FURShj
b2RlUG9pbnQpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKworc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9VU1ZTdHJpbmcoU3RyaW5n
JiYgc3RyaW5nKQoreworICAgIC8vIEZhc3QgcGF0aCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlcmUg
YXJlIG5vIHVucGFpcmVkIHN1cnJvZ2F0ZXMuCisgICAgaWYgKCFoYXNVbnBhaXJlZFN1cnJvZ2F0
ZShzdHJpbmcpKQorICAgICAgICByZXR1cm4gc3RyaW5nOworCisgICAgLy8gU2xvdyBwYXRoOiBo
dHRwOi8vaGV5Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1vYnRhaW4tdW5pY29kZQorICAgIC8v
IFJlcGxhY2VzIHVucGFpcmVkIHN1cnJvZ2F0ZXMgd2l0aCB0aGUgcmVwbGFjZW1lbnQgY2hhcmFj
dGVyLgorICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNp
dHkoc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBTdHJpbmdWaWV3IHZpZXcgeyBzdHJpbmcgfTsKKyAg
ICBmb3IgKGF1dG8gY29kZVBvaW50IDogdmlldy5jb2RlUG9pbnRzKCkpIHsKKyAgICAgICAgaWYg
KFVfSVNfU1VSUk9HQVRFKGNvZGVQb2ludCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJl
cGxhY2VtZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChjb2RlUG9pbnQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Cit9
CisKK1N0cmluZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnRpZmllcikKK3sKKyAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJp
bmcoKTsKKyAgICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKK30K
KworU3RyaW5nIHZhbHVlVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKworICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmlu
Zygmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBy
ZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKK30KKworSlNWYWx1ZSBq
c0RhdGUoRXhlY1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUpCit7CisgICAgcmV0dXJuIERhdGVJ
bnN0YW5jZTo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
ZGF0ZVN0cnVjdHVyZSgpLCB2YWx1ZSk7Cit9CisKK2RvdWJsZSB2YWx1ZVRvRGF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCisg
ICAgICAgIHJldHVybiB2YWx1ZS5hc051bWJlcigpOworICAgIGlmICghdmFsdWUuaW5oZXJpdHMo
ZXhlYy0+dm0oKSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RGF0ZUluc3RhbmNlKj4odmFsdWUudG9PYmplY3QoZXhlYykpLT5pbnRlcm5hbE51bWJlcigp
OworfQorCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXhj
ZXB0aW9uVmFsdWUsIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQoreworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGlu
Z0FQSUxvY2soKSk7CisgICAgYXV0byogZXhjZXB0aW9uID0ganNEeW5hbWljRG93bmNhc3Q8SlND
OjpFeGNlcHRpb24qPih2bSwgZXhjZXB0aW9uVmFsdWUpOworICAgIGlmICghZXhjZXB0aW9uKSB7
CisgICAgICAgIGV4Y2VwdGlvbiA9IHZtLmxhc3RFeGNlcHRpb24oKTsKKyAgICAgICAgaWYgKCFl
eGNlcHRpb24pCisgICAgICAgICAgICBleGNlcHRpb24gPSBKU0M6OkV4Y2VwdGlvbjo6Y3JlYXRl
KGV4ZWMtPnZtKCksIGV4Y2VwdGlvblZhbHVlLCBKU0M6OkV4Y2VwdGlvbjo6RG9Ob3RDYXB0dXJl
U3RhY2spOworICAgIH0KKworICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIGNh
Y2hlZFNjcmlwdCk7Cit9CisKK1N0cmluZyByZXRyaWV2ZUVycm9yTWVzc2FnZShFeGVjU3RhdGUm
IHN0YXRlLCBWTSYgdm0sIEpTVmFsdWUgZXhjZXB0aW9uLCBDYXRjaFNjb3BlJiBjYXRjaFNjb3Bl
KQoreworICAgIGlmIChhdXRvKiBleGNlcHRpb25CYXNlID0gdG9FeGNlcHRpb25CYXNlKHZtLCBl
eGNlcHRpb24pKQorICAgICAgICByZXR1cm4gZXhjZXB0aW9uQmFzZS0+dG9TdHJpbmcoKTsKKwor
ICAgIC8vIEZJWE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNwZWN0b3I6
IFdlYkNvcmU6OnJlcG9ydEV4Y2VwdGlvbiBzaG91bGQgbm90IGV2YWx1YXRlIEphdmFTY3JpcHQg
aGFuZGxpbmcgZXhjZXB0aW9ucworICAgIC8vIElmIHRoaXMgaXMgYSBjdXN0b20gZXhjZXB0aW9u
IG9iamVjdCwgY2FsbCB0b1N0cmluZyBvbiBpdCB0byB0cnkgYW5kIGdldCBhIG5pY2Ugc3RyaW5n
IHJlcHJlc2VudGF0aW9uIGZvciB0aGUgZXhjZXB0aW9uLgorICAgIFN0cmluZyBlcnJvck1lc3Nh
Z2U7CisgICAgaWYgKGF1dG8qIGVycm9yID0ganNEeW5hbWljRG93bmNhc3Q8RXJyb3JJbnN0YW5j
ZSo+KHZtLCBleGNlcHRpb24pKQorICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci0+c2FuaXRp
emVkVG9TdHJpbmcoJnN0YXRlKTsKKyAgICBlbHNlCisgICAgICAgIGVycm9yTWVzc2FnZSA9IGV4
Y2VwdGlvbi50b1dURlN0cmluZygmc3RhdGUpOworCisgICAgLy8gV2UgbmVlZCB0byBjbGVhciBh
bnkgbmV3IGV4Y2VwdGlvbiB0aGF0IG1heSBiZSB0aHJvd24gaW4gdGhlIHRvU3RyaW5nKCkgY2Fs
bCBhYm92ZS4KKyAgICAvLyByZXBvcnRFeGNlcHRpb24oKSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUg
bWFraW5nIG5ldyBleGNlcHRpb25zLgorICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsK
KyAgICB2bS5jbGVhckxhc3RFeGNlcHRpb24oKTsKKyAgICByZXR1cm4gZXJyb3JNZXNzYWdlOwor
fQorCit2b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9u
KiBleGNlcHRpb24sIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0LCBFeGNlcHRpb25EZXRhaWxz
KiBleGNlcHRpb25EZXRhaWxzKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworCisgICAgUkVMRUFTRV9BU1NFUlQo
dm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgaWYgKGlzVGVybWluYXRl
ZEV4ZWN1dGlvbkV4Y2VwdGlvbih2bSwgZXhjZXB0aW9uKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoZXhlYy0+dm0oKSk7CisKKyAgICBSZWZQ
dHI8U2NyaXB0Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4
Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4Q2FsbFN0YWNrU2l6
ZVRvQ2FwdHVyZSkpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CisgICAgdm0uY2xlYXJM
YXN0RXhjZXB0aW9uKCk7CisKKyAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsK
KyAgICBpZiAoSlNET01XaW5kb3cqIHdpbmRvdyA9IGpzRHluYW1pY0Rvd25jYXN0PEpTRE9NV2lu
ZG93Kj4odm0sIGdsb2JhbE9iamVjdCkpIHsKKyAgICAgICAgaWYgKCF3aW5kb3ctPndyYXBwZWQo
KS5pc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpbnQgbGluZU51bWJlciA9IDA7CisgICAgaW50IGNvbHVtbk51bWJlciA9IDA7
CisgICAgU3RyaW5nIGV4Y2VwdGlvblNvdXJjZVVSTDsKKyAgICBpZiAoY29uc3QgU2NyaXB0Q2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBjYWxsU3RhY2stPmZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKCkp
IHsKKyAgICAgICAgbGluZU51bWJlciA9IGNhbGxGcmFtZS0+bGluZU51bWJlcigpOworICAgICAg
ICBjb2x1bW5OdW1iZXIgPSBjYWxsRnJhbWUtPmNvbHVtbk51bWJlcigpOworICAgICAgICBleGNl
cHRpb25Tb3VyY2VVUkwgPSBjYWxsRnJhbWUtPnNvdXJjZVVSTCgpOworICAgIH0KKworICAgIFN0
cmluZyBlcnJvck1lc3NhZ2UgPSByZXRyaWV2ZUVycm9yTWVzc2FnZSgqZXhlYywgdm0sIGV4Y2Vw
dGlvbi0+dmFsdWUoKSwgc2NvcGUpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTsKKyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5yZXBvcnRFeGNlcHRpb24oZXJyb3JNZXNz
YWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGV4Y2VwdGlvblNvdXJjZVVSTCwgZXhjZXB0
aW9uLCBjYWxsU3RhY2stPnNpemUoKSA/IGNhbGxTdGFjayA6IG51bGxwdHIsIGNhY2hlZFNjcmlw
dCk7CisKKyAgICBpZiAoZXhjZXB0aW9uRGV0YWlscykgeworICAgICAgICBleGNlcHRpb25EZXRh
aWxzLT5tZXNzYWdlID0gZXJyb3JNZXNzYWdlOworICAgICAgICBleGNlcHRpb25EZXRhaWxzLT5s
aW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+Y29sdW1u
TnVtYmVyID0gY29sdW1uTnVtYmVyOworICAgICAgICBleGNlcHRpb25EZXRhaWxzLT5zb3VyY2VV
UkwgPSBleGNlcHRpb25Tb3VyY2VVUkw7CisgICAgfQorfQorCit2b2lkIHJlcG9ydEN1cnJlbnRF
eGNlcHRpb24oRXhlY1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8qIGV4Y2Vw
dGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOworICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Cisg
ICAgcmVwb3J0RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7Cit9CisKK3N0YXRpYyBKU1ZhbHVl
IGNyZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUgZWMsIGNv
bnN0IFN0cmluZyogbWVzc2FnZSA9IG51bGxwdHIpCit7CisgICAgaWYgKCFlYyB8fCBlYyA9PSBF
eGlzdGluZ0V4Y2VwdGlvbkVycm9yKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKwor
ICAgIC8vIEZJWE1FOiBIYW5kbGUgb3RoZXIgV2ViSURMIGV4Y2VwdGlvbiB0eXBlcy4KKyAgICBp
ZiAoZWMgPT0gVHlwZUVycm9yKSB7CisgICAgICAgIGlmICghbWVzc2FnZSB8fCBtZXNzYWdlLT5p
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMpOworICAg
ICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMsICptZXNzYWdlKTsKKyAgICB9CisKKyAg
ICBpZiAoZWMgPT0gUmFuZ2VFcnJvcikgeworICAgICAgICBpZiAoIW1lc3NhZ2UgfHwgbWVzc2Fn
ZS0+aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
QVNDSUlMaXRlcmFsKCJCYWQgdmFsdWUiKSk7CisgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZUVy
cm9yKGV4ZWMsICptZXNzYWdlKTsKKyAgICB9CisKKyAgICBpZiAoZWMgPT0gU3RhY2tPdmVyZmxv
d0Vycm9yKQorICAgICAgICByZXR1cm4gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwor
CisgICAgLy8gRklYTUU6IEFsbCBjYWxsZXJzIHRvIGNyZWF0ZURPTUV4Y2VwdGlvbiBuZWVkIHRv
IHBhc3MgaW4gdGhlIGNvcnJlY3QgZ2xvYmFsIG9iamVjdC4KKyAgICAvLyBGb3Igbm93LCB3ZSdy
ZSBnb2luZyB0byBhc3N1bWUgdGhlIGxleGljYWxHbG9iYWxPYmplY3QuIFdoaWNoIGlzIHdyb25n
IGluIGNhc2VzIGxpa2UgdGhpczoKKyAgICAvLyBmcmFtZXNbMF0uZG9jdW1lbnQuY3JlYXRlRWxl
bWVudChudWxsLCBudWxsKTsgLy8gdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGljaCBzaG91bGQgaGF2
ZSB0aGUgc3ViZnJhbWUncyBwcm90b3R5cGVzLgorICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpOworCisg
ICAgRXhjZXB0aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKKworICAgIENTdHJp
bmcgbWVzc2FnZUNTdHJpbmc7CisgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgIG1lc3NhZ2VDU3Ry
aW5nID0gbWVzc2FnZS0+dXRmOCgpOworICAgIGlmIChtZXNzYWdlICYmICFtZXNzYWdlLT5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgLy8gSXQgaXMgc2FmZSB0byBkbyB0aGlzIGJlY2F1c2UgdGhlIGNo
YXIqIGNvbnRlbnRzIG9mIHRoZSBDU3RyaW5nIGFyZSBjb3BpZWQgaW50byBhIG5ldyBXVEY6OlN0
cmluZyBiZWZvcmUgdGhlIENTdHJpbmcgaXMgZGVzdHJveWVkLgorICAgICAgICBkZXNjcmlwdGlv
bi5kZXNjcmlwdGlvbiA9IG1lc3NhZ2VDU3RyaW5nLmRhdGEoKTsKKyAgICB9CisKKyAgICBKU1Zh
bHVlIGVycm9yT2JqZWN0OworICAgIHN3aXRjaCAoZGVzY3JpcHRpb24udHlwZSkgeworICAgIGNh
c2UgRE9NQ29yZUV4Y2VwdGlvblR5cGU6CisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisg
ICAgY2FzZSBJREJEYXRhYmFzZUV4Y2VwdGlvblR5cGU6CisjZW5kaWYKKyAgICAgICAgZXJyb3JP
YmplY3QgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgRE9NQ29yZUV4Y2VwdGlvbjo6Y3JlYXRl
KGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmlsZUV4Y2VwdGlvblR5
cGU6CisgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIEZpbGVF
eGNlcHRpb246OmNyZWF0ZShkZXNjcmlwdGlvbikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFNRTEV4Y2VwdGlvblR5cGU6CisgICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIFNRTEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU1ZHRXhjZXB0aW9uVHlwZToKKyAgICAgICAgZXJyb3JPYmplY3QgPSB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24p
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYUGF0aEV4Y2VwdGlvblR5cGU6CisgICAgICAg
IGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFhQYXRoRXhjZXB0aW9uOjpj
cmVhdGUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEFT
U0VSVChlcnJvck9iamVjdCk7CisgICAgYWRkRXJyb3JJbmZvKGV4ZWMsIGFzT2JqZWN0KGVycm9y
T2JqZWN0KSwgdHJ1ZSk7CisgICAgcmV0dXJuIGVycm9yT2JqZWN0OworfQorCitKU1ZhbHVlIGNy
ZWF0ZURPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUgZWMsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICByZXR1cm4gY3JlYXRlRE9NRXhjZXB0aW9uKGV4ZWMs
IGVjLCAmbWVzc2FnZSk7Cit9CisKK0pTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0
ZSYgc3RhdGUsIEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKK3sKKyAgICByZXR1cm4gY3JlYXRlRE9N
RXhjZXB0aW9uKCZzdGF0ZSwgZXhjZXB0aW9uLmNvZGUoKSwgZXhjZXB0aW9uLnJlbGVhc2VNZXNz
YWdlKCkpOworfQorCit2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNl
cHRpb24pCit7CisgICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbihzdGF0ZSwg
V1RGTW92ZShleGNlcHRpb24pKSk7Cit9CisKK2Jvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgYXV0byYgdm0gPSBz
dGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
SlNPYmplY3QqIG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOworICAgIENhbGxEYXRhIGNh
bGxEYXRhOworICAgIENhbGxUeXBlIGNhbGxUeXBlOworICAgIEpTVmFsdWUgYXBwbHlNZXRob2Qg
PSBvYmplY3QtPmdldE1ldGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVy
dHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0ZXJhdG9yIHBy
b3BlcnR5IHNob3VsZCBiZSBjYWxsYWJsZSIpKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBmYWxzZSk7CisKKyAgICByZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5kZWZpbmVkKCk7Cit9
CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoRXhlY1N0
YXRlJiBzdGF0ZSwgRnJhbWUmIGZyYW1lLCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKEJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKCZzdGF0ZSwgJmZyYW1lLCBE
b05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBtZXNz
YWdlID0gZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJy
b3JNZXNzYWdlKGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEV4
ZWNTdGF0ZSYgc3RhdGUsIERPTVdpbmRvdyYgZ2xvYmFsT2JqZWN0LCBTdHJpbmcmIG1lc3NhZ2Up
Cit7CisgICAgaWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRv
dygmc3RhdGUsIGdsb2JhbE9iamVjdCwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgbWVzc2FnZSA9IGdsb2JhbE9iamVjdC5jcm9zc0RvbWFpbkFj
Y2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+cHJpbnRFcnJvck1lc3NhZ2Uo
bWVzc2FnZSk7Cit9CisKK1N0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQorewor
ICAgIEpTRE9NU3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LnN0cnVjdHVy
ZXMoTm9Mb2NraW5nTmVjZXNzYXJ5KTsKKyAgICByZXR1cm4gc3RydWN0dXJlcy5nZXQoY2xhc3NJ
bmZvKS5nZXQoKTsKK30KKworU3RydWN0dXJlKiBjYWNoZURPTVN0cnVjdHVyZShKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8pCit7CisgICAgYXV0byBsb2NrZXIgPSBsb2NrRHVyaW5nTWFya2luZyhn
bG9iYWxPYmplY3Qudm0oKS5oZWFwLCBnbG9iYWxPYmplY3QuZ2NMb2NrKCkpOworICAgIEpTRE9N
U3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LnN0cnVjdHVyZXMobG9ja2Vy
KTsKKyAgICBBU1NFUlQoIXN0cnVjdHVyZXMuY29udGFpbnMoY2xhc3NJbmZvKSk7CisgICAgcmV0
dXJuIHN0cnVjdHVyZXMuc2V0KGNsYXNzSW5mbywgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4oZ2xv
YmFsT2JqZWN0LnZtKCksICZnbG9iYWxPYmplY3QsIHN0cnVjdHVyZSkpLml0ZXJhdG9yLT52YWx1
ZS5nZXQoKTsKK30KKworc3RhdGljIGNvbnN0IGludDMyX3Qga01heEludDMyID0gMHg3ZmZmZmZm
ZjsKK3N0YXRpYyBjb25zdCBpbnQzMl90IGtNaW5JbnQzMiA9IC1rTWF4SW50MzIgLSAxOworc3Rh
dGljIGNvbnN0IHVpbnQzMl90IGtNYXhVSW50MzIgPSAweGZmZmZmZmZmVTsKK3N0YXRpYyBjb25z
dCBpbnQ2NF90IGtKU01heEludGVnZXIgPSAweDIwMDAwMDAwMDAwMDAwTEwgLSAxOyAvLyAyXjUz
IC0gMSwgbGFyZ2VzdCBpbnRlZ2VyIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBpbiBFQ01BU2NyaXB0
LgorCitzdGF0aWMgU3RyaW5nIHJhbmdlRXJyb3JTdHJpbmcoZG91YmxlIHZhbHVlLCBkb3VibGUg
bWluLCBkb3VibGUgbWF4KQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJWYWx1ZSAiLCBTdHJp
bmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdCh2YWx1ZSksICIgaXMgb3V0c2lkZSB0aGUgcmFu
Z2UgWyIsIFN0cmluZzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1pbiksICIsICIsIFN0cmlu
Zzo6bnVtYmVyVG9TdHJpbmdFQ01BU2NyaXB0KG1heCksICJdIik7Cit9CisKK3N0YXRpYyBkb3Vi
bGUgZW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIGRvdWJsZSB4LCBkb3VibGUgbWluaW11
bSwgZG91YmxlIG1heGltdW0pCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoc3RkOjppc25hbih4
KSB8fCBzdGQ6OmlzaW5mKHgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2Nv
cGUsIHJhbmdlRXJyb3JTdHJpbmcoeCwgbWluaW11bSwgbWF4aW11bSkpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgeCA9IHRydW5jKHgpOworICAgIGlmICh4IDwgbWluaW11bSB8fCB4
ID4gbWF4aW11bSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5n
ZUVycm9yU3RyaW5nKHgsIG1pbmltdW0sIG1heGltdW0pKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgIHJldHVybiB4OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0cnVjdCBJ
bnRUeXBlTGltaXRzIHsKK307CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgSW50VHlwZUxpbWl0czxp
bnQ4X3Q+IHsKKyAgICBzdGF0aWMgY29uc3QgaW50OF90IG1pblZhbHVlID0gLTEyODsKKyAgICBz
dGF0aWMgY29uc3QgaW50OF90IG1heFZhbHVlID0gMTI3OworICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBudW1iZXJPZlZhbHVlcyA9IDI1NjsgLy8gMl44Cit9OworCit0ZW1wbGF0ZSA8Pgorc3Ry
dWN0IEludFR5cGVMaW1pdHM8dWludDhfdD4geworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IG1h
eFZhbHVlID0gMjU1OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9
IDI1NjsgLy8gMl44Cit9OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IEludFR5cGVMaW1pdHM8aW50
MTZfdD4geworICAgIHN0YXRpYyBjb25zdCBzaG9ydCBtaW5WYWx1ZSA9IC0zMjc2ODsKKyAgICBz
dGF0aWMgY29uc3Qgc2hvcnQgbWF4VmFsdWUgPSAzMjc2NzsKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSA2NTUzNjsgLy8gMl4xNgorfTsKKwordGVtcGxhdGUgPD4K
K3N0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQxNl90PiB7CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIHNob3J0IG1heFZhbHVlID0gNjU1MzU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51
bWJlck9mVmFsdWVzID0gNjU1MzY7IC8vIDJeMTYKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
Pgorc3RhdGljIGlubGluZSBUIHRvU21hbGxlckludChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVl
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKK3sK
KyAgICBWTSYgdm0gPSBzdGF0ZS52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKKworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19zaWduZWQ8VD46OnZhbHVl
ICYmIHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Ig
c2lnbmVkIGludGVncmFsIHR5cGVzIik7CisKKyAgICB0eXBlZGVmIEludFR5cGVMaW1pdHM8VD4g
TGltaXRzVHJhaXQ7CisgICAgLy8gRmFzdCBwYXRoIGlmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEg
MzItYml0IHNpZ25lZCBpbnRlZ2VyIGluIHRoZSByaWdodCByYW5nZS4KKyAgICBpZiAodmFsdWUu
aXNJbnQzMigpKSB7CisgICAgICAgIGludDMyX3QgZCA9IHZhbHVlLmFzSW50MzIoKTsKKyAgICAg
ICAgaWYgKGQgPj0gTGltaXRzVHJhaXQ6Om1pblZhbHVlICYmIGQgPD0gTGltaXRzVHJhaXQ6Om1h
eFZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQpOworICAgICAgICBz
d2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgorICAgICAgICAgICAg
dGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wOgorICAgICAg
ICAgICAgcmV0dXJuIGQgPCBMaW1pdHNUcmFpdDo6bWluVmFsdWUgPyBMaW1pdHNUcmFpdDo6bWlu
VmFsdWUgOiBMaW1pdHNUcmFpdDo6bWF4VmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgZCAlPSBM
aW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXM7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
PihkID4gTGltaXRzVHJhaXQ6Om1heFZhbHVlID8gZCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZh
bHVlcyA6IGQpOworICAgIH0KKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKworICAgIHN3aXRjaCAoY29u
ZmlndXJhdGlvbikgeworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWw6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1
cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUs
IHgsIExpbWl0c1RyYWl0OjptaW5WYWx1ZSwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsKKyAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgIHJldHVy
biBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7CisgICAgfQorCisgICAgaWYgKHN0
ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICB4ID0geCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsKKyAgICB4
ID0gZm1vZCh4LCBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMpOworCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KHggPiBMaW1pdHNUcmFpdDo6bWF4VmFsdWUgPyB4IC0gTGltaXRzVHJhaXQ6
Om51bWJlck9mVmFsdWVzIDogeCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGlj
IGlubGluZSBUIHRvU21hbGxlclVJbnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwg
SW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCit7CisgICAgVk0m
IHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdW5zaWduZWQ8VD46OnZhbHVlICYmIHN0
ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlLCAiU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdW5zaWdu
ZWQgaW50ZWdyYWwgdHlwZXMiKTsKKworICAgIHR5cGVkZWYgSW50VHlwZUxpbWl0czxUPiBMaW1p
dHNUcmFpdDsKKyAgICAvLyBGYXN0IHBhdGggaWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYSAzMi1i
aXQgdW5zaWduZWQgaW50ZWdlciBpbiB0aGUgcmlnaHQgcmFuZ2UuCisgICAgaWYgKHZhbHVlLmlz
VUludDMyKCkpIHsKKyAgICAgICAgdWludDMyX3QgZCA9IHZhbHVlLmFzVUludDMyKCk7CisgICAg
ICAgIGlmIChkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPihkKTsKKyAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7CisgICAgICAgIGNhc2UgSW50ZWdlckNvbnZl
cnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2U6CisgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcigmc3RhdGUsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNl
IEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAgICAgICByZXR1
cm4gTGltaXRzVHJhaXQ6Om1heFZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAgZG91Ymxl
IHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2Nv
cGUsIDApOworCisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7CisgICAgY2FzZSBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbDoKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZToKKyAgICAgICAg
cmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwgTGltaXRzVHJhaXQ6Om1heFZhbHVlKTsK
KyAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXA6CisgICAgICAg
IHJldHVybiBzdGQ6OmlzbmFuKHgpID8gMCA6IGNsYW1wVG88VD4oeCk7CisgICAgfQorCisgICAg
aWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSB8fCAheCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICB4ID0geCA8IDAgPyAtZmxvb3IoZmFicyh4KSkgOiBmbG9vcihmYWJzKHgpKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZm1vZCh4LCBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZW
YWx1ZXMpKTsKK30KKworaW50OF90IHRvSW50OEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+
KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2UpOworfQorCit1aW50OF90IHRvVUludDhFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4X3Q+
KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpFbmZvcmNlUmFu
Z2UpOworfQorCitpbnQ4X3QgdG9JbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFs
dWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQorCit1aW50OF90
IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29u
dmVyc2lvbkNvbmZpZ3VyYXRpb246OkNsYW1wKTsKK30KKworLy8gaHR0cDovL3d3dy53My5vcmcv
VFIvV2ViSURMLyNlcy1ieXRlCitpbnQ4X3QgdG9JbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQ4X3Q+KHN0YXRlLCB2YWx1
ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWwpOworfQorCisvLyBodHRw
Oi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLW9jdGV0Cit1aW50OF90IHRvVUludDgoRXhlY1N0
YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1
aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9y
bWFsKTsKK30KKworaW50MTZfdCB0b0ludDE2RW5mb3JjZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUs
IEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0
ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsK
K30KKwordWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdG9TbWFsbGVyVUludDx1aW50MTZfdD4oc3RhdGUs
IHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Cit9
CisKK2ludDE2X3QgdG9JbnQxNkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgcmV0dXJuIHRvU21hbGxlckludDxpbnQxNl90PihzdGF0ZSwgdmFsdWUsIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOworfQorCit1aW50MTZfdCB0b1VJbnQx
NkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRv
U21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpDbGFtcCk7Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8j
ZXMtc2hvcnQKK2ludDE2X3QgdG9JbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRl
Z2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Cit9CisKKy8vIGh0dHA6Ly93d3cu
dzMub3JnL1RSL1dlYklETC8jZXMtdW5zaWduZWQtc2hvcnQKK3VpbnQxNl90IHRvVUludDE2KEV4
ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHRvU21hbGxlclVJ
bnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9u
OjpOb3JtYWwpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmcK
K2ludDMyX3QgdG9JbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAg
cmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKKyAgICByZXR1cm4g
ZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBrTWluSW50MzIsIGtNYXhJbnQzMik7Cit9CisKK2ludDMy
X3QgdG9JbnQzMkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
aWYgKHZhbHVlLmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzSW50MzIoKTsKKwor
ICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKyAgICByZXR1cm4gc3RkOjpp
c25hbih4KSA/IDAgOiBjbGFtcFRvPGludDMyX3Q+KHgpOworfQorCit1aW50MzJfdCB0b1VJbnQz
MkNsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
LmlzVUludDMyKCkpCisgICAgICAgIHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOworCisgICAgZG91
YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworICAgIHJldHVybiBzdGQ6OmlzbmFuKHgp
ID8gMCA6IGNsYW1wVG88dWludDMyX3Q+KHgpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9U
Ui9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmcKK3VpbnQzMl90IHRvVUludDMyRW5mb3JjZVJhbmdl
KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBp
ZiAodmFsdWUuaXNVSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLmFzVUludDMyKCk7CisK
KyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwg
a01heFVJbnQzMik7Cit9CisKK2ludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUudm0oKTsK
KyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBkb3VibGUg
eCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgLWtKU01heEludGVnZXIs
IGtKU01heEludGVnZXIpOworfQorCit1aW50NjRfdCB0b1VJbnQ2NEVuZm9yY2VSYW5nZShFeGVj
U3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgVk0mIHZtID0gc3RhdGUu
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBk
b3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgMCk7CisgICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwgMCwga0pTTWF4
SW50ZWdlcik7Cit9CisKK2ludDY0X3QgdG9JbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0
ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8aW50NjRfdD4o
c3RkOjptaW48ZG91YmxlPihzdGQ6Om1heDxkb3VibGU+KHgsIC1rSlNNYXhJbnRlZ2VyKSwga0pT
TWF4SW50ZWdlcikpOworfQorCit1aW50NjRfdCB0b1VJbnQ2NENsYW1wKEV4ZWNTdGF0ZSYgc3Rh
dGUsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7CisgICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91YmxlPih4LCAwKSwga0pTTWF4SW50
ZWdlcikpOworfQorCisvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLWxvbmctbG9u
ZworaW50NjRfdCB0b0ludDY0KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOworCisgICAgLy8gTWFwIE5hTnMg
YW5kICsvLUluZmluaXR5IHRvIDA7IGNvbnZlcnQgZmluaXRlIHZhbHVlcyBtb2R1bG8gMl42NC4K
KyAgICB1bnNpZ25lZCBsb25nIGxvbmcgbjsKKyAgICBkb3VibGVUb0ludGVnZXIoeCwgbik7Cisg
ICAgcmV0dXJuIG47Cit9CisKKy8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtdW5z
aWduZWQtbG9uZy1sb25nCit1aW50NjRfdCB0b1VJbnQ2NChFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQoreworICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsKKwor
ICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0IGZpbml0ZSB2YWx1
ZXMgbW9kdWxvIDJeNjQuCisgICAgdW5zaWduZWQgbG9uZyBsb25nIG47CisgICAgZG91YmxlVG9J
bnRlZ2VyKHgsIG4pOworICAgIHJldHVybiBuOworfQorCitjbGFzcyBHZXRDYWxsZXJHbG9iYWxP
YmplY3RGdW5jdG9yIHsKK3B1YmxpYzoKKyAgICBHZXRDYWxsZXJHbG9iYWxPYmplY3RGdW5jdG9y
KCkgPSBkZWZhdWx0OworCisgICAgU3RhY2tWaXNpdG9yOjpTdGF0dXMgb3BlcmF0b3IoKShTdGFj
a1Zpc2l0b3ImIHZpc2l0b3IpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1faGFzU2tpcHBl
ZEZpcnN0RnJhbWUpIHsKKyAgICAgICAgICAgIG1faGFzU2tpcHBlZEZpcnN0RnJhbWUgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIFN0YWNrVmlzaXRvcjo6Q29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoYXV0byogY29kZUJsb2NrID0gdmlzaXRvci0+Y29kZUJsb2NrKCkpCisg
ICAgICAgICAgICBtX2dsb2JhbE9iamVjdCA9IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHZpc2l0b3ItPmNhbGxlZSgpKTsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYWxsZWUgaXMgbm90IGFuIG9iamVjdCBpZiB0aGUgY2FsbGVy
IGlzIFdlYiBBc3NlbWJseS4KKyAgICAgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyBo
ZXJlLiBXZSBjYW4gcHJvYmFibHkgZ2V0IHRoZSBnbG9iYWwgb2JqZWN0CisgICAgICAgICAgICAv
LyBmcm9tIHRoZSB0b3AtbW9zdCBXYXNtIEluc3RhbmNlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzIxCisgICAgICAgICAgICBpZiAodmlzaXRvci0+Y2FsbGVl
KCktPmlzT2JqZWN0KCkpCisgICAgICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBqc0Nhc3Q8
SlNPYmplY3QqPih2aXNpdG9yLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBTdGFja1Zpc2l0b3I6OkRvbmU7CisgICAgfQorCisgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0OyB9
CisKK3ByaXZhdGU6CisgICAgbXV0YWJsZSBib29sIG1faGFzU2tpcHBlZEZpcnN0RnJhbWUgeyBm
YWxzZSB9OworICAgIG11dGFibGUgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0IHsgbnVs
bHB0ciB9OworfTsKKworRE9NV2luZG93JiBjYWxsZXJET01XaW5kb3coRXhlY1N0YXRlKiBleGVj
KQoreworICAgIEdldENhbGxlckdsb2JhbE9iamVjdEZ1bmN0b3IgaXRlcjsKKyAgICBleGVjLT5p
dGVyYXRlKGl0ZXIpOworICAgIHJldHVybiBpdGVyLmdsb2JhbE9iamVjdCgpID8gYXNKU0RPTVdp
bmRvdyhpdGVyLmdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpIDogZmlyc3RET01XaW5kb3coZXhl
Yyk7Cit9CisKK0RPTVdpbmRvdyYgYWN0aXZlRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gYXNKU0RPTVdpbmRvdyhleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT53
cmFwcGVkKCk7Cit9CisKK0RPTVdpbmRvdyYgZmlyc3RET01XaW5kb3coRXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBhc0pTRE9NV2luZG93KGV4ZWMtPnZtRW50cnlHbG9iYWxPYmplY3Qo
KSktPndyYXBwZWQoKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGNhbkFjY2Vzc0RvY3VtZW50
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgRG9jdW1lbnQqIHRhcmdldERvY3VtZW50LCBTZWN1cml0
eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCit7CisgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
aWYgKCF0YXJnZXREb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRE9NV2lu
ZG93JiBhY3RpdmUgPSBhY3RpdmVET01XaW5kb3coc3RhdGUpOworCisgICAgaWYgKGFjdGl2ZS5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLmNhbkFjY2Vzcyh0YXJnZXREb2N1bWVudC0+c2Vj
dXJpdHlPcmlnaW4oKSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgc3dpdGNoIChyZXBv
cnRpbmdPcHRpb24pIHsKKyAgICBjYXNlIFRocm93U2VjdXJpdHlFcnJvcjoKKyAgICAgICAgdGhy
b3dTZWN1cml0eUVycm9yKCpzdGF0ZSwgc2NvcGUsIHRhcmdldERvY3VtZW50LT5kb21XaW5kb3co
KS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgTG9nU2VjdXJpdHlFcnJvcjoKKyAgICAgICAgcHJpbnRFcnJvck1lc3NhZ2VG
b3JGcmFtZSh0YXJnZXREb2N1bWVudC0+ZnJhbWUoKSwgdGFyZ2V0RG9jdW1lbnQtPmRvbVdpbmRv
dygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmUpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3I6CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBET01XaW5k
b3cmIHRhcmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0aW9uKQorewor
ICAgIHJldHVybiBjYW5BY2Nlc3NEb2N1bWVudChzdGF0ZSwgdGFyZ2V0LmRvY3VtZW50KCksIHJl
cG9ydGluZ09wdGlvbik7Cit9CisKK2Jvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0Fj
Y2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBGcmFtZSogdGFyZ2V0LCBTZWN1cml0
eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCit7CisgICAgcmV0dXJuIHRhcmdldCAm
JiBjYW5BY2Nlc3NEb2N1bWVudChzdGF0ZSwgdGFyZ2V0LT5kb2N1bWVudCgpLCByZXBvcnRpbmdP
cHRpb24pOworfQorCitib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb05v
ZGUoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBOb2RlKiB0YXJnZXQpCit7CisgICAgcmV0dXJuICF0
YXJnZXQgfHwgY2FuQWNjZXNzRG9jdW1lbnQoJnN0YXRlLCAmdGFyZ2V0LT5kb2N1bWVudCgpLCBM
b2dTZWN1cml0eUVycm9yKTsKK30KKyAgICAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSB0aHJvd1R5
cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9y
KCZzdGF0ZSwgc2NvcGUsIGVycm9yTWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZEFy
Z3VtZW50TXVzdEJlKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIHVuc2lnbmVkIGFyZ3VtZW50SW5k
ZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
QXJndW1lbnQgIik7CisgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoYXJndW1lbnRJbmRleCArIDEp
OworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiICgnIik7CisgICAgYnVpbGRlci5hcHBlbmQo
YXJndW1lbnROYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIicpIHRvICIpOworICAg
IGlmICghZnVuY3Rpb25OYW1lKSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgidGhl
ICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChpbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIgY29uc3RydWN0b3IiKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBidWlsZGVyLmFwcGVuZChpbnRlcmZhY2VOYW1lKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
Jy4nKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZnVuY3Rpb25OYW1lKTsKKyAgICB9CisgICAg
YnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgbXVzdCBiZSAiKTsKK30KKworSlNDOjpFbmNvZGVkSlNW
YWx1ZSByZXBvcnREZXByZWNhdGVkR2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQorewor
ICAgIGF1dG8mIGNvbnRleHQgPSAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4
aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGNvbnRl
eHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsIG1ha2VTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBhY2Nlc3MgcHJvcGVydHkgJyIs
IGF0dHJpYnV0ZU5hbWUsICInIG9uIGEgbm9uLSIsIGludGVyZmFjZU5hbWUsICIgb2JqZWN0LiIp
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorICAgIAor
dm9pZCByZXBvcnREZXByZWNhdGVkU2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBj
b25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQorewor
ICAgIGF1dG8mIGNvbnRleHQgPSAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUubGV4
aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGNvbnRl
eHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsIG1ha2VTdHJpbmcoIkRlcHJlY2F0ZWQgYXR0ZW1wdCB0byBzZXQgcHJvcGVydHkgJyIsIGF0
dHJpYnV0ZU5hbWUsICInIG9uIGEgbm9uLSIsIGludGVyZmFjZU5hbWUsICIgb2JqZWN0LiIpKTsK
K30KKwordm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
KTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24o
JnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUikpOworfQorCit2b2lkIHRocm93Tm90U3VwcG9ydGVk
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25z
dCBjaGFyKiBtZXNzYWdlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAg
IFN0cmluZyBtZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0
ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIE5PVF9TVVBQT1JURURfRVJSLCAm
bWVzc2FnZVN0cmluZykpOworfQorCit2b2lkIHRocm93SW52YWxpZFN0YXRlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBtZXNz
YWdlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIFN0cmluZyBtZXNz
YWdlU3RyaW5nKG1lc3NhZ2UpOworICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNy
ZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElOVkFMSURfU1RBVEVfRVJSLCAmbWVzc2FnZVN0cmlu
ZykpOworfQorCit2b2lkIHRocm93U2VjdXJpdHlFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBB
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNj
b3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBTRUNVUklUWV9FUlIsIG1lc3NhZ2UpKTsK
K30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKEpT
Qzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJn
dW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlv
bkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhw
ZWN0ZWRWYWx1ZXMpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGFwcGVuZEFy
Z3VtZW50TXVzdEJlKGJ1aWxkZXIsIGFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50TmFtZSwgZnVuY3Rp
b25JbnRlcmZhY2VOYW1lLCBmdW5jdGlvbk5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgib25lIG9mOiAiKTsKKyAgICBidWlsZGVyLmFwcGVuZChleHBlY3RlZFZhbHVlcyk7CisgICAg
cmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygp
KTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25F
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVuc2ln
bmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKKyAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVu
dEluZGV4LCBhcmd1bWVudE5hbWUsIGludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7CisgICAg
YnVpbGRlci5hcHBlbmRMaXRlcmFsKCJhIGZ1bmN0aW9uIik7CisgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKK30KKworSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3Qg
Y2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQoreworICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVy
LCBhcmd1bWVudEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgZnVu
Y3Rpb25OYW1lKTsKKyAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImFuIGluc3RhbmNlIG9mICIp
OworICAgIGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVHlwZSk7CisgICAgcmV0dXJuIHRocm93Vk1U
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKK30KKwordm9pZCB0
aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUpCit7CisgICAgdGhyb3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBBU0NJ
SUxpdGVyYWwoIkludmFsaWQgQXJyYXkgZWxlbWVudCB0eXBlIikpOworfQorCit2b2lkIHRocm93
QXR0cmlidXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRl
TmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRUeXBlKQoreworICAgIHRocm93VHlwZUVycm9yKHN0
YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcuJywgYXR0cmli
dXRlTmFtZSwgIiBhdHRyaWJ1dGUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiAiLCBleHBlY3RlZFR5
cGUpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1JlcXVpcmVkTWVtYmVyVHlwZUVy
cm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3Qg
Y2hhciogbWVtYmVyTmFtZSwgY29uc3QgY2hhciogZGljdGlvbmFyeU5hbWUsIGNvbnN0IGNoYXIq
IGV4cGVjdGVkVHlwZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJNZW1iZXIgIik7CisgICAgYnVpbGRlci5hcHBlbmQoZGljdGlvbmFy
eU5hbWUpOworICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7CisgICAgYnVpbGRlci5hcHBlbmQobWVt
YmVyTmFtZSk7CisgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgaXMgcmVxdWlyZWQgYW5kIG11
c3QgYmUgYW4gaW5zdGFuY2Ugb2YgIik7CisgICAgYnVpbGRlci5hcHBlbmQoZXhwZWN0ZWRUeXBl
KTsKKyAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBidWlsZGVyLnRv
U3RyaW5nKCkpOworfQorCitKU0M6OkVuY29kZWRKU1ZhbHVlIHRocm93Q29uc3RydWN0b3JTY3Jp
cHRFeGVjdXRpb25Db250ZXh0VW5hdmFpbGFibGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUpCit7Cisg
ICAgcmV0dXJuIHRocm93Vk1FcnJvcigmc3RhdGUsIHNjb3BlLCBjcmVhdGVSZWZlcmVuY2VFcnJv
cigmc3RhdGUsIG1ha2VTdHJpbmcoaW50ZXJmYWNlTmFtZSwgIiBjb25zdHJ1Y3RvciBhc3NvY2lh
dGVkIGV4ZWN1dGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIikpKTsKK30KKwordm9pZCB0aHJv
d1NlcXVlbmNlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3Bl
JiBzY29wZSkKK3sKKyAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIEFTQ0lJTGl0ZXJh
bCgiVmFsdWUgaXMgbm90IGEgc2VxdWVuY2UiKSk7Cit9CisKK3ZvaWQgdGhyb3dOb25GaW5pdGVU
eXBlRXJyb3IoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKK3sKKyAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlRoZSBwcm92aWRl
ZCB2YWx1ZSBpcyBub24tZmluaXRlIikpOworfQorCitTdHJpbmcgbWFrZUdldHRlclR5cGVFcnJv
ck1lc3NhZ2UoY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRl
TmFtZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiVGhlICIsIGludGVyZmFjZU5hbWUsICcu
JywgYXR0cmlidXRlTmFtZSwgIiBnZXR0ZXIgY2FuIG9ubHkgYmUgdXNlZCBvbiBpbnN0YW5jZXMg
b2YgIiwgaW50ZXJmYWNlTmFtZSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dHZXR0
ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3Bl
LCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQor
eworICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIG1ha2VHZXR0ZXJU
eXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGF0dHJpYnV0ZU5hbWUpKTsKK30KKworSlND
OjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcihKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUpCit7CisgICAgcmV0dXJuIGNyZWF0ZVJlamVjdGVkUHJvbWlzZVdpdGhUeXBl
RXJyb3Ioc3RhdGUsIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGF0
dHJpYnV0ZU5hbWUpKTsKK30KKworYm9vbCB0aHJvd1NldHRlclR5cGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFj
ZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCit7CisgICAgdGhyb3dUeXBlRXJyb3Io
c3RhdGUsIHNjb3BlLCBtYWtlU3RyaW5nKCJUaGUgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBhdHRy
aWJ1dGVOYW1lLCAiIHNldHRlciBjYW4gb25seSBiZSB1c2VkIG9uIGluc3RhbmNlcyBvZiAiLCBp
bnRlcmZhY2VOYW1lKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgbWFrZVRoaXNU
eXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiQ2FuIG9ubHkgY2FsbCAiLCBp
bnRlcmZhY2VOYW1lLCAnLicsIGZ1bmN0aW9uTmFtZSwgIiBvbiBpbnN0YW5jZXMgb2YgIiwgaW50
ZXJmYWNlTmFtZSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIHRocm93VGhpc1R5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGlu
dGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICByZXR1cm4gdGhy
b3dUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJm
YWNlTmFtZSwgZnVuY3Rpb25OYW1lKSk7Cit9CisKK0pTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0
UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKERlZmVycmVkUHJvbWlzZSYgcHJvbWlzZSwgY29uc3Qg
Y2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKK3sKKyAgICBwcm9t
aXNlLnJlamVjdChUeXBlRXJyb3IsIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VO
YW1lLCBtZXRob2ROYW1lKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKK30KKworSlNDOjpFbmNvZGVkSlNWYWx1ZSByZWplY3RQcm9taXNlV2l0aFRoaXNUeXBl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBtZXRob2ROYW1lKQoreworICAgIHJldHVybiBjcmVhdGVSZWplY3RlZFByb21p
c2VXaXRoVHlwZUVycm9yKHN0YXRlLCBtYWtlVGhpc1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNl
TmFtZSwgbWV0aG9kTmFtZSkpOworfQorCit2b2lkIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJn
dW1lbnRzKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwg
SlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKK3sKKyAgICBKU0M6OkNhbGxEYXRhIGNhbGxEYXRh
OworICAgIEpTQzo6Q2FsbFR5cGUgY2FsbFR5cGUgPSBKU0M6OmdldENhbGxEYXRhKCZmdW5jdGlv
biwgY2FsbERhdGEpOworICAgIEFTU0VSVChjYWxsVHlwZSAhPSBDYWxsVHlwZTo6Tm9uZSk7CisK
KyAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3RhdGUuYXJndW1lbnRDb3VudCgpOyArK2kpCisgICAgICAgIGFyZ3Vt
ZW50cy5hcHBlbmQoc3RhdGUudW5jaGVja2VkQXJndW1lbnQoaSkpOworICAgIEpTQzo6Y2FsbCgm
c3RhdGUsICZmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCAmdGhpc09iamVjdCwgYXJndW1l
bnRzKTsKK30KKwordm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6dmlzaXRDaGls
ZHJlbihKU0M6OkpTQ2VsbCogY2VsbCwgSlNDOjpTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0
Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9pbml0aWFsaXplRnVuY3Rpb24pOworfQorCitz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjYWxsVGhyb3dUeXBlRXJyb3IoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIHNj
b3BlLCBBU0NJSUxpdGVyYWwoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIG9wZXJhdG9yIikp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworfQorCitDYWxsVHlwZSBE
T01Db25zdHJ1Y3Rvck9iamVjdDo6Z2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmIGNhbGxE
YXRhKQoreworICAgIGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNhbGxUaHJvd1R5cGVFcnJv
cjsKKyAgICByZXR1cm4gQ2FsbFR5cGU6Okhvc3Q7Cit9CisKK3ZvaWQgdGhyb3dET01TeW50YXhF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7Cisg
ICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRl
LCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgU1lOVEFYX0VSUikpOworfQorCit2
b2lkIHRocm93RGF0YUNsb25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKQoreworICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHRo
cm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIERB
VEFfQ0xPTkVfRVJSKSk7Cit9CisKK3ZvaWQgdGhyb3dJbmRleFNpemVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCit7CisgICAgQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSk7CisgICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRl
RE9NRXhjZXB0aW9uKCZzdGF0ZSwgSU5ERVhfU0laRV9FUlIpKTsKK30KKwordm9pZCB0aHJvd1R5
cGVNaXNtYXRjaEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBz
Y29wZSkKK3sKKyAgICBBU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAgICB0aHJvd0V4Y2Vw
dGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBUWVBFX01JU01B
VENIX0VSUikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV3JhcHBlckNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVdyYXBwZXJDYWNoZS5jcHAJKHJldmlzaW9uIDIxMTM1MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjAsMzc0ICsyMCwxNCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogCi0jaW5j
bHVkZSAiQ2FjaGVkU2NyaXB0LmgiCi0jaW5jbHVkZSAiQ29tbW9uVk0uaCIKLSNpbmNsdWRlICJE
T01Db25zdHJ1Y3RvcldpdGhEb2N1bWVudC5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
LSNpbmNsdWRlICJFeGNlcHRpb25Db2RlRGVzY3JpcHRpb24uaCIKLSNpbmNsdWRlICJFeGNlcHRp
b25IZWFkZXJzLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uSW50ZXJmYWNlcy5oIgotI2luY2x1ZGUg
IkZyYW1lLmgiCi0jaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgotI2luY2x1ZGUgIklEQkRh
dGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCi0jaW5jbHVkZSAi
SlNET01Qcm9taXNlLmgiCi0jaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0b20uaCIKLSNpbmNsdWRl
ICJKU0V4Y2VwdGlvbkJhc2UuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1
ZGUgPGJ5dGVjb2RlL0NvZGVCbG9jay5oPgotI2luY2x1ZGUgPGluc3BlY3Rvci9TY3JpcHRDYWxs
U3RhY2suaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJv
ci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3JIYW5kbGluZ1Njb3BlLmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9FcnJvckluc3RhbmNlLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb24uaD4K
LSNpbmNsdWRlIDxydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuaD4KLSNpbmNsdWRlIDxydW50aW1l
L0pTRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNDSW5saW5l
cy5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwotdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNU
UlVDVElCTEUoRE9NQ29uc3RydWN0b3JPYmplY3QpOwotU1RBVElDX0FTU0VSVF9JU19UUklWSUFM
TFlfREVTVFJVQ1RJQkxFKERPTUNvbnN0cnVjdG9yV2l0aERvY3VtZW50KTsKLQotdm9pZCBhZGRJ
bXB1cmVQcm9wZXJ0eShjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkKLXsKLSAgICBj
b21tb25WTSgpLmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSk7Ci19Ci0KLUpTVmFsdWUg
anNPd25lZFN0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFN0cmluZyYgcykKLXsK
LSAgICBpZiAocy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIHJldHVy
biBqc093bmVkU3RyaW5nKGV4ZWMsIHMpOwotfQotCi1KU1ZhbHVlIGpzU3RyaW5nT3JVbmRlZmlu
ZWQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTdHJpbmcmIHMpCi17Ci0gICAgaWYgKHMuaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVybiBqc1N0cmluZ1dp
dGhDYWNoZShleGVjLCBzKTsKLX0KLQotSlNWYWx1ZSBqc1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IFVSTCYgdXJsKQotewotICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCB1
cmwuc3RyaW5nKCkpOwotfQotCi1KU1ZhbHVlIGpzU3RyaW5nT3JVbmRlZmluZWQoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBVUkwmIHVybCkKLXsKLSAgICBpZiAodXJsLmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhl
YywgdXJsLnN0cmluZygpKTsKLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9CeXRl
U3RyaW5nKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIFN0cmluZyYm
IHN0cmluZykKLXsKLSAgICBpZiAoIXN0cmluZy5jb250YWluc09ubHlMYXRpbjEoKSkgewotICAg
ICAgICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIHsgfTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gc3RyaW5nOwotfQotCi1TdHJpbmcgaWRlbnRpZmllclRvQnl0
ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQot
ewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgU3RyaW5nIHN0cmluZyA9IGlkZW50aWZpZXIuc3RyaW5nKCk7
Ci0gICAgcmV0dXJuIHN0cmluZ1RvQnl0ZVN0cmluZyhzdGF0ZSwgc2NvcGUsIFdURk1vdmUoc3Ry
aW5nKSk7Ci19Ci0KLVN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhFeGVjU3RhdGUmIHN0YXRlLCBK
U1ZhbHVlIHZhbHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgU3RyaW5nIHN0cmluZyA9IHZhbHVl
LnRvV1RGU3RyaW5nKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLQotICAgIHJldHVybiBzdHJpbmdUb0J5dGVTdHJpbmcoc3RhdGUsIHNjb3BlLCBXVEZNb3Zl
KHN0cmluZykpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgaGFzVW5wYWlyZWRTdXJyb2dhdGUo
U3RyaW5nVmlldyBzdHJpbmcpCi17Ci0gICAgLy8gRmFzdCBwYXRoIGZvciA4LWJpdCBzdHJpbmdz
OyB0aGV5IGNhbid0IGhhdmUgYW55IHN1cnJvZ2F0ZXMuCi0gICAgaWYgKHN0cmluZy5pczhCaXQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAoYXV0byBjb2RlUG9pbnQgOiBzdHJp
bmcuY29kZVBvaW50cygpKSB7Ci0gICAgICAgIGlmIChVX0lTX1NVUlJPR0FURShjb2RlUG9pbnQp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotc3RhdGljIGlubGluZSBTdHJpbmcgc3RyaW5nVG9VU1ZTdHJpbmcoU3RyaW5nJiYgc3RyaW5n
KQotewotICAgIC8vIEZhc3QgcGF0aCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJlIG5vIHVu
cGFpcmVkIHN1cnJvZ2F0ZXMuCi0gICAgaWYgKCFoYXNVbnBhaXJlZFN1cnJvZ2F0ZShzdHJpbmcp
KQotICAgICAgICByZXR1cm4gc3RyaW5nOwotCi0gICAgLy8gU2xvdyBwYXRoOiBodHRwOi8vaGV5
Y2FtLmdpdGh1Yi5pby93ZWJpZGwvI2Rmbi1vYnRhaW4tdW5pY29kZQotICAgIC8vIFJlcGxhY2Vz
IHVucGFpcmVkIHN1cnJvZ2F0ZXMgd2l0aCB0aGUgcmVwbGFjZW1lbnQgY2hhcmFjdGVyLgotICAg
IFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoc3RyaW5n
Lmxlbmd0aCgpKTsKLSAgICBTdHJpbmdWaWV3IHZpZXcgeyBzdHJpbmcgfTsKLSAgICBmb3IgKGF1
dG8gY29kZVBvaW50IDogdmlldy5jb2RlUG9pbnRzKCkpIHsKLSAgICAgICAgaWYgKFVfSVNfU1VS
Uk9HQVRFKGNvZGVQb2ludCkpCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHJlcGxhY2VtZW50
Q2hhcmFjdGVyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb2Rl
UG9pbnQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7Ci19Ci0KLVN0cmlu
ZyBpZGVudGlmaWVyVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnRpZmllcikKLXsKLSAgICBTdHJpbmcgc3RyaW5nID0gaWRlbnRpZmllci5zdHJpbmcoKTsKLSAg
ICByZXR1cm4gc3RyaW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotU3RyaW5n
IHZhbHVlVG9VU1ZTdHJpbmcoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAg
ICBWTSYgdm0gPSBzdGF0ZS52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKLQotICAgIFN0cmluZyBzdHJpbmcgPSB2YWx1ZS50b1dURlN0cmluZygmc3RhdGUp
OwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Ci0KLSAgICByZXR1cm4gc3Ry
aW5nVG9VU1ZTdHJpbmcoV1RGTW92ZShzdHJpbmcpKTsKLX0KLQotSlNWYWx1ZSBqc0RhdGUoRXhl
Y1N0YXRlKiBleGVjLCBkb3VibGUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIERhdGVJbnN0YW5jZTo6
Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZGF0ZVN0cnVj
dHVyZSgpLCB2YWx1ZSk7Ci19Ci0KLWRvdWJsZSB2YWx1ZVRvRGF0ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgIHJl
dHVybiB2YWx1ZS5hc051bWJlcigpOwotICAgIGlmICghdmFsdWUuaW5oZXJpdHMoZXhlYy0+dm0o
KSwgRGF0ZUluc3RhbmNlOjppbmZvKCkpKQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGF0ZUlu
c3RhbmNlKj4odmFsdWUudG9PYmplY3QoZXhlYykpLT5pbnRlcm5hbE51bWJlcigpOwotfQotCi12
b2lkIHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZXhjZXB0aW9uVmFs
dWUsIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0KQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2so
KSk7Ci0gICAgYXV0byogZXhjZXB0aW9uID0ganNEeW5hbWljRG93bmNhc3Q8SlNDOjpFeGNlcHRp
b24qPih2bSwgZXhjZXB0aW9uVmFsdWUpOwotICAgIGlmICghZXhjZXB0aW9uKSB7Ci0gICAgICAg
IGV4Y2VwdGlvbiA9IHZtLmxhc3RFeGNlcHRpb24oKTsKLSAgICAgICAgaWYgKCFleGNlcHRpb24p
Ci0gICAgICAgICAgICBleGNlcHRpb24gPSBKU0M6OkV4Y2VwdGlvbjo6Y3JlYXRlKGV4ZWMtPnZt
KCksIGV4Y2VwdGlvblZhbHVlLCBKU0M6OkV4Y2VwdGlvbjo6RG9Ob3RDYXB0dXJlU3RhY2spOwot
ICAgIH0KLQotICAgIHJlcG9ydEV4Y2VwdGlvbihleGVjLCBleGNlcHRpb24sIGNhY2hlZFNjcmlw
dCk7Ci19Ci0KLVN0cmluZyByZXRyaWV2ZUVycm9yTWVzc2FnZShFeGVjU3RhdGUmIHN0YXRlLCBW
TSYgdm0sIEpTVmFsdWUgZXhjZXB0aW9uLCBDYXRjaFNjb3BlJiBjYXRjaFNjb3BlKQotewotICAg
IGlmIChhdXRvKiBleGNlcHRpb25CYXNlID0gdG9FeGNlcHRpb25CYXNlKHZtLCBleGNlcHRpb24p
KQotICAgICAgICByZXR1cm4gZXhjZXB0aW9uQmFzZS0+dG9TdHJpbmcoKTsKLQotICAgIC8vIEZJ
WE1FOiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xMTUwODc+IFdlYiBJbnNwZWN0b3I6IFdlYkNvcmU6
OnJlcG9ydEV4Y2VwdGlvbiBzaG91bGQgbm90IGV2YWx1YXRlIEphdmFTY3JpcHQgaGFuZGxpbmcg
ZXhjZXB0aW9ucwotICAgIC8vIElmIHRoaXMgaXMgYSBjdXN0b20gZXhjZXB0aW9uIG9iamVjdCwg
Y2FsbCB0b1N0cmluZyBvbiBpdCB0byB0cnkgYW5kIGdldCBhIG5pY2Ugc3RyaW5nIHJlcHJlc2Vu
dGF0aW9uIGZvciB0aGUgZXhjZXB0aW9uLgotICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAg
aWYgKGF1dG8qIGVycm9yID0ganNEeW5hbWljRG93bmNhc3Q8RXJyb3JJbnN0YW5jZSo+KHZtLCBl
eGNlcHRpb24pKQotICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvci0+c2FuaXRpemVkVG9TdHJp
bmcoJnN0YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIGVycm9yTWVzc2FnZSA9IGV4Y2VwdGlvbi50
b1dURlN0cmluZygmc3RhdGUpOwotCi0gICAgLy8gV2UgbmVlZCB0byBjbGVhciBhbnkgbmV3IGV4
Y2VwdGlvbiB0aGF0IG1heSBiZSB0aHJvd24gaW4gdGhlIHRvU3RyaW5nKCkgY2FsbCBhYm92ZS4K
LSAgICAvLyByZXBvcnRFeGNlcHRpb24oKSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgbWFraW5nIG5l
dyBleGNlcHRpb25zLgotICAgIGNhdGNoU2NvcGUuY2xlYXJFeGNlcHRpb24oKTsKLSAgICB2bS5j
bGVhckxhc3RFeGNlcHRpb24oKTsKLSAgICByZXR1cm4gZXJyb3JNZXNzYWdlOwotfQotCi12b2lk
IHJlcG9ydEV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RXhjZXB0aW9uKiBleGNlcHRp
b24sIENhY2hlZFNjcmlwdCogY2FjaGVkU2NyaXB0LCBFeGNlcHRpb25EZXRhaWxzKiBleGNlcHRp
b25EZXRhaWxzKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotCi0gICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVu
dFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7Ci0gICAgaWYgKGlzVGVybWluYXRlZEV4ZWN1dGlv
bkV4Y2VwdGlvbih2bSwgZXhjZXB0aW9uKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXJyb3JI
YW5kbGluZ1Njb3BlIGVycm9yU2NvcGUoZXhlYy0+dm0oKSk7Ci0KLSAgICBSZWZQdHI8U2NyaXB0
Q2FsbFN0YWNrPiBjYWxsU3RhY2soY3JlYXRlU2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlvbihl
eGVjLCBleGNlcHRpb24sIFNjcmlwdENhbGxTdGFjazo6bWF4Q2FsbFN0YWNrU2l6ZVRvQ2FwdHVy
ZSkpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgdm0uY2xlYXJMYXN0RXhjZXB0
aW9uKCk7Ci0KLSAgICBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKLSAgICBpZiAo
SlNET01XaW5kb3cqIHdpbmRvdyA9IGpzRHluYW1pY0Rvd25jYXN0PEpTRE9NV2luZG93Kj4odm0s
IGdsb2JhbE9iamVjdCkpIHsKLSAgICAgICAgaWYgKCF3aW5kb3ctPndyYXBwZWQoKS5pc0N1cnJl
bnRseURpc3BsYXllZEluRnJhbWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpbnQgbGluZU51bWJlciA9IDA7Ci0gICAgaW50IGNvbHVtbk51bWJlciA9IDA7Ci0gICAgU3Ry
aW5nIGV4Y2VwdGlvblNvdXJjZVVSTDsKLSAgICBpZiAoY29uc3QgU2NyaXB0Q2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBjYWxsU3RhY2stPmZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKCkpIHsKLSAgICAg
ICAgbGluZU51bWJlciA9IGNhbGxGcmFtZS0+bGluZU51bWJlcigpOwotICAgICAgICBjb2x1bW5O
dW1iZXIgPSBjYWxsRnJhbWUtPmNvbHVtbk51bWJlcigpOwotICAgICAgICBleGNlcHRpb25Tb3Vy
Y2VVUkwgPSBjYWxsRnJhbWUtPnNvdXJjZVVSTCgpOwotICAgIH0KLQotICAgIFN0cmluZyBlcnJv
ck1lc3NhZ2UgPSByZXRyaWV2ZUVycm9yTWVzc2FnZSgqZXhlYywgdm0sIGV4Y2VwdGlvbi0+dmFs
dWUoKSwgc2NvcGUpOwotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQgPSBnbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5yZXBvcnRFeGNlcHRpb24oZXJyb3JNZXNzYWdlLCBsaW5l
TnVtYmVyLCBjb2x1bW5OdW1iZXIsIGV4Y2VwdGlvblNvdXJjZVVSTCwgZXhjZXB0aW9uLCBjYWxs
U3RhY2stPnNpemUoKSA/IGNhbGxTdGFjayA6IG51bGxwdHIsIGNhY2hlZFNjcmlwdCk7Ci0KLSAg
ICBpZiAoZXhjZXB0aW9uRGV0YWlscykgewotICAgICAgICBleGNlcHRpb25EZXRhaWxzLT5tZXNz
YWdlID0gZXJyb3JNZXNzYWdlOwotICAgICAgICBleGNlcHRpb25EZXRhaWxzLT5saW5lTnVtYmVy
ID0gbGluZU51bWJlcjsKLSAgICAgICAgZXhjZXB0aW9uRGV0YWlscy0+Y29sdW1uTnVtYmVyID0g
Y29sdW1uTnVtYmVyOwotICAgICAgICBleGNlcHRpb25EZXRhaWxzLT5zb3VyY2VVUkwgPSBleGNl
cHRpb25Tb3VyY2VVUkw7Ci0gICAgfQotfQotCi12b2lkIHJlcG9ydEN1cnJlbnRFeGNlcHRpb24o
RXhlY1N0YXRlKiBleGVjKQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwotICAgIGF1dG8qIGV4Y2VwdGlvbiA9IHNj
b3BlLmV4Y2VwdGlvbigpOwotICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgcmVwb3J0
RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlIGNyZWF0ZURP
TUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUgZWMsIGNvbnN0IFN0cmlu
ZyogbWVzc2FnZSA9IG51bGxwdHIpCi17Ci0gICAgaWYgKCFlYyB8fCBlYyA9PSBFeGlzdGluZ0V4
Y2VwdGlvbkVycm9yKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgIC8vIEZJ
WE1FOiBIYW5kbGUgb3RoZXIgV2ViSURMIGV4Y2VwdGlvbiB0eXBlcy4KLSAgICBpZiAoZWMgPT0g
VHlwZUVycm9yKSB7Ci0gICAgICAgIGlmICghbWVzc2FnZSB8fCBtZXNzYWdlLT5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1
cm4gY3JlYXRlVHlwZUVycm9yKGV4ZWMsICptZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBpZiAoZWMg
PT0gUmFuZ2VFcnJvcikgewotICAgICAgICBpZiAoIW1lc3NhZ2UgfHwgbWVzc2FnZS0+aXNFbXB0
eSgpKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRl
cmFsKCJCYWQgdmFsdWUiKSk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVSYW5nZUVycm9yKGV4ZWMs
ICptZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBpZiAoZWMgPT0gU3RhY2tPdmVyZmxvd0Vycm9yKQot
ICAgICAgICByZXR1cm4gY3JlYXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwotCi0gICAgLy8g
RklYTUU6IEFsbCBjYWxsZXJzIHRvIGNyZWF0ZURPTUV4Y2VwdGlvbiBuZWVkIHRvIHBhc3MgaW4g
dGhlIGNvcnJlY3QgZ2xvYmFsIG9iamVjdC4KLSAgICAvLyBGb3Igbm93LCB3ZSdyZSBnb2luZyB0
byBhc3N1bWUgdGhlIGxleGljYWxHbG9iYWxPYmplY3QuIFdoaWNoIGlzIHdyb25nIGluIGNhc2Vz
IGxpa2UgdGhpczoKLSAgICAvLyBmcmFtZXNbMF0uZG9jdW1lbnQuY3JlYXRlRWxlbWVudChudWxs
LCBudWxsKTsgLy8gdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGljaCBzaG91bGQgaGF2ZSB0aGUgc3Vi
ZnJhbWUncyBwcm90b3R5cGVzLgotICAgIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKGV4ZWMpOwotCi0gICAgRXhjZXB0
aW9uQ29kZURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKGVjKTsKLQotICAgIENTdHJpbmcgbWVzc2Fn
ZUNTdHJpbmc7Ci0gICAgaWYgKG1lc3NhZ2UpCi0gICAgICAgIG1lc3NhZ2VDU3RyaW5nID0gbWVz
c2FnZS0+dXRmOCgpOwotICAgIGlmIChtZXNzYWdlICYmICFtZXNzYWdlLT5pc0VtcHR5KCkpIHsK
LSAgICAgICAgLy8gSXQgaXMgc2FmZSB0byBkbyB0aGlzIGJlY2F1c2UgdGhlIGNoYXIqIGNvbnRl
bnRzIG9mIHRoZSBDU3RyaW5nIGFyZSBjb3BpZWQgaW50byBhIG5ldyBXVEY6OlN0cmluZyBiZWZv
cmUgdGhlIENTdHJpbmcgaXMgZGVzdHJveWVkLgotICAgICAgICBkZXNjcmlwdGlvbi5kZXNjcmlw
dGlvbiA9IG1lc3NhZ2VDU3RyaW5nLmRhdGEoKTsKLSAgICB9Ci0KLSAgICBKU1ZhbHVlIGVycm9y
T2JqZWN0OwotICAgIHN3aXRjaCAoZGVzY3JpcHRpb24udHlwZSkgewotICAgIGNhc2UgRE9NQ29y
ZUV4Y2VwdGlvblR5cGU6Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgY2FzZSBJ
REJEYXRhYmFzZUV4Y2VwdGlvblR5cGU6Ci0jZW5kaWYKLSAgICAgICAgZXJyb3JPYmplY3QgPSB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgRE9NQ29yZUV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0
aW9uKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsZUV4Y2VwdGlvblR5cGU6Ci0gICAg
ICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIEZpbGVFeGNlcHRpb246
OmNyZWF0ZShkZXNjcmlwdGlvbikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNRTEV4Y2Vw
dGlvblR5cGU6Ci0gICAgICAgIGVycm9yT2JqZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IFNRTEV4Y2VwdGlvbjo6Y3JlYXRlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgU1ZHRXhjZXB0aW9uVHlwZToKLSAgICAgICAgZXJyb3JPYmplY3QgPSB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgU1ZHRXhjZXB0aW9uOjpjcmVhdGUoZGVzY3JpcHRpb24pKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBYUGF0aEV4Y2VwdGlvblR5cGU6Ci0gICAgICAgIGVycm9yT2Jq
ZWN0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFhQYXRoRXhjZXB0aW9uOjpjcmVhdGUoZGVz
Y3JpcHRpb24pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChlcnJv
ck9iamVjdCk7Ci0gICAgYWRkRXJyb3JJbmZvKGV4ZWMsIGFzT2JqZWN0KGVycm9yT2JqZWN0KSwg
dHJ1ZSk7Ci0gICAgcmV0dXJuIGVycm9yT2JqZWN0OwotfQotCi1KU1ZhbHVlIGNyZWF0ZURPTUV4
Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4Y2VwdGlvbkNvZGUgZWMsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKLXsKLSAgICByZXR1cm4gY3JlYXRlRE9NRXhjZXB0aW9uKGV4ZWMsIGVjLCAmbWVz
c2FnZSk7Ci19Ci0KLUpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSYgc3RhdGUs
IEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKLXsKLSAgICByZXR1cm4gY3JlYXRlRE9NRXhjZXB0aW9u
KCZzdGF0ZSwgZXhjZXB0aW9uLmNvZGUoKSwgZXhjZXB0aW9uLnJlbGVhc2VNZXNzYWdlKCkpOwot
fQotCi12b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiB0aHJvd1Njb3BlLCBFeGNlcHRpb24mJiBleGNlcHRpb24pCi17
Ci0gICAgQVNTRVJUKCF0aHJvd1Njb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4Y2VwdGlv
bigmc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbihzdGF0ZSwgV1RGTW92ZShl
eGNlcHRpb24pKSk7Ci19Ci0KLWJvb2wgaGFzSXRlcmF0b3JNZXRob2QoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgYXV0byYgdm0gPSBzdGF0ZS52bSgp
OwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNPYmplY3Qq
IG9iamVjdCA9IEpTQzo6YXNPYmplY3QodmFsdWUpOwotICAgIENhbGxEYXRhIGNhbGxEYXRhOwot
ICAgIENhbGxUeXBlIGNhbGxUeXBlOwotICAgIEpTVmFsdWUgYXBwbHlNZXRob2QgPSBvYmplY3Qt
PmdldE1ldGhvZCgmc3RhdGUsIGNhbGxEYXRhLCBjYWxsVHlwZSwgdm0ucHJvcGVydHlOYW1lcy0+
aXRlcmF0b3JTeW1ib2wsIEFTQ0lJTGl0ZXJhbCgiU3ltYm9sLml0ZXJhdG9yIHByb3BlcnR5IHNo
b3VsZCBiZSBjYWxsYWJsZSIpKTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBmYWxz
ZSk7Ci0KLSAgICByZXR1cm4gIWFwcGx5TWV0aG9kLmlzVW5kZWZpbmVkKCk7Ci19Ci0KLWJvb2wg
QmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoRXhlY1N0YXRlJiBzdGF0
ZSwgRnJhbWUmIGZyYW1lLCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKEJpbmRpbmdTZWN1
cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKCZzdGF0ZSwgJmZyYW1lLCBEb05vdFJlcG9y
dFNlY3VyaXR5RXJyb3IpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBtZXNzYWdlID0gZnJh
bWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNzYWdl
KGFjdGl2ZURPTVdpbmRvdygmc3RhdGUpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
QmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEV4ZWNTdGF0ZSYg
c3RhdGUsIERPTVdpbmRvdyYgZ2xvYmFsT2JqZWN0LCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAg
aWYgKEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmc3RhdGUs
IGdsb2JhbE9iamVjdCwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgbWVzc2FnZSA9IGdsb2JhbE9iamVjdC5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9y
TWVzc2FnZShhY3RpdmVET01XaW5kb3coJnN0YXRlKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGZy
YW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKS0+cHJpbnRFcnJvck1lc3NhZ2UobWVzc2FnZSk7
Ci19Ci0KIFN0cnVjdHVyZSogZ2V0Q2FjaGVkRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0
JiBnbG9iYWxPYmplY3QsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQogewogICAgIEpTRE9N
U3RydWN0dXJlTWFwJiBzdHJ1Y3R1cmVzID0gZ2xvYmFsT2JqZWN0LnN0cnVjdHVyZXMoTm9Mb2Nr
aW5nTmVjZXNzYXJ5KTsKQEAgLTQwMiw2MzMgKzQyLDQgQEAgU3RydWN0dXJlKiBjYWNoZURPTVN0
cnVjdHVyZShKU0RPTUdsb2JhbAogICAgIHJldHVybiBzdHJ1Y3R1cmVzLnNldChjbGFzc0luZm8s
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KGdsb2JhbE9iamVjdC52bSgpLCAmZ2xvYmFsT2JqZWN0
LCBzdHJ1Y3R1cmUpKS5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiB9CiAKLXN0YXRpYyBjb25zdCBp
bnQzMl90IGtNYXhJbnQzMiA9IDB4N2ZmZmZmZmY7Ci1zdGF0aWMgY29uc3QgaW50MzJfdCBrTWlu
SW50MzIgPSAta01heEludDMyIC0gMTsKLXN0YXRpYyBjb25zdCB1aW50MzJfdCBrTWF4VUludDMy
ID0gMHhmZmZmZmZmZlU7Ci1zdGF0aWMgY29uc3QgaW50NjRfdCBrSlNNYXhJbnRlZ2VyID0gMHgy
MDAwMDAwMDAwMDAwMExMIC0gMTsgLy8gMl41MyAtIDEsIGxhcmdlc3QgaW50ZWdlciBleGFjdGx5
IHJlcHJlc2VudGFibGUgaW4gRUNNQVNjcmlwdC4KLQotc3RhdGljIFN0cmluZyByYW5nZUVycm9y
U3RyaW5nKGRvdWJsZSB2YWx1ZSwgZG91YmxlIG1pbiwgZG91YmxlIG1heCkKLXsKLSAgICByZXR1
cm4gbWFrZVN0cmluZygiVmFsdWUgIiwgU3RyaW5nOjpudW1iZXJUb1N0cmluZ0VDTUFTY3JpcHQo
dmFsdWUpLCAiIGlzIG91dHNpZGUgdGhlIHJhbmdlIFsiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5n
RUNNQVNjcmlwdChtaW4pLCAiLCAiLCBTdHJpbmc6Om51bWJlclRvU3RyaW5nRUNNQVNjcmlwdCht
YXgpLCAiXSIpOwotfQotCi1zdGF0aWMgZG91YmxlIGVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0
YXRlLCBkb3VibGUgeCwgZG91YmxlIG1pbmltdW0sIGRvdWJsZSBtYXhpbXVtKQotewotICAgIFZN
JiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOwotCi0gICAgaWYgKHN0ZDo6aXNuYW4oeCkgfHwgc3RkOjppc2luZih4KSkgewotICAgICAg
ICB0aHJvd1R5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCByYW5nZUVycm9yU3RyaW5nKHgsIG1pbmlt
dW0sIG1heGltdW0pKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHggPSB0cnVuYyh4
KTsKLSAgICBpZiAoeCA8IG1pbmltdW0gfHwgeCA+IG1heGltdW0pIHsKLSAgICAgICAgdGhyb3dU
eXBlRXJyb3IoJnN0YXRlLCBzY29wZSwgcmFuZ2VFcnJvclN0cmluZyh4LCBtaW5pbXVtLCBtYXhp
bXVtKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4geDsKLX0KLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0cyB7Ci19OwotCi10ZW1wbGF0
ZSA8Pgotc3RydWN0IEludFR5cGVMaW1pdHM8aW50OF90PiB7Ci0gICAgc3RhdGljIGNvbnN0IGlu
dDhfdCBtaW5WYWx1ZSA9IC0xMjg7Ci0gICAgc3RhdGljIGNvbnN0IGludDhfdCBtYXhWYWx1ZSA9
IDEyNzsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8v
IDJeOAotfTsKLQotdGVtcGxhdGUgPD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzPHVpbnQ4X3Q+IHsK
LSAgICBzdGF0aWMgY29uc3QgdWludDhfdCBtYXhWYWx1ZSA9IDI1NTsKLSAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMgPSAyNTY7IC8vIDJeOAotfTsKLQotdGVtcGxhdGUg
PD4KLXN0cnVjdCBJbnRUeXBlTGltaXRzPGludDE2X3Q+IHsKLSAgICBzdGF0aWMgY29uc3Qgc2hv
cnQgbWluVmFsdWUgPSAtMzI3Njg7Ci0gICAgc3RhdGljIGNvbnN0IHNob3J0IG1heFZhbHVlID0g
MzI3Njc7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mVmFsdWVzID0gNjU1MzY7
IC8vIDJeMTYKLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgSW50VHlwZUxpbWl0czx1aW50MTZf
dD4gewotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtYXhWYWx1ZSA9IDY1NTM1Owot
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1iZXJPZlZhbHVlcyA9IDY1NTM2OyAvLyAyXjE2
Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJJ
bnQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uIGNvbmZpZ3VyYXRpb24pCi17Ci0gICAgVk0mIHZtID0gc3RhdGUudm0oKTsKLSAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1
ZSwgIlNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHNpZ25lZCBpbnRlZ3JhbCB0eXBlcyIpOwotCi0g
ICAgdHlwZWRlZiBJbnRUeXBlTGltaXRzPFQ+IExpbWl0c1RyYWl0OwotICAgIC8vIEZhc3QgcGF0
aCBpZiB0aGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciBpbiB0aGUg
cmlnaHQgcmFuZ2UuCi0gICAgaWYgKHZhbHVlLmlzSW50MzIoKSkgewotICAgICAgICBpbnQzMl90
IGQgPSB2YWx1ZS5hc0ludDMyKCk7Ci0gICAgICAgIGlmIChkID49IExpbWl0c1RyYWl0OjptaW5W
YWx1ZSAmJiBkIDw9IExpbWl0c1RyYWl0OjptYXhWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPihkKTsKLSAgICAgICAgc3dpdGNoIChjb25maWd1cmF0aW9uKSB7Ci0gICAg
ICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3JtYWw6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246
OkVuZm9yY2VSYW5nZToKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUp
OwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25D
b25maWd1cmF0aW9uOjpDbGFtcDoKLSAgICAgICAgICAgIHJldHVybiBkIDwgTGltaXRzVHJhaXQ6
Om1pblZhbHVlID8gTGltaXRzVHJhaXQ6Om1pblZhbHVlIDogTGltaXRzVHJhaXQ6Om1heFZhbHVl
OwotICAgICAgICB9Ci0gICAgICAgIGQgJT0gTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzOwot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCA+IExpbWl0c1RyYWl0OjptYXhWYWx1ZSA/
IGQgLSBMaW1pdHNUcmFpdDo6bnVtYmVyT2ZWYWx1ZXMgOiBkKTsKLSAgICB9Ci0KLSAgICBkb3Vi
bGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgMCk7Ci0KLSAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24pIHsKLSAgICBjYXNlIEludGVn
ZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlOgotICAgICAg
ICByZXR1cm4gZW5mb3JjZVJhbmdlKHN0YXRlLCB4LCBMaW1pdHNUcmFpdDo6bWluVmFsdWUsIExp
bWl0c1RyYWl0OjptYXhWYWx1ZSk7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wOgotICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRv
PFQ+KHgpOwotICAgIH0KLQotICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNpbmYoeCkg
fHwgIXgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgeCA9IHggPCAwID8gLWZsb29yKGZhYnMo
eCkpIDogZmxvb3IoZmFicyh4KSk7Ci0gICAgeCA9IGZtb2QoeCwgTGltaXRzVHJhaXQ6Om51bWJl
ck9mVmFsdWVzKTsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPih4ID4gTGltaXRzVHJhaXQ6
Om1heFZhbHVlID8geCAtIExpbWl0c1RyYWl0OjpudW1iZXJPZlZhbHVlcyA6IHgpOwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBpbmxpbmUgVCB0b1NtYWxsZXJVSW50KEV4ZWNT
dGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX3Vuc2lnbmVkPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlNo
b3VsZCBvbmx5IGJlIHVzZWQgZm9yIHVuc2lnbmVkIGludGVncmFsIHR5cGVzIik7Ci0KLSAgICB0
eXBlZGVmIEludFR5cGVMaW1pdHM8VD4gTGltaXRzVHJhaXQ7Ci0gICAgLy8gRmFzdCBwYXRoIGlm
IHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0IHVuc2lnbmVkIGludGVnZXIgaW4gdGhlIHJp
Z2h0IHJhbmdlLgotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKSB7Ci0gICAgICAgIHVpbnQzMl90
IGQgPSB2YWx1ZS5hc1VJbnQzMigpOwotICAgICAgICBpZiAoZCA8PSBMaW1pdHNUcmFpdDo6bWF4
VmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oZCk7Ci0gICAgICAgIHN3
aXRjaCAoY29uZmlndXJhdGlvbikgewotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29u
ZmlndXJhdGlvbjo6Tm9ybWFsOgotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGQp
OwotICAgICAgICBjYXNlIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJh
bmdlOgotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29wZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRp
b246OkNsYW1wOgotICAgICAgICAgICAgcmV0dXJuIExpbWl0c1RyYWl0OjptYXhWYWx1ZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRlKTsK
LSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCAwKTsKLQotICAgIHN3aXRjaCAoY29uZmln
dXJhdGlvbikgewotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpOb3Jt
YWw6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0
aW9uOjpFbmZvcmNlUmFuZ2U6Ci0gICAgICAgIHJldHVybiBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgs
IDAsIExpbWl0c1RyYWl0OjptYXhWYWx1ZSk7Ci0gICAgY2FzZSBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkNsYW1wOgotICAgICAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBj
bGFtcFRvPFQ+KHgpOwotICAgIH0KLQotICAgIGlmIChzdGQ6OmlzbmFuKHgpIHx8IHN0ZDo6aXNp
bmYoeCkgfHwgIXgpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgeCA9IHggPCAwID8gLWZsb29y
KGZhYnMoeCkpIDogZmxvb3IoZmFicyh4KSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KGZt
b2QoeCwgTGltaXRzVHJhaXQ6Om51bWJlck9mVmFsdWVzKSk7Ci19Ci0KLWludDhfdCB0b0ludDhF
bmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAg
IHJldHVybiB0b1NtYWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotdWludDhfdCB0b1VJbnQ4RW5m
b3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBy
ZXR1cm4gdG9TbWFsbGVyVUludDx1aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJz
aW9uQ29uZmlndXJhdGlvbjo6RW5mb3JjZVJhbmdlKTsKLX0KLQotaW50OF90IHRvSW50OENsYW1w
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9T
bWFsbGVySW50PGludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3Vy
YXRpb246OkNsYW1wKTsKLX0KLQotdWludDhfdCB0b1VJbnQ4Q2xhbXAoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQ4
X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpDbGFtcCk7
Ci19Ci0KLS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1dlYklETC8jZXMtYnl0ZQotaW50OF90IHRv
SW50OChFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1Nt
YWxsZXJJbnQ8aW50OF90PihzdGF0ZSwgdmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJh
dGlvbjo6Tm9ybWFsKTsKLX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy1v
Y3RldAotdWludDhfdCB0b1VJbnQ4KEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17
Ci0gICAgcmV0dXJuIHRvU21hbGxlclVJbnQ8dWludDhfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2Vy
Q29udmVyc2lvbkNvbmZpZ3VyYXRpb246Ok5vcm1hbCk7Ci19Ci0KLWludDE2X3QgdG9JbnQxNkVu
Zm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVy
biB0b1NtYWxsZXJJbnQ8aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNv
bmZpZ3VyYXRpb246OkVuZm9yY2VSYW5nZSk7Ci19Ci0KLXVpbnQxNl90IHRvVUludDE2RW5mb3Jj
ZVJhbmdlKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHRv
U21hbGxlclVJbnQ8dWludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25m
aWd1cmF0aW9uOjpFbmZvcmNlUmFuZ2UpOwotfQotCi1pbnQxNl90IHRvSW50MTZDbGFtcChFeGVj
U3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJJbnQ8
aW50MTZfdD4oc3RhdGUsIHZhbHVlLCBJbnRlZ2VyQ29udmVyc2lvbkNvbmZpZ3VyYXRpb246OkNs
YW1wKTsKLX0KLQotdWludDE2X3QgdG9VSW50MTZDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwg
dmFsdWUsIEludGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Q2xhbXApOwotfQotCi0vLyBo
dHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXNob3J0Ci1pbnQxNl90IHRvSW50MTYoRXhl
Y1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdG9TbWFsbGVySW50
PGludDE2X3Q+KHN0YXRlLCB2YWx1ZSwgSW50ZWdlckNvbnZlcnNpb25Db25maWd1cmF0aW9uOjpO
b3JtYWwpOwotfQotCi0vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVk
LXNob3J0Ci11aW50MTZfdCB0b1VJbnQxNihFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZhbHVl
KQotewotICAgIHJldHVybiB0b1NtYWxsZXJVSW50PHVpbnQxNl90PihzdGF0ZSwgdmFsdWUsIElu
dGVnZXJDb252ZXJzaW9uQ29uZmlndXJhdGlvbjo6Tm9ybWFsKTsKLX0KLQotLy8gaHR0cDovL3d3
dy53My5vcmcvVFIvV2ViSURMLyNlcy1sb25nCi1pbnQzMl90IHRvSW50MzJFbmZvcmNlUmFuZ2Uo
RXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBWTSYgdm0gPSBzdGF0ZS52
bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlm
ICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAg
ICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgMCk7Ci0gICAgcmV0dXJuIGVuZm9yY2VSYW5nZShzdGF0ZSwgeCwga01pbklu
dDMyLCBrTWF4SW50MzIpOwotfQotCi1pbnQzMl90IHRvSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0
YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCi0gICAgICAg
IHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0KLSAgICBkb3VibGUgeCA9IHZhbHVlLnRvTnVtYmVy
KCZzdGF0ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6aXNuYW4oeCkgPyAwIDogY2xhbXBUbzxpbnQzMl90
Pih4KTsKLX0KLQotdWludDMyX3QgdG9VSW50MzJDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU1Zh
bHVlIHZhbHVlKQotewotICAgIGlmICh2YWx1ZS5pc1VJbnQzMigpKQotICAgICAgICByZXR1cm4g
dmFsdWUuYXNVSW50MzIoKTsKLQotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIoJnN0YXRl
KTsKLSAgICByZXR1cm4gc3RkOjppc25hbih4KSA/IDAgOiBjbGFtcFRvPHVpbnQzMl90Pih4KTsK
LX0KLQotLy8gaHR0cDovL3d3dy53My5vcmcvVFIvV2ViSURMLyNlcy11bnNpZ25lZC1sb25nCi11
aW50MzJfdCB0b1VJbnQzMkVuZm9yY2VSYW5nZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlIHZh
bHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKHZhbHVlLmlzVUludDMyKCkpCi0gICAgICAg
IHJldHVybiB2YWx1ZS5hc1VJbnQzMigpOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJl
cigmc3RhdGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVy
biBlbmZvcmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtNYXhVSW50MzIpOwotfQotCi1pbnQ2NF90IHRv
SW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwot
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVybiBlbmZvcmNlUmFu
Z2Uoc3RhdGUsIHgsIC1rSlNNYXhJbnRlZ2VyLCBrSlNNYXhJbnRlZ2VyKTsKLX0KLQotdWludDY0
X3QgdG9VSW50NjRFbmZvcmNlUmFuZ2UoRXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQotewotICAgIFZNJiB2bSA9IHN0YXRlLnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3Rh
dGUpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIDApOwotICAgIHJldHVybiBlbmZv
cmNlUmFuZ2Uoc3RhdGUsIHgsIDAsIGtKU01heEludGVnZXIpOwotfQotCi1pbnQ2NF90IHRvSW50
NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgZG91
YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6OmlzbmFuKHgp
ID8gMCA6IHN0YXRpY19jYXN0PGludDY0X3Q+KHN0ZDo6bWluPGRvdWJsZT4oc3RkOjptYXg8ZG91
YmxlPih4LCAta0pTTWF4SW50ZWdlciksIGtKU01heEludGVnZXIpKTsKLX0KLQotdWludDY0X3Qg
dG9VSW50NjRDbGFtcChFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0g
ICAgZG91YmxlIHggPSB2YWx1ZS50b051bWJlcigmc3RhdGUpOwotICAgIHJldHVybiBzdGQ6Omlz
bmFuKHgpID8gMCA6IHN0YXRpY19jYXN0PHVpbnQ2NF90PihzdGQ6Om1pbjxkb3VibGU+KHN0ZDo6
bWF4PGRvdWJsZT4oeCwgMCksIGtKU01heEludGVnZXIpKTsKLX0KLQotLy8gaHR0cDovL3d3dy53
My5vcmcvVFIvV2ViSURMLyNlcy1sb25nLWxvbmcKLWludDY0X3QgdG9JbnQ2NChFeGVjU3RhdGUm
IHN0YXRlLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIGRvdWJsZSB4ID0gdmFsdWUudG9OdW1iZXIo
JnN0YXRlKTsKLQotICAgIC8vIE1hcCBOYU5zIGFuZCArLy1JbmZpbml0eSB0byAwOyBjb252ZXJ0
IGZpbml0ZSB2YWx1ZXMgbW9kdWxvIDJeNjQuCi0gICAgdW5zaWduZWQgbG9uZyBsb25nIG47Ci0g
ICAgZG91YmxlVG9JbnRlZ2VyKHgsIG4pOwotICAgIHJldHVybiBuOwotfQotCi0vLyBodHRwOi8v
d3d3LnczLm9yZy9UUi9XZWJJREwvI2VzLXVuc2lnbmVkLWxvbmctbG9uZwotdWludDY0X3QgdG9V
SW50NjQoRXhlY1N0YXRlJiBzdGF0ZSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBkb3VibGUgeCA9
IHZhbHVlLnRvTnVtYmVyKCZzdGF0ZSk7Ci0KLSAgICAvLyBNYXAgTmFOcyBhbmQgKy8tSW5maW5p
dHkgdG8gMDsgY29udmVydCBmaW5pdGUgdmFsdWVzIG1vZHVsbyAyXjY0LgotICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyBuOwotICAgIGRvdWJsZVRvSW50ZWdlcih4LCBuKTsKLSAgICByZXR1cm4gbjsK
LX0KLQotY2xhc3MgR2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvciB7Ci1wdWJsaWM6Ci0gICAg
R2V0Q2FsbGVyR2xvYmFsT2JqZWN0RnVuY3RvcigpID0gZGVmYXVsdDsKLQotICAgIFN0YWNrVmlz
aXRvcjo6U3RhdHVzIG9wZXJhdG9yKCkoU3RhY2tWaXNpdG9yJiB2aXNpdG9yKSBjb25zdAotICAg
IHsKLSAgICAgICAgaWYgKCFtX2hhc1NraXBwZWRGaXJzdEZyYW1lKSB7Ci0gICAgICAgICAgICBt
X2hhc1NraXBwZWRGaXJzdEZyYW1lID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBTdGFja1Zp
c2l0b3I6OkNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGF1dG8qIGNvZGVCbG9j
ayA9IHZpc2l0b3ItPmNvZGVCbG9jaygpKQotICAgICAgICAgICAgbV9nbG9iYWxPYmplY3QgPSBj
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFT
U0VSVCh2aXNpdG9yLT5jYWxsZWUoKSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQ2FsbGVlIGlz
IG5vdCBhbiBvYmplY3QgaWYgdGhlIGNhbGxlciBpcyBXZWIgQXNzZW1ibHkuCi0gICAgICAgICAg
ICAvLyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gaGVyZS4gV2UgY2FuIHByb2JhYmx5IGdldCB0aGUg
Z2xvYmFsIG9iamVjdAotICAgICAgICAgICAgLy8gZnJvbSB0aGUgdG9wLW1vc3QgV2FzbSBJbnN0
YW5jZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcyMQotICAg
ICAgICAgICAgaWYgKHZpc2l0b3ItPmNhbGxlZSgpLT5pc09iamVjdCgpKQotICAgICAgICAgICAg
ICAgIG1fZ2xvYmFsT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4odmlzaXRvci0+Y2FsbGVlKCkp
LT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gU3RhY2tWaXNpdG9y
OjpEb25lOwotICAgIH0KLQotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QoKSBjb25z
dCB7IHJldHVybiBtX2dsb2JhbE9iamVjdDsgfQotCi1wcml2YXRlOgotICAgIG11dGFibGUgYm9v
bCBtX2hhc1NraXBwZWRGaXJzdEZyYW1lIHsgZmFsc2UgfTsKLSAgICBtdXRhYmxlIEpTR2xvYmFs
T2JqZWN0KiBtX2dsb2JhbE9iamVjdCB7IG51bGxwdHIgfTsKLX07Ci0KLURPTVdpbmRvdyYgY2Fs
bGVyRE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBHZXRDYWxsZXJHbG9iYWxPYmpl
Y3RGdW5jdG9yIGl0ZXI7Ci0gICAgZXhlYy0+aXRlcmF0ZShpdGVyKTsKLSAgICByZXR1cm4gaXRl
ci5nbG9iYWxPYmplY3QoKSA/IGFzSlNET01XaW5kb3coaXRlci5nbG9iYWxPYmplY3QoKSktPndy
YXBwZWQoKSA6IGZpcnN0RE9NV2luZG93KGV4ZWMpOwotfQotCi1ET01XaW5kb3cmIGFjdGl2ZURP
TVdpbmRvdyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGFzSlNET01XaW5kb3coZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+d3JhcHBlZCgpOwotfQotCi1ET01XaW5kb3cmIGZp
cnN0RE9NV2luZG93KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gYXNKU0RPTVdpbmRv
dyhleGVjLT52bUVudHJ5R2xvYmFsT2JqZWN0KCkpLT53cmFwcGVkKCk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgYm9vbCBjYW5BY2Nlc3NEb2N1bWVudChKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIERvY3Vt
ZW50KiB0YXJnZXREb2N1bWVudCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0
aW9uKQotewotICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIGlmICghdGFyZ2V0RG9jdW1lbnQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIERPTVdpbmRvdyYgYWN0aXZlID0gYWN0aXZlRE9NV2luZG93
KHN0YXRlKTsKLQotICAgIGlmIChhY3RpdmUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5j
YW5BY2Nlc3ModGFyZ2V0RG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIHN3aXRjaCAocmVwb3J0aW5nT3B0aW9uKSB7Ci0gICAgY2FzZSBUaHJv
d1NlY3VyaXR5RXJyb3I6Ci0gICAgICAgIHRocm93U2VjdXJpdHlFcnJvcigqc3RhdGUsIHNjb3Bl
LCB0YXJnZXREb2N1bWVudC0+ZG9tV2luZG93KCktPmNyb3NzRG9tYWluQWNjZXNzRXJyb3JNZXNz
YWdlKGFjdGl2ZSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIExvZ1NlY3VyaXR5RXJyb3I6
Ci0gICAgICAgIHByaW50RXJyb3JNZXNzYWdlRm9yRnJhbWUodGFyZ2V0RG9jdW1lbnQtPmZyYW1l
KCksIHRhcmdldERvY3VtZW50LT5kb21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJvck1l
c3NhZ2UoYWN0aXZlKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRG9Ob3RSZXBvcnRTZWN1
cml0eUVycm9yOgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLWJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgRE9NV2luZG93JiB0YXJnZXQsIFNlY3VyaXR5UmVwb3J0aW5n
T3B0aW9uIHJlcG9ydGluZ09wdGlvbikKLXsKLSAgICByZXR1cm4gY2FuQWNjZXNzRG9jdW1lbnQo
c3RhdGUsIHRhcmdldC5kb2N1bWVudCgpLCByZXBvcnRpbmdPcHRpb24pOwotfQotCi1ib29sIEJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKEpTQzo6RXhlY1N0YXRlKiBz
dGF0ZSwgRnJhbWUqIHRhcmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5nT3B0
aW9uKQotewotICAgIHJldHVybiB0YXJnZXQgJiYgY2FuQWNjZXNzRG9jdW1lbnQoc3RhdGUsIHRh
cmdldC0+ZG9jdW1lbnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKLX0KLQotYm9vbCBCaW5kaW5nU2Vj
dXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgTm9k
ZSogdGFyZ2V0KQotewotICAgIHJldHVybiAhdGFyZ2V0IHx8IGNhbkFjY2Vzc0RvY3VtZW50KCZz
dGF0ZSwgJnRhcmdldC0+ZG9jdW1lbnQoKSwgTG9nU2VjdXJpdHlFcnJvcik7Ci19Ci0gICAgCi1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgdGhyb3dUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsK
LSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcigmc3RhdGUsIHNjb3BlLCBlcnJvck1lc3NhZ2Up
OwotfQotCi1zdGF0aWMgdm9pZCBhcHBlbmRBcmd1bWVudE11c3RCZShTdHJpbmdCdWlsZGVyJiBi
dWlsZGVyLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFyKiBhcmd1bWVudE5hbWUs
IGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsK
LSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIkFyZ3VtZW50ICIpOwotICAgIGJ1aWxkZXIuYXBw
ZW5kTnVtYmVyKGFyZ3VtZW50SW5kZXggKyAxKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
IiAoJyIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGFyZ3VtZW50TmFtZSk7Ci0gICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCInKSB0byAiKTsKLSAgICBpZiAoIWZ1bmN0aW9uTmFtZSkgewotICAgICAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoInRoZSAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
aW50ZXJmYWNlTmFtZSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGNvbnN0cnVj
dG9yIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoaW50ZXJmYWNlTmFt
ZSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcuJyk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGZ1bmN0aW9uTmFtZSk7Ci0gICAgfQotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG11c3Qg
YmUgIik7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVwb3J0RGVwcmVjYXRlZEdldHRlckVy
cm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29u
c3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0
dGVtcHQgdG8gYWNjZXNzIHByb3BlcnR5ICciLCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0i
LCBpbnRlcmZhY2VOYW1lLCAiIG9iamVjdC4iKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLX0KLSAgICAKLXZvaWQgcmVwb3J0RGVwcmVjYXRlZFNldHRlckVy
cm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29u
c3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICBhdXRvJiBjb250ZXh0ID0gKmpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtYWtlU3RyaW5nKCJEZXByZWNhdGVkIGF0
dGVtcHQgdG8gc2V0IHByb3BlcnR5ICciLCBhdHRyaWJ1dGVOYW1lLCAiJyBvbiBhIG5vbi0iLCBp
bnRlcmZhY2VOYW1lLCAiIG9iamVjdC4iKSk7Ci19Ci0KLXZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0g
ICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRl
LCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0ZSwgTk9UX1NVUFBPUlRFRF9FUlIpKTsK
LX0KLQotdm9pZCB0aHJvd05vdFN1cHBvcnRlZEVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
SlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBBU1NF
UlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdl
KTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24o
JnN0YXRlLCBOT1RfU1VQUE9SVEVEX0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsKLX0KLQotdm9pZCB0
aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Nj
b3BlJiBzY29wZSwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBBU1NFUlQoIXNjb3BlLmV4
Y2VwdGlvbigpKTsKLSAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKLSAgICB0aHJv
d0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBjcmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBJTlZB
TElEX1NUQVRFX0VSUiwgJm1lc3NhZ2VTdHJpbmcpKTsKLX0KLQotdm9pZCB0aHJvd1NlY3VyaXR5
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Ci0g
ICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9NRXhjZXB0aW9uKCZzdGF0
ZSwgU0VDVVJJVFlfRVJSLCBtZXNzYWdlKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhy
b3dBcmd1bWVudE11c3RCZUVudW1FcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhy
b3dTY29wZSYgc2NvcGUsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3Vt
ZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVmFsdWVzKQotewotICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKLSAgICBhcHBlbmRBcmd1bWVudE11c3RCZShidWlsZGVyLCBhcmd1bWVu
dEluZGV4LCBhcmd1bWVudE5hbWUsIGZ1bmN0aW9uSW50ZXJmYWNlTmFtZSwgZnVuY3Rpb25OYW1l
KTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIm9uZSBvZjogIik7Ci0gICAgYnVpbGRlci5h
cHBlbmQoZXhwZWN0ZWRWYWx1ZXMpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0
ZSwgc2NvcGUsIGJ1aWxkZXIudG9TdHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUg
dGhyb3dBcmd1bWVudE11c3RCZUZ1bmN0aW9uRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlLCB1bnNpZ25lZCBhcmd1bWVudEluZGV4LCBjb25zdCBjaGFy
KiBhcmd1bWVudE5hbWUsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYXBwZW5kQXJn
dW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1lLCBpbnRlcmZh
Y2VOYW1lLCBmdW5jdGlvbk5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiYSBmdW5j
dGlvbiIpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxk
ZXIudG9TdHJpbmcoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dBcmd1bWVudFR5
cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIHVu
c2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50TmFtZSwgY29uc3QgY2hh
ciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0
IGNoYXIqIGV4cGVjdGVkVHlwZSkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAg
YXBwZW5kQXJndW1lbnRNdXN0QmUoYnVpbGRlciwgYXJndW1lbnRJbmRleCwgYXJndW1lbnROYW1l
LCBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSk7Ci0gICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJhbiBpbnN0YW5jZSBvZiAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChleHBlY3Rl
ZFR5cGUpOwotICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKCZzdGF0ZSwgc2NvcGUsIGJ1aWxk
ZXIudG9TdHJpbmcoKSk7Ci19Ci0KLXZvaWQgdGhyb3dBcnJheUVsZW1lbnRUeXBlRXJyb3IoSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIHRocm93
VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJJbnZhbGlkIEFycmF5IGVsZW1l
bnQgdHlwZSIpKTsKLX0KLQotdm9pZCB0aHJvd0F0dHJpYnV0ZVR5cGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIGludGVyZmFj
ZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IGNoYXIqIGV4cGVjdGVkVHlw
ZSkKLXsKLSAgICB0aHJvd1R5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIG1ha2VTdHJpbmcoIlRoZSAi
LCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgYXR0cmlidXRlIG11c3QgYmUg
YW4gaW5zdGFuY2Ugb2YgIiwgZXhwZWN0ZWRUeXBlKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFs
dWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUsIGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIq
IGRpY3Rpb25hcnlOYW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpCi17Ci0gICAgU3RyaW5n
QnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiTWVtYmVyICIpOwot
ICAgIGJ1aWxkZXIuYXBwZW5kKGRpY3Rpb25hcnlOYW1lKTsKLSAgICBidWlsZGVyLmFwcGVuZCgn
LicpOwotICAgIGJ1aWxkZXIuYXBwZW5kKG1lbWJlck5hbWUpOwotICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mICIpOwotICAg
IGJ1aWxkZXIuYXBwZW5kKGV4cGVjdGVkVHlwZSk7Ci0gICAgcmV0dXJuIHRocm93Vk1UeXBlRXJy
b3IoJnN0YXRlLCBzY29wZSwgYnVpbGRlci50b1N0cmluZygpKTsKLX0KLQotSlNDOjpFbmNvZGVk
SlNWYWx1ZSB0aHJvd0NvbnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxl
RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlLCBjb25z
dCBjaGFyKiBpbnRlcmZhY2VOYW1lKQotewotICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoJnN0YXRl
LCBzY29wZSwgY3JlYXRlUmVmZXJlbmNlRXJyb3IoJnN0YXRlLCBtYWtlU3RyaW5nKGludGVyZmFj
ZU5hbWUsICIgY29uc3RydWN0b3IgYXNzb2NpYXRlZCBleGVjdXRpb24gY29udGV4dCBpcyB1bmF2
YWlsYWJsZSIpKSk7Ci19Ci0KLXZvaWQgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgdGhyb3dUeXBlRXJy
b3Ioc3RhdGUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlZhbHVlIGlzIG5vdCBhIHNlcXVlbmNlIikp
OwotfQotCi12b2lkIHRocm93Tm9uRmluaXRlVHlwZUVycm9yKEV4ZWNTdGF0ZSYgc3RhdGUsIEpT
Qzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgdGhyb3dUeXBlRXJyb3IoJnN0YXRlLCBzY29w
ZSwgQVNDSUlMaXRlcmFsKCJUaGUgcHJvdmlkZWQgdmFsdWUgaXMgbm9uLWZpbml0ZSIpKTsKLX0K
LQotU3RyaW5nIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFj
ZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJp
bmcoIlRoZSAiLCBpbnRlcmZhY2VOYW1lLCAnLicsIGF0dHJpYnV0ZU5hbWUsICIgZ2V0dGVyIGNh
biBvbmx5IGJlIHVzZWQgb24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpOwotfQotCi1K
U0M6OkVuY29kZWRKU1ZhbHVlIHRocm93R2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBz
dGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwg
Y29uc3QgY2hhciogYXR0cmlidXRlTmFtZSkKLXsKLSAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cigmc3RhdGUsIHNjb3BlLCBtYWtlR2V0dGVyVHlwZUVycm9yTWVzc2FnZShpbnRlcmZhY2VOYW1l
LCBhdHRyaWJ1dGVOYW1lKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlz
ZVdpdGhHZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBjb25zdCBjaGFyKiBp
bnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotewotICAgIHJldHVybiBj
cmVhdGVSZWplY3RlZFByb21pc2VXaXRoVHlwZUVycm9yKHN0YXRlLCBtYWtlR2V0dGVyVHlwZUVy
cm9yTWVzc2FnZShpbnRlcmZhY2VOYW1lLCBhdHRyaWJ1dGVOYW1lKSk7Ci19Ci0KLWJvb2wgdGhy
b3dTZXR0ZXJUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVO
YW1lKQotewotICAgIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgbWFrZVN0cmluZygiVGhl
ICIsIGludGVyZmFjZU5hbWUsICcuJywgYXR0cmlidXRlTmFtZSwgIiBzZXR0ZXIgY2FuIG9ubHkg
YmUgdXNlZCBvbiBpbnN0YW5jZXMgb2YgIiwgaW50ZXJmYWNlTmFtZSkpOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotU3RyaW5nIG1ha2VUaGlzVHlwZUVycm9yTWVzc2FnZShjb25zdCBjaGFyKiBp
bnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0gICAgcmV0dXJuIG1h
a2VTdHJpbmcoIkNhbiBvbmx5IGNhbGwgIiwgaW50ZXJmYWNlTmFtZSwgJy4nLCBmdW5jdGlvbk5h
bWUsICIgb24gaW5zdGFuY2VzIG9mICIsIGludGVyZmFjZU5hbWUpOwotfQotCi1FbmNvZGVkSlNW
YWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUpCi17Ci0gICAgcmV0dXJuIHRocm93VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgbWFr
ZVRoaXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIGZ1bmN0aW9uTmFtZSkpOwotfQot
Ci1KU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZl
cnJlZFByb21pc2UmIHByb21pc2UsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIG1ldGhvZE5hbWUpCi17Ci0gICAgcHJvbWlzZS5yZWplY3QoVHlwZUVycm9yLCBtYWtlVGhp
c1R5cGVFcnJvck1lc3NhZ2UoaW50ZXJmYWNlTmFtZSwgbWV0aG9kTmFtZSkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci19Ci0KLUpTQzo6RW5jb2RlZEpTVmFs
dWUgcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwg
Y29uc3QgY2hhciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogbWV0aG9kTmFtZSkKLXsKLSAg
ICByZXR1cm4gY3JlYXRlUmVqZWN0ZWRQcm9taXNlV2l0aFR5cGVFcnJvcihzdGF0ZSwgbWFrZVRo
aXNUeXBlRXJyb3JNZXNzYWdlKGludGVyZmFjZU5hbWUsIG1ldGhvZE5hbWUpKTsKLX0KLQotdm9p
ZCBjYWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUs
IEpTQzo6SlNPYmplY3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYgZnVuY3Rpb24pCi17
Ci0gICAgSlNDOjpDYWxsRGF0YSBjYWxsRGF0YTsKLSAgICBKU0M6OkNhbGxUeXBlIGNhbGxUeXBl
ID0gSlNDOjpnZXRDYWxsRGF0YSgmZnVuY3Rpb24sIGNhbGxEYXRhKTsKLSAgICBBU1NFUlQoY2Fs
bFR5cGUgIT0gQ2FsbFR5cGU6Ok5vbmUpOwotCi0gICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBhcmd1bWVudHM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLmFyZ3VtZW50
Q291bnQoKTsgKytpKQotICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHN0YXRlLnVuY2hlY2tlZEFy
Z3VtZW50KGkpKTsKLSAgICBKU0M6OmNhbGwoJnN0YXRlLCAmZnVuY3Rpb24sIGNhbGxUeXBlLCBj
YWxsRGF0YSwgJnRoaXNPYmplY3QsIGFyZ3VtZW50cyk7Ci19Ci0KLXZvaWQgRE9NQ29uc3RydWN0
b3JKU0J1aWx0aW5PYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDOjpKU0NlbGwqIGNlbGwsIEpTQzo6
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgYXV0byogdGhpc09iamVjdCA9IGpzQ2FzdDxE
T01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdCo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1f
aW5pdGlhbGl6ZUZ1bmN0aW9uKTsKLX0KLQotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY2FsbFRocm93VHlwZUVycm9yKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBWTSYgdm0g
PSBleGVjLT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
LSAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJDb25zdHJ1Y3Rv
ciByZXF1aXJlcyAnbmV3JyBvcGVyYXRvciIpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKTsKLX0KLQotQ2FsbFR5cGUgRE9NQ29uc3RydWN0b3JPYmplY3Q6OmdldENhbGxE
YXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKLXsKLSAgICBjYWxsRGF0YS5uYXRpdmUu
ZnVuY3Rpb24gPSBjYWxsVGhyb3dUeXBlRXJyb3I7Ci0gICAgcmV0dXJuIENhbGxUeXBlOjpIb3N0
OwotfQotCi12b2lkIHRocm93RE9NU3ludGF4RXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBK
U0M6OlRocm93U2NvcGUmIHNjb3BlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkp
OwotICAgIHRocm93RXhjZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigm
c3RhdGUsIFNZTlRBWF9FUlIpKTsKLX0KLQotdm9pZCB0aHJvd0RhdGFDbG9uZUVycm9yKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkKLXsKLSAgICBBU1NFUlQo
IXNjb3BlLmV4Y2VwdGlvbigpKTsKLSAgICB0aHJvd0V4Y2VwdGlvbigmc3RhdGUsIHNjb3BlLCBj
cmVhdGVET01FeGNlcHRpb24oJnN0YXRlLCBEQVRBX0NMT05FX0VSUikpOwotfQotCi12b2lkIHRo
cm93SW5kZXhTaXplRXJyb3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUm
IHNjb3BlKQotewotICAgIEFTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwotICAgIHRocm93RXhj
ZXB0aW9uKCZzdGF0ZSwgc2NvcGUsIGNyZWF0ZURPTUV4Y2VwdGlvbigmc3RhdGUsIElOREVYX1NJ
WkVfRVJSKSk7Ci19Ci0KLXZvaWQgdGhyb3dUeXBlTWlzbWF0Y2hFcnJvcihKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpCi17Ci0gICAgQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSk7Ci0gICAgdGhyb3dFeGNlcHRpb24oJnN0YXRlLCBzY29wZSwgY3JlYXRlRE9N
RXhjZXB0aW9uKCZzdGF0ZSwgVFlQRV9NSVNNQVRDSF9FUlIpKTsKLX0KLQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVy
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdy
YXBwZXJDYWNoZS5oCShyZXZpc2lvbiAyMTEzNTMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5oOjIxMTM1MykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV3JhcHBlckNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MjUgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiwgMjAwOC0yMDA5LCAyMDEzLCAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcg
U2FtdWVsIFdlaW5pZyA8c2FtQHdlYmtpdC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAxMiBF
cmljc3NvbiBBQi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTMg
TWljaGFlbCBQcnVldHQgPG1pY2hhZWxANjhrLm9yZz4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRE9NV3JhcHBlcldvcmxkLmgiCisj
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCisjaW5j
bHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXIuaCIKKyNp
bmNsdWRlICJKU0R5bmFtaWNEb3duY2FzdC5oIgorI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5o
IgorI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCIKKyNpbmNsdWRlICJXZWJDb3Jl
VHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGhl
YXAvSGVhcElubGluZXMuaD4KKyNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oPgor
I2luY2x1ZGUgPGhlYXAvV2Vhay5oPgorI2luY2x1ZGUgPGhlYXAvV2Vha0lubGluZXMuaD4KKyNp
bmNsdWRlIDxydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVu
dGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5QnVm
ZmVyLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3RJbmxp
bmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVu
dGltZS9Mb29rdXAuaD4KKyNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9U
eXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KKyNp
bmNsdWRlIDxydW50aW1lL1dyaXRlQmFycmllci5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBm
aWxlIGEgbG90IGVhc2llciB0byByZWFkIGJ5IHB1dHRpbmcgYWxsIGZ1bmN0aW9uIGRlY2xhcmF0
aW9ucyBhdCB0aGUgdG9wLAorLy8gYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zIGJlbG93LCBldmVu
IGZvciB0ZW1wbGF0ZSBhbmQgaW5saW5lIGZ1bmN0aW9ucy4KKworbmFtZXNwYWNlIEpTQyB7Citj
bGFzcyBKU0Z1bmN0aW9uOworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hl
ZFNjcmlwdDsKK2NsYXNzIERlZmVycmVkUHJvbWlzZTsKK2NsYXNzIERPTVdpbmRvdzsKK2NsYXNz
IEZyYW1lOworY2xhc3MgVVJMOworY2xhc3MgTm9kZTsKKworc3RydWN0IEV4Y2VwdGlvbkRldGFp
bHMgeworICAgIFN0cmluZyBtZXNzYWdlOworICAgIGludCBsaW5lTnVtYmVyIHsgMCB9OworICAg
IGludCBjb2x1bW5OdW1iZXIgeyAwIH07CisgICAgU3RyaW5nIHNvdXJjZVVSTDsKK307CisKKy8v
IEJhc2UgY2xhc3MgZm9yIGFsbCBjb25zdHJ1Y3RvciBvYmplY3RzIGluIHRoZSBKU0MgYmluZGlu
Z3MuCitjbGFzcyBET01Db25zdHJ1Y3Rvck9iamVjdCA6IHB1YmxpYyBKU0RPTU9iamVjdCB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBKU0RPTU9iamVjdCBCYXNlOworICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSlNDOjpJbXBs
ZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6OkltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UgfCBK
U0M6OlR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YTsKKyAgICBzdGF0aWMgSlNDOjpTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6
SlNWYWx1ZSk7CisKK3Byb3RlY3RlZDoKKyAgICBET01Db25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0
cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKKyAgICBzdGF0aWMgU3RyaW5nIGNsYXNz
TmFtZShjb25zdCBKU09iamVjdCopOworICAgIHN0YXRpYyBKU0M6OkNhbGxUeXBlIGdldENhbGxE
YXRhKEpTQ2VsbCosIEpTQzo6Q2FsbERhdGEmKTsKK307CisKK2NsYXNzIERPTUNvbnN0cnVjdG9y
SlNCdWlsdGluT2JqZWN0IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7CisKK3Byb3RlY3RlZDoKKyAg
ICBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xv
YmFsT2JqZWN0Jik7CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6OkpTQ2VsbCos
IEpTQzo6U2xvdFZpc2l0b3ImKTsKKworICAgIEpTQzo6SlNGdW5jdGlvbiogaW5pdGlhbGl6ZUZ1
bmN0aW9uKCk7CisgICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpWTSYsIEpTQzo6
SlNGdW5jdGlvbiYpOworCitwcml2YXRlOgorICAgIEpTQzo6V3JpdGVCYXJyaWVyPEpTQzo6SlNG
dW5jdGlvbj4gbV9pbml0aWFsaXplRnVuY3Rpb247Cit9OworCitET01XaW5kb3cmIGNhbGxlckRP
TVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOworRE9NV2luZG93JiBhY3RpdmVET01XaW5kb3coSlND
OjpFeGVjU3RhdGUqKTsKK0RPTVdpbmRvdyYgZmlyc3RET01XaW5kb3coSlNDOjpFeGVjU3RhdGUq
KTsKKworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZXBvcnREZXByZWNhdGVk
R2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBj
b25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKK1dFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RGVw
cmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNl
TmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CisKK3ZvaWQgdGhyb3dBdHRyaWJ1dGVU
eXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBp
bnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBjaGFyKiBleHBl
Y3RlZFR5cGUpOworV0VCQ09SRV9FWFBPUlQgYm9vbCB0aHJvd1NldHRlclR5cGVFcnJvcihKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUs
IGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworCit2b2lkIHRocm93QXJyYXlFbGVtZW50VHlw
ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93RGF0
YUNsb25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKK3ZvaWQgdGhy
b3dET01TeW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOyAvLyBO
b3QgdGhlIHNhbWUgYXMgYSBKYXZhU2NyaXB0IHN5bnRheCBlcnJvci4KK3ZvaWQgdGhyb3dJbmRl
eFNpemVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwordm9pZCB0aHJv
d0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgY29u
c3QgY2hhciogbWVzc2FnZSk7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHRocm93Tm9uRmluaXRlVHlw
ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93Tm90
U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKK3ZvaWQg
dGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYs
IGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwordm9pZCB0aHJvd1NlY3VyaXR5RXJyb3IoSlNDOjpFeGVj
U3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworV0VCQ09S
RV9FWFBPUlQgdm9pZCB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpUaHJvd1Njb3BlJik7Cit2b2lkIHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlNDOjpFeGVjU3Rh
dGUmLCBKU0M6OlRocm93U2NvcGUmKTsKKworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNW
YWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpU
aHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnRO
YW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRWYWx1ZXMpOworSlNDOjpFbmNvZGVkSlNWYWx1
ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIqIGFyZ3VtZW50
TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3Vt
ZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQg
YXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5j
dGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciog
ZXhwZWN0ZWRUeXBlKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhyb3dS
ZXF1aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYs
IGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlOYW1lLCBjb25z
dCBjaGFyKiBleHBlY3RlZFR5cGUpOworSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0NvbnN0cnVj
dG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKTsKKworU3RyaW5n
IG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFjZU5hbWUsIGNv
bnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworU3RyaW5nIG1ha2VUaGlzVHlwZUVycm9yTWVzc2Fn
ZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsK
KworV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRlclR5cGVFcnJv
cihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVyZmFj
ZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOworV0VCQ09SRV9FWFBPUlQgSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUpOworCitXRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21p
c2VXaXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJm
YWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7CitXRUJDT1JFX0VYUE9SVCBKU0M6
OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihEZWZlcnJlZFBy
b21pc2UmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25O
YW1lKTsKK1dFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0UHJvbWlzZVdp
dGhUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50ZXJmYWNlTmFt
ZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7CisKK1dFQkNPUkVfRVhQT1JUIEpTQzo6U3Ry
dWN0dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBK
U0M6OkNsYXNzSW5mbyopOworV0VCQ09SRV9FWFBPUlQgSlNDOjpTdHJ1Y3R1cmUqIGNhY2hlRE9N
U3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpTdHJ1Y3R1cmUqLCBjb25zdCBKU0M6
OkNsYXNzSW5mbyopOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6U3Ry
dWN0dXJlKiBnZXRET01TdHJ1Y3R1cmUoSlNDOjpWTSYsIEpTRE9NR2xvYmFsT2JqZWN0Jik7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6U3RydWN0dXJlKiBkZXByZWNhdGVk
R2V0RE9NU3RydWN0dXJlKEpTQzo6RXhlY1N0YXRlKik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFw
cGVyQ2xhc3M+IEpTQzo6SlNPYmplY3QqIGdldERPTVByb3RvdHlwZShKU0M6OlZNJiwgSlNDOjpK
U0dsb2JhbE9iamVjdCopOworCit2b2lkIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRz
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgSlNDOjpKU0Z1bmN0
aW9uJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IEpTQzo6RW5jb2RlZEpTVmFsdWUg
Y3JlYXRlSlNCdWlsdGluKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU0Z1bmN0aW9uJiBpbml0aWFs
aXplRnVuY3Rpb24sIEpTRE9NR2xvYmFsT2JqZWN0Jik7CisKK0pTQzo6V2Vha0hhbmRsZU93bmVy
KiB3cmFwcGVyT3duZXIoRE9NV3JhcHBlcldvcmxkJiwgSlNDOjpBcnJheUJ1ZmZlciopOwordm9p
ZCogd3JhcHBlcktleShKU0M6OkFycmF5QnVmZmVyKik7CisKK0pTRE9NT2JqZWN0KiBnZXRJbmxp
bmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqKTsKK0pTRE9NT2JqZWN0KiBn
ZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJsZSop
OworSlNDOjpKU0FycmF5QnVmZmVyKiBnZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJX
b3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKKworYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVy
KERPTVdyYXBwZXJXb3JsZCYsIHZvaWQqLCBKU0RPTU9iamVjdCosIEpTQzo6V2Vha0hhbmRsZU93
bmVyKik7Citib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgU2Ny
aXB0V3JhcHBhYmxlKiwgSlNET01PYmplY3QqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVy
KiB3cmFwcGVyT3duZXIpOworYm9vbCBzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJX
b3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqLCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpT
Qzo6V2Vha0hhbmRsZU93bmVyKiB3cmFwcGVyT3duZXIpOworCitib29sIGNsZWFySW5saW5lQ2Fj
aGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCB2b2lkKiwgSlNET01PYmplY3QqKTsKK2Jvb2wg
Y2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYsIFNjcmlwdFdyYXBwYWJs
ZSosIEpTRE9NT2JqZWN0KiB3cmFwcGVyKTsKK2Jvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVy
KERPTVdyYXBwZXJXb3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqLCBKU0M6OkpTQXJyYXlCdWZmZXIq
IHdyYXBwZXIpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gSlNDOjpKU09iamVjdCog
Z2V0Q2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmLCBET01DbGFzcyYpOwordGVtcGxhdGU8
dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSBKU0M6OkpTT2JqZWN0KiBnZXRDYWNoZWRXcmFwcGVy
KERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFJlZjxET01DbGFzcz4mIG9iamVjdCkgeyByZXR1cm4g
Z2V0Q2FjaGVkV3JhcHBlcih3b3JsZCwgb2JqZWN0LmdldCgpKTsgfQordGVtcGxhdGU8dHlwZW5h
bWUgRE9NQ2xhc3MsIHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gdm9pZCBjYWNoZVdyYXBwZXIoRE9N
V3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MqLCBXcmFwcGVyQ2xhc3MqKTsKK3RlbXBsYXRlPHR5cGVu
YW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IHZvaWQgdW5jYWNoZVdyYXBwZXIo
RE9NV3JhcHBlcldvcmxkJiwgRE9NQ2xhc3MqLCBXcmFwcGVyQ2xhc3MqKTsKK3RlbXBsYXRlPHR5
cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBUPiBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9i
YWxPYmplY3QqLCBSZWY8VD4mJikgLT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
YW1lPERPTUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRy
YWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlOwordGVtcGxhdGU8dHlwZW5hbWUg
RE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUdsb2JhbE9iamVj
dCosIFJlZjxUPiYmKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhc3RkOjppc19zYW1lPERP
TUNsYXNzLCBUPjo6dmFsdWUsIHR5cGVuYW1lIEpTRE9NV3JhcHBlckNvbnZlcnRlclRyYWl0czxE
T01DbGFzcz46OldyYXBwZXJDbGFzcyo+Ojp0eXBlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01D
bGFzcz4gSlNDOjpKU1ZhbHVlIHdyYXAoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVj
dCosIERPTUNsYXNzJik7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IEpTQ2xhc3MmIGNh
c3RUaGlzVmFsdWUoSlNDOjpFeGVjU3RhdGUmKTsKKwordm9pZCBhZGRJbXB1cmVQcm9wZXJ0eShj
b25zdCBBdG9taWNTdHJpbmcmKTsKKworY29uc3QgSlNDOjpIYXNoVGFibGUmIGdldEhhc2hUYWJs
ZUZvckdsb2JhbERhdGEoSlNDOjpWTSYsIGNvbnN0IEpTQzo6SGFzaFRhYmxlJiBzdGF0aWNUYWJs
ZSk7CisKK1N0cmluZyByZXRyaWV2ZUVycm9yTWVzc2FnZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUgZXhjZXB0aW9uLCBKU0M6OkNhdGNoU2NvcGUmKTsKK1dFQkNPUkVf
RVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVl
IGV4Y2VwdGlvbiwgQ2FjaGVkU2NyaXB0KiA9IG51bGxwdHIpOworV0VCQ09SRV9FWFBPUlQgdm9p
ZCByZXBvcnRFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkV4Y2VwdGlvbiosIENhY2hl
ZFNjcmlwdCogPSBudWxscHRyLCBFeGNlcHRpb25EZXRhaWxzKiA9IG51bGxwdHIpOwordm9pZCBy
ZXBvcnRDdXJyZW50RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CisKK0pTQzo6SlNWYWx1ZSBj
cmVhdGVET01FeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb24mJik7CitKU0M6OkpT
VmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgRXhjZXB0aW9uQ29kZSwg
Y29uc3QgU3RyaW5nJik7CisKKy8vIENvbnZlcnQgYSBET00gaW1wbGVtZW50YXRpb24gZXhjZXB0
aW9uIGludG8gYSBKYXZhU2NyaXB0IGV4Y2VwdGlvbiBpbiB0aGUgZXhlY3V0aW9uIHN0YXRlLgor
dm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
LCBFeGNlcHRpb24mJik7CitXRUJDT1JFX0VYUE9SVCB2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvblNs
b3dQYXRoKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOwor
CitKU0M6OkpTVmFsdWUganNTdHJpbmcoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBVUkwmKTsgLy8g
ZW1wdHkgaWYgdGhlIFVSTCBpcyBudWxsCisKK0pTQzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZp
bmVkKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUg
c3RyaW5nIGlzIG51bGwKK0pTQzo6SlNWYWx1ZSBqc1N0cmluZ09yVW5kZWZpbmVkKEpTQzo6RXhl
Y1N0YXRlKiwgY29uc3QgVVJMJik7IC8vIHVuZGVmaW5lZCBpZiB0aGUgVVJMIGlzIG51bGwKKwor
Ly8gU2VlIEphdmFTY3JpcHRDb3JlIGZvciBleHBsYW5hdGlvbjogU2hvdWxkIGJlIHVzZWQgZm9y
IGFueSBzdHJpbmcgdGhhdCBpcyBhbHJlYWR5IG93bmVkIGJ5IGFub3RoZXIKKy8vIG9iamVjdCwg
dG8gbGV0IHRoZSBlbmdpbmUga25vdyB0aGF0IGNvbGxlY3RpbmcgdGhlIEpTU3RyaW5nIHdyYXBw
ZXIgaXMgdW5saWtlbHkgdG8gc2F2ZSBtZW1vcnkuCitKU0M6OkpTVmFsdWUganNPd25lZFN0cmlu
Z09yTnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFN0cmluZyYpOworCitTdHJpbmcgcHJvcGVy
dHlOYW1lVG9TdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOworCitBdG9taWNTdHJpbmcgcHJvcGVy
dHlOYW1lVG9BdG9taWNTdHJpbmcoSlNDOjpQcm9wZXJ0eU5hbWUpOworCitXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgaWRlbnRpZmllclRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYpOworV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHZhbHVlVG9CeXRlU3RyaW5n
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBp
ZGVudGlmaWVyVG9VU1ZTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZp
ZXImKTsKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyB2YWx1ZVRvVVNWU3RyaW5nKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNW
YWx1ZSwgSlNDOjpFeGVjU3RhdGUqLCBib29sJiBva2F5KTsKKworLy8gVGhlIGZvbGxvd2luZyBm
dW5jdGlvbnMgY29udmVydCB2YWx1ZXMgdG8gaW50ZWdlcnMgYXMgcGVyIHRoZSBXZWJJREwgc3Bl
Y2lmaWNhdGlvbi4KKy8vIFRoZSBjb252ZXJzaW9uIGZhaWxzIGlmIHRoZSB2YWx1ZSBjYW5ub3Qg
YmUgY29udmVydGVkIHRvIGEgbnVtYmVyIG9yLCBpZiBFbmZvcmNlUmFuZ2UgaXMgc3BlY2lmaWVk
LAorLy8gdGhlIHZhbHVlIGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSBkZXN0aW5hdGlvbiBp
bnRlZ2VyIHR5cGUuCisKK1dFQkNPUkVfRVhQT1JUIGludDhfdCB0b0ludDhFbmZvcmNlUmFuZ2Uo
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgdWludDhfdCB0
b1VJbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNP
UkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNkVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpT
Qzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkVuZm9yY2VSYW5n
ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQzMl90
IHRvSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VC
Q09SRV9FWFBPUlQgdWludDMyX3QgdG9VSW50MzJFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOworV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0RW5mb3JjZVJh
bmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ2
NF90IHRvVUludDY0RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
KworV0VCQ09SRV9FWFBPUlQgaW50OF90IHRvSW50OENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlND
OjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OENsYW1wKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDE2X3QgdG9JbnQxNkNs
YW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQx
Nl90IHRvVUludDE2Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOworV0VCQ09S
RV9FWFBPUlQgaW50MzJfdCB0b0ludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFs
dWUpOworV0VCQ09SRV9FWFBPUlQgdWludDMyX3QgdG9VSW50MzJDbGFtcChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjRDbGFtcChK
U0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0
b1VJbnQ2NENsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworV0VCQ09SRV9F
WFBPUlQgaW50OF90IHRvSW50OChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJD
T1JFX0VYUE9SVCB1aW50OF90IHRvVUludDgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OworV0VCQ09SRV9FWFBPUlQgaW50MTZfdCB0b0ludDE2KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpK
U1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIHVpbnQxNl90IHRvVUludDE2KEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpKU1ZhbHVlKTsKK1dFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NChKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2
NChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7CisKK0pTQzo6SlNWYWx1ZSBqc0RhdGUo
SlNDOjpFeGVjU3RhdGUqLCBkb3VibGUgdmFsdWUpOworCisvLyBOYU4gaWYgdGhlIHZhbHVlIGNh
bid0IGJlIGNvbnZlcnRlZCB0byBhIGRhdGUuCitkb3VibGUgdmFsdWVUb0RhdGUoSlNDOjpFeGVj
U3RhdGUqLCBKU0M6OkpTVmFsdWUpOworCisvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgcGFzc2VkIG9i
amVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9mIHRoZSBXZWJJREwg
c3BlYy4KK0pTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSwgdW5zaWduZWQmIGxlbmd0aCk7CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyJik7CitKU0M6OkpT
VmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFy
cmF5QnVmZmVyVmlldyYpOworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RP
TUdsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXIqKTsKK0pTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QXJyYXlCdWZmZXJWaWV3
Kik7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgUmVmPFQ+JiYpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIFJl
ZlB0cjxUPiYmKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBWZWN0b3I8VD4mKTsKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBjb25zdCBWZWN0b3I8UmVmUHRyPFQ+PiYpOworSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IEpTQzo6UHJpdmF0
ZU5hbWUmKTsKKworSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNTdGF0ZSYsIEpT
RE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpKU1ZhbHVlKTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEpT
Qzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVj
dCYsIGNvbnN0IFQmKTsKK0pTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3Rh
dGUmKTsKKworUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Bvc3NpYmx5U2hhcmVkQXJy
YXlCdWZmZXJWaWV3KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6SW50OEFy
cmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwor
UmVmUHRyPEpTQzo6SW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDE2QXJyYXkoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQzMkFycmF5PiB0b1Bvc3NpYmx5U2hh
cmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQ4
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUp
OworUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50OENs
YW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQxNkFy
cmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
CitSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQzMkFycmF5KEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Bvc3Np
Ymx5U2hhcmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpT
Qzo6RmxvYXQ2NEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBK
U0M6OkpTVmFsdWUpOworCitSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5zaGFyZWRB
cnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpJbnQ4
QXJyYXk+IHRvVW5zaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQ
dHI8SlNDOjpJbnQxNkFycmF5PiB0b1Vuc2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiwgSlNDOjpK
U1ZhbHVlKTsKK1JlZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOworUmVmUHRyPEpTQzo6VWludDhBcnJheT4gdG9VbnNoYXJl
ZFVpbnQ4QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpVaW50OENs
YW1wZWRBcnJheT4gdG9VbnNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpT
VmFsdWUpOworUmVmUHRyPEpTQzo6VWludDE2QXJyYXk+IHRvVW5zaGFyZWRVaW50MTZBcnJheShK
U0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKK1JlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hh
cmVkVWludDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7CitSZWZQdHI8SlNDOjpGbG9h
dDMyQXJyYXk+IHRvVW5zaGFyZWRGbG9hdDMyQXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7
CitSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvVW5zaGFyZWRGbG9hdDY0QXJyYXkoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEpTVHlw
ZT4gVmVjdG9yPFJlZjxUPj4gdG9SZWZOYXRpdmVBcnJheShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6
SlNWYWx1ZSk7CitXRUJDT1JFX0VYUE9SVCBib29sIGhhc0l0ZXJhdG9yTWV0aG9kKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKKworZW51bSBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiB7
IERvTm90UmVwb3J0U2VjdXJpdHlFcnJvciwgTG9nU2VjdXJpdHlFcnJvciwgVGhyb3dTZWN1cml0
eUVycm9yIH07CituYW1lc3BhY2UgQmluZGluZ1NlY3VyaXR5IHsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYsIFQmKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBUKiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNT
dGF0ZSYsIFQqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBFeGNlcHRpb25PcjxUKj4gY2hl
Y2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBFeGNlcHRpb25PcjxUKj4mJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JO
b2RlKEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uT3I8VCY+JiYpOworICAgIGJvb2wgc2hvdWxk
QWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSosIERPTVdpbmRvdyYsIFNlY3Vy
aXR5UmVwb3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7CisgICAgYm9vbCBzaG91bGRB
bGxvd0FjY2Vzc1RvRE9NV2luZG93KEpTQzo6RXhlY1N0YXRlJiwgRE9NV2luZG93JiwgU3RyaW5n
JiBtZXNzYWdlKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNT
dGF0ZSosIEZyYW1lKiwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gPSBMb2dTZWN1cml0eUVycm9y
KTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkV4ZWNTdGF0ZSYsIEZy
YW1lJiwgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9Ob2Rl
KEpTQzo6RXhlY1N0YXRlJiwgTm9kZSopOworfTsKKwordm9pZCBwcmludEVycm9yTWVzc2FnZUZv
ckZyYW1lKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworU3RyaW5nIHByb3BlcnR5
TmFtZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKK0F0b21pY1N0cmluZyBwcm9wZXJ0eU5h
bWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFtZSk7CisKK3RlbXBsYXRlPEpTQzo6TmF0
aXZlRnVuY3Rpb24sIGludCBsZW5ndGg+IEpTQzo6RW5jb2RlZEpTVmFsdWUgbm9uQ2FjaGluZ1N0
YXRpY0Z1bmN0aW9uR2V0dGVyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSwg
SlNDOjpQcm9wZXJ0eU5hbWUpOworCisKK2VudW0gY2xhc3MgQ2FzdGVkVGhpc0Vycm9yQmVoYXZp
b3IgeyBUaHJvdywgUmV0dXJuRWFybHksIFJlamVjdFByb21pc2UsIEFzc2VydCB9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBKU0NsYXNzPgorc3RydWN0IEJpbmRpbmdDYWxsZXIgeworICAgIHVzaW5n
IEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9uID0gYm9vbChKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3Mm
LCBKU0M6OkpTVmFsdWUsIEpTQzo6VGhyb3dTY29wZSYpOworICAgIHVzaW5nIEF0dHJpYnV0ZUdl
dHRlckZ1bmN0aW9uID0gSlNDOjpKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlJiwgSlNDbGFzcyYsIEpT
Qzo6VGhyb3dTY29wZSYpOworICAgIHVzaW5nIE9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlND
OjpFbmNvZGVkSlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBKU0M6OlRocm93U2Nv
cGUmKTsKKyAgICB1c2luZyBQcm9taXNlT3BlcmF0aW9uQ2FsbGVyRnVuY3Rpb24gPSBKU0M6OkVu
Y29kZWRKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNDbGFzcyosIFJlZjxEZWZlcnJlZFByb21p
c2U+JiYsIEpTQzo6VGhyb3dTY29wZSYpOworCisgICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RGb3JB
dHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkVuY29kZWRKU1ZhbHVlKTsKKyAgICBzdGF0
aWMgSlNDbGFzcyogY2FzdEZvck9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSYpOworCisgICAgdGVt
cGxhdGU8UHJvbWlzZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uIG9wZXJhdGlvbkNhbGxlciwgQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
cjo6UmVqZWN0UHJvbWlzZT4KKyAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBjYWxsUHJv
bWlzZU9wZXJhdGlvbihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIFJlZjxEZWZlcnJlZFByb21pc2U+
JiYgcHJvbWlzZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChzdGF0ZSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUoc3RhdGUtPnZtKCkpOworICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJh
dGlvbigqc3RhdGUpOworICAgICAgICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OkFzc2VydCAmJiBVTkxJS0VMWSghdGhpc09iamVjdCkpCisgICAgICAgICAgICBy
ZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKHByb21pc2UuZ2V0KCksIEpTQ2xh
c3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25OYW1lKTsKKyAgICAgICAgQVNTRVJUKHRo
aXNPYmplY3QpOworICAgICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IEpTQ2xhc3M6OmluZm8oKSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0b3Ig
dGhlIGJpbmRpbmcgZ2VuZXJhdGVkIGNvZGUgdG8gdXNlIHJlZmVyZW5jZXMgZm9yIHN0YXRlIGFu
ZCB0aGlzT2JqZWN0LgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uQ2FsbGVyKHN0YXRlLCB0aGlz
T2JqZWN0LCBXVEZNb3ZlKHByb21pc2UpLCB0aHJvd1Njb3BlKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTxPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNF
cnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93
PgorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxPcGVyYXRpb24oSlNDOjpFeGVj
U3RhdGUqIHN0YXRlLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHN0YXRlKTsKKyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRShzdGF0ZS0+dm0oKSk7CisgICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yT3Bl
cmF0aW9uKCpzdGF0ZSk7CisgICAgICAgIGlmIChzaG91bGRUaHJvdyAhPSBDYXN0ZWRUaGlzRXJy
b3JCZWhhdmlvcjo6QXNzZXJ0ICYmIFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgeworICAgICAgICAg
ICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdGhyb3dUaGlzVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29w
ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOworICAgICAgICAg
ICAgLy8gRm9yIGN1c3RvbSBwcm9taXNlLXJldHVybmluZyBvcGVyYXRpb25zCisgICAgICAgICAg
ICByZXR1cm4gcmVqZWN0UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFzczo6
aW5mbygpLT5jbGFzc05hbWUsIG9wZXJhdGlvbk5hbWUpOworICAgICAgICB9CisgICAgICAgIEFT
U0VSVCh0aGlzT2JqZWN0KTsKKyAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBKU0NsYXNzOjppbmZvKCkpOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJl
ZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVyYXRlZCBjb2RlIHRvIHVzZSByZWZlcmVuY2VzIGZvciBz
dGF0ZSBhbmQgdGhpc09iamVjdC4KKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkNhbGxlcihzdGF0
ZSwgdGhpc09iamVjdCwgdGhyb3dTY29wZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8QXR0cmli
dXRlU2V0dGVyRnVuY3Rpb24gc2V0dGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91bGRU
aHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KKyAgICBzdGF0aWMgYm9vbCBz
ZXRBdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRo
aXNWYWx1ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIGNvbnN0IGNoYXIqIGF0
dHJpYnV0ZU5hbWUpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhdGUpOworICAgICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsKKyAgICAgICAg
YXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JBdHRyaWJ1dGUoKnN0YXRlLCB0aGlzVmFsdWUpOwor
ICAgICAgICBpZiAoVU5MSUtFTFkoIXRoaXNPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIChz
aG91bGRUaHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpID8gdGhyb3dTZXR0
ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJvd1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFt
ZSwgYXR0cmlidXRlTmFtZSkgOiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHNldHRlcigqc3RhdGUs
ICp0aGlzT2JqZWN0LCBKU0M6OkpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCB0aHJvd1Nj
b3BlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiBnZXR0
ZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3I6OlRocm93PgorICAgIHN0YXRpYyBKU0M6OkVuY29kZWRKU1ZhbHVlIGF0dHJpYnV0
ZShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTQzo6RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBj
b25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXRlKTsK
KyAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0o
KSk7CisgICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0Rm9yQXR0cmlidXRlKCpzdGF0ZSwg
dGhpc1ZhbHVlKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkgeworICAgICAg
ICAgICAgaWYgKHNob3VsZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdykK
KyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCB0aHJv
d1Njb3BlLCBKU0NsYXNzOjppbmZvKCktPmNsYXNzTmFtZSwgYXR0cmlidXRlTmFtZSk7CisgICAg
ICAgICAgICBpZiAoc2hvdWxkVGhyb3cgPT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVj
dFByb21pc2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2VXaXRoR2V0dGVy
VHlwZUVycm9yKCpzdGF0ZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5h
bWUpOworICAgICAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNVbmRl
ZmluZWQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2Rl
KGdldHRlcigqc3RhdGUsICp0aGlzT2JqZWN0LCB0aHJvd1Njb3BlKSk7CisgICAgfQorfTsKKwor
Ly8gRXhjZXB0aW9uT3IgaGFuZGxpbmcuCit2b2lkIHByb3BhZ2F0ZUV4Y2VwdGlvbihKU0M6OkV4
ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPHZvaWQ+JiYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUds
b2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+JiYpOwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3Rh
dGUmLCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbk9yPFQ+
JiYgdmFsdWUpOworCisvLyBJbmxpbmUgZnVuY3Rpb25zIGFuZCB0ZW1wbGF0ZSBkZWZpbml0aW9u
cy4KKworaW5saW5lIEpTQzo6U3RydWN0dXJlKiBET01Db25zdHJ1Y3Rvck9iamVjdDo6Y3JlYXRl
U3RydWN0dXJlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIEpTQzo6U3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBKU0M6OlR5cGVJbmZvKEpTQzo6T2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCitpbmxpbmUgRE9NQ29uc3Ry
dWN0b3JPYmplY3Q6OkRPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQzo6U3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgOiBKU0RPTU9iamVjdChz
dHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3sKK30KKworaW5saW5lIFN0cmluZyBET01Db25zdHJ1
Y3Rvck9iamVjdDo6Y2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0KikKK3sKKyAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJGdW5jdGlvbiIpOworfQorCitpbmxpbmUgRE9NQ29uc3RydWN0b3JKU0J1aWx0
aW5PYmplY3Q6OkRPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0KEpTQzo6U3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCisgICAgOiBET01Db25z
dHJ1Y3Rvck9iamVjdChzdHJ1Y3R1cmUsIGdsb2JhbE9iamVjdCkKK3sKK30KKworaW5saW5lIEpT
Qzo6SlNGdW5jdGlvbiogRE9NQ29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OmluaXRpYWxpemVG
dW5jdGlvbigpCit7CisgICAgcmV0dXJuIG1faW5pdGlhbGl6ZUZ1bmN0aW9uLmdldCgpOworfQor
CitpbmxpbmUgdm9pZCBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdDo6c2V0SW5pdGlhbGl6
ZUZ1bmN0aW9uKEpTQzo6Vk0mIHZtLCBKU0M6OkpTRnVuY3Rpb24mIGZ1bmN0aW9uKQoreworICAg
IG1faW5pdGlhbGl6ZUZ1bmN0aW9uLnNldCh2bSwgdGhpcywgJmZ1bmN0aW9uKTsKK30KKworaW5s
aW5lIEpTRE9NR2xvYmFsT2JqZWN0KiBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBl
KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIC8vIEZJWE1FOiBDYWxsZXJzIHRvIHRoaXMg
ZnVuY3Rpb24gc2hvdWxkIGJlIHVzaW5nIHRoZSBnbG9iYWwgb2JqZWN0CisgICAgLy8gZnJvbSB3
aGljaCB0aGUgb2JqZWN0IGlzIGJlaW5nIGNyZWF0ZWQsIGluc3RlYWQgb2YgYXNzdW1pbmcgdGhl
IGxleGljYWwgb25lLgorICAgIC8vIGUuZy4gc3ViZnJhbWUuZG9jdW1lbnQuYm9keSBzaG91bGQg
dXNlIHRoZSBzdWJmcmFtZSdzIGdsb2JhbCBvYmplY3QsIG5vdCB0aGUgbGV4aWNhbCBvbmUuCisg
ICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxp
bmUgSlNDOjpTdHJ1Y3R1cmUqIGdldERPTVN0cnVjdHVyZShKU0M6OlZNJiB2bSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCkKK3sKKyAgICBpZiAoSlNDOjpTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGdldENhY2hlZERPTVN0cnVjdHVyZShnbG9iYWxPYmplY3QsIFdyYXBwZXJDbGFzczo6
aW5mbygpKSkKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICByZXR1cm4gY2FjaGVET01T
dHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3M6OmNyZWF0ZVN0cnVjdHVyZSh2bSwg
Jmdsb2JhbE9iamVjdCwgV3JhcHBlckNsYXNzOjpjcmVhdGVQcm90b3R5cGUodm0sICZnbG9iYWxP
YmplY3QpKSwgV3JhcHBlckNsYXNzOjppbmZvKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBX
cmFwcGVyQ2xhc3M+IGlubGluZSBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVj
dHVyZShKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlv
biBpcyB3cm9uZy4gSXQgdXNlcyB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdCBmb3IgY3JlYXRpbmcg
dGhlIHByb3RvdHlwZSBzdHJ1Y3R1cmUuCisgICAgcmV0dXJuIGdldERPTVN0cnVjdHVyZTxXcmFw
cGVyQ2xhc3M+KGV4ZWMtPnZtKCksICpkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBl
KGV4ZWMpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgSlND
OjpKU09iamVjdCogZ2V0RE9NUHJvdG90eXBlKEpTQzo6Vk0mIHZtLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAgcmV0dXJuIEpTQzo6anNDYXN0PEpTQzo6SlNPYmpl
Y3QqPihhc09iamVjdChnZXRET01TdHJ1Y3R1cmU8V3JhcHBlckNsYXNzPih2bSwgKkpTQzo6anND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFsT2JqZWN0KSktPnN0b3JlZFByb3RvdHlwZSgp
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEpTQ2xhc3M+IGlubGluZSBKU0M6OkVuY29kZWRK
U1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNGdW5j
dGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
KQoreworICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IEpTQ2xhc3M6OmNyZWF0ZShnZXRET01T
dHJ1Y3R1cmU8SlNDbGFzcz4oZ2xvYmFsT2JqZWN0LnZtKCksIGdsb2JhbE9iamVjdCksICZnbG9i
YWxPYmplY3QpOworICAgIGNhbGxGdW5jdGlvbldpdGhDdXJyZW50QXJndW1lbnRzKHN0YXRlLCAq
b2JqZWN0LCBpbml0aWFsaXplRnVuY3Rpb24pOworICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVu
Y29kZShvYmplY3QpOworfQorCitpbmxpbmUgSlNDOjpXZWFrSGFuZGxlT3duZXIqIHdyYXBwZXJP
d25lcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKikKK3sKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyKj4od29ybGQudm0o
KS5tX3R5cGVkQXJyYXlDb250cm9sbGVyLmdldCgpKS0+d3JhcHBlck93bmVyKCk7Cit9CisKK2lu
bGluZSB2b2lkKiB3cmFwcGVyS2V5KEpTQzo6QXJyYXlCdWZmZXIqIGRvbU9iamVjdCkKK3sKKyAg
ICByZXR1cm4gZG9tT2JqZWN0OworfQorCitpbmxpbmUgSlNET01PYmplY3QqIGdldElubGluZUNh
Y2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9pZCopIHsgcmV0dXJuIG51bGxwdHI7IH0K
K2lubGluZSBib29sIHNldElubGluZUNhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiwgdm9p
ZCosIEpTRE9NT2JqZWN0KiwgSlNDOjpXZWFrSGFuZGxlT3duZXIqKSB7IHJldHVybiBmYWxzZTsg
fQoraW5saW5lIGJvb2wgY2xlYXJJbmxpbmVDYWNoZWRXcmFwcGVyKERPTVdyYXBwZXJXb3JsZCYs
IHZvaWQqLCBKU0RPTU9iamVjdCopIHsgcmV0dXJuIGZhbHNlOyB9CisKK2lubGluZSBKU0RPTU9i
amVjdCogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBTY3Jp
cHRXcmFwcGFibGUqIGRvbU9iamVjdCkKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb21PYmplY3QtPndyYXBwZXIoKTsK
K30KKworaW5saW5lIEpTQzo6SlNBcnJheUJ1ZmZlciogZ2V0SW5saW5lQ2FjaGVkV3JhcHBlcihE
T01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBidWZmZXIpCit7CisgICAg
aWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gYnVmZmVyLT5tX3dyYXBwZXIuZ2V0KCk7Cit9CisKK2lubGluZSBib29sIHNldElubGluZUNh
Y2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2NyaXB0V3JhcHBhYmxlKiBkb21P
YmplY3QsIEpTRE9NT2JqZWN0KiB3cmFwcGVyLCBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBl
ck93bmVyKQoreworICAgIGlmICghd29ybGQuaXNOb3JtYWwoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGRvbU9iamVjdC0+c2V0V3JhcHBlcih3cmFwcGVyLCB3cmFwcGVyT3duZXIsICZ3
b3JsZCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIHNldElubGluZUNhY2hl
ZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgSlNDOjpBcnJheUJ1ZmZlciogZG9tT2Jq
ZWN0LCBKU0M6OkpTQXJyYXlCdWZmZXIqIHdyYXBwZXIsIEpTQzo6V2Vha0hhbmRsZU93bmVyKiB3
cmFwcGVyT3duZXIpCit7CisgICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgZG9tT2JqZWN0LT5tX3dyYXBwZXIgPSBKU0M6OldlYWs8SlNDOjpKU0Fy
cmF5QnVmZmVyPih3cmFwcGVyLCB3cmFwcGVyT3duZXIsICZ3b3JsZCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2lubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVy
V29ybGQmIHdvcmxkLCBTY3JpcHRXcmFwcGFibGUqIGRvbU9iamVjdCwgSlNET01PYmplY3QqIHdy
YXBwZXIpCit7CisgICAgaWYgKCF3b3JsZC5pc05vcm1hbCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgZG9tT2JqZWN0LT5jbGVhcldyYXBwZXIod3JhcHBlcik7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2lubGluZSBib29sIGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcihET01XcmFwcGVy
V29ybGQmIHdvcmxkLCBKU0M6OkFycmF5QnVmZmVyKiBkb21PYmplY3QsIEpTQzo6SlNBcnJheUJ1
ZmZlciogd3JhcHBlcikKK3sKKyAgICBpZiAoIXdvcmxkLmlzTm9ybWFsKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB3ZWFrQ2xlYXIoZG9tT2JqZWN0LT5tX3dyYXBwZXIsIHdyYXBwZXIp
OworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5s
aW5lIEpTQzo6SlNPYmplY3QqIGdldENhY2hlZFdyYXBwZXIoRE9NV3JhcHBlcldvcmxkJiB3b3Js
ZCwgRE9NQ2xhc3MmIGRvbU9iamVjdCkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGdldElu
bGluZUNhY2hlZFdyYXBwZXIod29ybGQsICZkb21PYmplY3QpKQorICAgICAgICByZXR1cm4gd3Jh
cHBlcjsKKyAgICByZXR1cm4gd29ybGQubV93cmFwcGVycy5nZXQod3JhcHBlcktleSgmZG9tT2Jq
ZWN0KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzLCB0eXBlbmFtZSBXcmFwcGVy
Q2xhc3M+IGlubGluZSB2b2lkIGNhY2hlV3JhcHBlcihET01XcmFwcGVyV29ybGQmIHdvcmxkLCBE
T01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCit7CisgICAgSlNDOjpX
ZWFrSGFuZGxlT3duZXIqIG93bmVyID0gd3JhcHBlck93bmVyKHdvcmxkLCBkb21PYmplY3QpOwor
ICAgIGlmIChzZXRJbmxpbmVDYWNoZWRXcmFwcGVyKHdvcmxkLCBkb21PYmplY3QsIHdyYXBwZXIs
IG93bmVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdlYWtBZGQod29ybGQubV93cmFwcGVycywg
d3JhcHBlcktleShkb21PYmplY3QpLCBKU0M6OldlYWs8SlNDOjpKU09iamVjdD4od3JhcHBlciwg
b3duZXIsICZ3b3JsZCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcywgdHlwZW5h
bWUgV3JhcHBlckNsYXNzPiBpbmxpbmUgdm9pZCB1bmNhY2hlV3JhcHBlcihET01XcmFwcGVyV29y
bGQmIHdvcmxkLCBET01DbGFzcyogZG9tT2JqZWN0LCBXcmFwcGVyQ2xhc3MqIHdyYXBwZXIpCit7
CisgICAgaWYgKGNsZWFySW5saW5lQ2FjaGVkV3JhcHBlcih3b3JsZCwgZG9tT2JqZWN0LCB3cmFw
cGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdlYWtSZW1vdmUod29ybGQubV93cmFwcGVycywg
d3JhcHBlcktleShkb21PYmplY3QpLCB3cmFwcGVyKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
RE9NQ2xhc3MsIHR5cGVuYW1lIFQ+IGlubGluZSBhdXRvIGNyZWF0ZVdyYXBwZXIoSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYgZG9tT2JqZWN0KSAtPiB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5hbWUg
SlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46OnR5
cGUKK3sKKyAgICB1c2luZyBXcmFwcGVyQ2xhc3MgPSB0eXBlbmFtZSBKU0RPTVdyYXBwZXJDb252
ZXJ0ZXJUcmFpdHM8RE9NQ2xhc3M+OjpXcmFwcGVyQ2xhc3M7CisKKyAgICBBU1NFUlQoIWdldENh
Y2hlZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKTsKKyAgICBhdXRv
KiBkb21PYmplY3RQdHIgPSBkb21PYmplY3QucHRyKCk7CisgICAgYXV0byogd3JhcHBlciA9IFdy
YXBwZXJDbGFzczo6Y3JlYXRlKGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KGdsb2JhbE9i
amVjdC0+dm0oKSwgKmdsb2JhbE9iamVjdCksIGdsb2JhbE9iamVjdCwgV1RGTW92ZShkb21PYmpl
Y3QpKTsKKyAgICBjYWNoZVdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3RQ
dHIsIHdyYXBwZXIpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBET01DbGFzcywgdHlwZW5hbWUgVD4gaW5saW5lIGF1dG8gY3JlYXRlV3JhcHBlcihKU0RPTUds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWY8VD4mJiBkb21PYmplY3QpIC0+IHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX3NhbWU8RE9NQ2xhc3MsIFQ+Ojp2YWx1ZSwgdHlwZW5h
bWUgSlNET01XcmFwcGVyQ29udmVydGVyVHJhaXRzPERPTUNsYXNzPjo6V3JhcHBlckNsYXNzKj46
OnR5cGUKK3sKKyAgICByZXR1cm4gY3JlYXRlV3JhcHBlcjxET01DbGFzcz4oZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8RE9NQ2xhc3M+KFdURk1vdmUoZG9tT2JqZWN0KSkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBET01DbGFzcz4gaW5saW5lIEpTQzo6SlNWYWx1ZSB3cmFw
KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RE9NQ2xhc3MmIGRvbU9iamVjdCkKK3sKKyAgICBpZiAoYXV0byogd3JhcHBlciA9IGdldENhY2hl
ZFdyYXBwZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBkb21PYmplY3QpKQorICAgICAgICByZXR1
cm4gd3JhcHBlcjsKKyAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2Jq
ZWN0LCBSZWY8RE9NQ2xhc3M+KGRvbU9iamVjdCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBK
U0NsYXNzPiBpbmxpbmUgSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgc3Rh
dGUpCit7CisgICAgYXV0byB0aGlzVmFsdWUgPSBzdGF0ZS50aGlzVmFsdWUoKTsKKyAgICBhdXRv
IGNhc3RlZFRoaXMgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0NsYXNzKj4oc3RhdGUudm0oKSwgdGhp
c1ZhbHVlKTsKKyAgICBBU1NFUlQoY2FzdGVkVGhpcyk7CisgICAgcmV0dXJuICpjYXN0ZWRUaGlz
OworfQorCitpbmxpbmUgaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rYXkpCit7CisgICAgZG91YmxlIG51bWJl
ciA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgIG9rYXkgPSBzdGQ6OmlzZmluaXRlKG51bWJl
cik7CisgICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOworfQorCisvLyBWYWxpZGF0ZXMg
dGhhdCB0aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4x
LjEzIG9mIHRoZSBXZWJJREwgc3BlYy4KK2lubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVu
Y2UoSlNDOjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQmIGxl
bmd0aCkKK3sKKyAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSB2
YWx1ZS5nZXRPYmplY3QoKTsKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICB0aHJvd1NlcXVl
bmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgSlNDOjpKU1ZhbHVlIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoJmV4ZWMsIGV4
ZWMucHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgbnVsbHB0cik7CisKKyAgICBpZiAobGVuZ3RoVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkg
eworICAgICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgbGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9VSW50
MzIoJmV4ZWMpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworCisg
ICAgcmV0dXJuIG9iamVjdDsKK30KKworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJh
eUJ1ZmZlciYgYnVmZmVyKQoreworICAgIGlmIChhdXRvIHJlc3VsdCA9IGdldENhY2hlZFdyYXBw
ZXIoZ2xvYmFsT2JqZWN0LT53b3JsZCgpLCBidWZmZXIpKQorICAgICAgICByZXR1cm4gcmVzdWx0
OworCisgICAgLy8gVGhlIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSBmdW5jdGlvbiB3aWxsIHJlZ2lz
dGVyIHRoZSB3cmFwcGVyIGluIGZpbmlzaENyZWF0aW9uLgorICAgIHJldHVybiBKU0M6OkpTQXJy
YXlCdWZmZXI6OmNyZWF0ZShzdGF0ZS0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0
cnVjdHVyZShidWZmZXIuc2hhcmluZ01vZGUoKSksICZidWZmZXIpOworfQorCitpbmxpbmUgSlND
OjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3JiB2aWV3KQoreworICAgIHJldHVy
biB2aWV3LndyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCk7Cit9CisKK2lubGluZSBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIEpTQzo6anNOdWxsKCk7CisgICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2Jh
bE9iamVjdCwgKmJ1ZmZlcik7Cit9CisKK2lubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogc3RhdGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpB
cnJheUJ1ZmZlclZpZXcqIHZpZXcpCit7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKKyAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqdmll
dyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVm
PFQ+JiYgcHRyKQoreworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdl
dCgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBS
ZWZQdHI8VD4mJiBwdHIpCit7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBw
dHIuZ2V0KCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVl
IHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IFZlY3RvcjxUPiYgdmVjdG9yKQoreworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgIEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51
bGxwdHIsIHZlY3Rvci5zaXplKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpT
Qzo6SlNWYWx1ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7
ICsraSkgeworICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHZlY3RvcltpXSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBhcnJheTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8
UmVmUHRyPFQ+PiYgdmVjdG9yKQoreworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpT
Qzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZl
Y3Rvci5zaXplKCkpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1
ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgewor
ICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIHZlY3RvcltpXS5nZXQoKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBKU0M6OkpTVmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBhcnJheTsKK30KKworaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCosIGNvbnN0IEpTQzo6UHJpdmF0ZU5hbWUmIHByaXZhdGVOYW1lKQoreworICAgIHJldHVy
biBKU0M6OlN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHByaXZhdGVOYW1lLnVpZCgpKTsKK30K
KworaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRl
LCBKU0RPTUdsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
Y3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB2YWx1ZSwgZmFsc2UpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6
OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0
IFQmIHZhbHVlKQoreworICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3Rh
dGUsIHRvSlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZSksIGZhbHNlKTsKK30KKworaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQor
eworICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIEpTQzo6anNV
bmRlZmluZWQoKSwgdHJ1ZSk7Cit9CisKK2lubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZp
ZXc+IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNhc3Q8SlND
OjpKU0FycmF5QnVmZmVyVmlldyo+KHZtLCB2YWx1ZSk7CisgICAgaWYgKCF3cmFwcGVyKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gd3JhcHBlci0+cG9zc2libHlTaGFyZWRJ
bXBsKCk7Cit9CisKK2lubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5zaGFy
ZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBhdXRvIHJlc3VsdCA9IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcodm0sIHZhbHVl
KTsKKyAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPmlzU2hhcmVkKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSBSZWZQdHI8SlNDOjpJ
bnQ4QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3
PEpTQzo6SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQx
NkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpJbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpJbnQz
MkFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpJbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50
OEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1Zh
bHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8
SlNDOjpVaW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpVaW50
OENsYW1wZWRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5h
dGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KK2lu
bGluZSBSZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQxNkFycmF5
KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJs
eVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0K
K2lubGluZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQzMkFy
cmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3Nz
aWJseVNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7
IH0KK2lubGluZSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9h
dDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0
b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KK2lubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFy
ZWRGbG9hdDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
SlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0b3I+
KHZtLCB2YWx1ZSk7IH0KKworaW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9VbnNoYXJl
ZEludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6
OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsg
fQoraW5saW5lIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFycmF5KEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5h
dGl2ZVR5cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJl
ZlB0cjxKU0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBK
U0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmll
dzxKU0M6OkludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVp
bnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4
QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFy
cmF5PiB0b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWlu
dDhDbGFtcGVkQWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQx
NkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDE2
QWRhcHRvcj4odm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0
b1Vuc2hhcmVkVWludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDMyQWRhcHRvcj4o
dm0sIHZhbHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJl
ZEZsb2F0MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBK
U0M6OnRvVW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0sIHZh
bHVlKTsgfQoraW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZsb2F0
NjRBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRv
VW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVlKTsg
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1Q+IGlubGluZSBWZWN0b3I8UmVm
PFQ+PiB0b1JlZk5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVl
IHZhbHVlKQoreworICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkp
IHsKKyAgICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOworICAgICAg
ICByZXR1cm4geyB9OworICAgIH0KKworICAgIFZlY3RvcjxSZWY8VD4+IHJlc3VsdDsKKyAgICBm
b3JFYWNoSW5JdGVyYWJsZSgmc3RhdGUsIHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKKyAgICAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGlmIChqc1ZhbHVl
LmluaGVyaXRzKHZtLCBKU1Q6OmluZm8oKSkpIHsKKyAgICAgICAgICAgIGF1dG8qIG9iamVjdCA9
IEpTVDo6dG9XcmFwcGVkKHZtLCBqc1ZhbHVlKTsKKyAgICAgICAgICAgIEFTU0VSVChvYmplY3Qp
OworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqb2JqZWN0KTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcigqc3RhdGUsIHNjb3BlKTsKKyAg
ICB9KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgU3RyaW5nIHByb3BlcnR5TmFt
ZVRvU3RyaW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBBU1NFUlQo
IXByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKTsKKyAgICByZXR1cm4gcHJvcGVydHlOYW1lLnVpZCgp
ID8gcHJvcGVydHlOYW1lLnVpZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKK30KKwor
aW5saW5lIEF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgcmV0dXJuIEF0b21pY1N0cmluZyhwcm9wZXJ0
eU5hbWUudWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlkKCkgOiBwcm9wZXJ0eU5hbWUucHVibGljTmFt
ZSgpKTsKK30KKwordGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbiwg
aW50IGxlbmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25H
ZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNv
ZGUoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLCBsZW5ndGgsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5hdGl2ZUZ1bmN0
aW9uKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpF
eGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbiYm
IGV4Y2VwdGlvbikKK3sKKyAgICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuOworICAgIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKHN0YXRlLCB0aHJvd1Njb3Bl
LCBXVEZNb3ZlKGV4Y2VwdGlvbikpOworfQorCitpbmxpbmUgdm9pZCBwcm9wYWdhdGVFeGNlcHRp
b24oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4
Y2VwdGlvbk9yPHZvaWQ+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4
Y2VwdGlvbigpKSkKKyAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3Bl
LCB2YWx1ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBp
bmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2Jh
bE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2Vw
dGlvbk9yPFQ+JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlv
bigpKSkgeworICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZh
bHVlLnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorICAg
IHJldHVybiB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZh
bHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRv
SlNOZXdseUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYg
Z2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFQ+
JiYgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewor
ICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVh
c2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorICAgIHJldHVybiB0
b0pTTmV3bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVy
blZhbHVlKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1Nl
Y3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQmIG5v
ZGUpCit7CisgICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCAmbm9kZSkg
PyAmbm9kZSA6IG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBC
aW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgVCogbm9kZSkKK3sKKyAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUs
IG5vZGUpID8gbm9kZSA6IG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGlu
ZSBFeGNlcHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQqPiYmIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZS5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVhc2VFeGNl
cHRpb24oKTsKKyAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIHZhbHVlLnJl
bGVhc2VSZXR1cm5WYWx1ZSgpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEV4
Y2VwdGlvbk9yPFQqPiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6
RXhlY1N0YXRlJiBzdGF0ZSwgRXhjZXB0aW9uT3I8VCY+JiYgdmFsdWUpCit7CisgICAgaWYgKHZh
bHVlLmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gdmFsdWUucmVsZWFzZUV4Y2VwdGlv
bigpOworICAgIHJldHVybiBjaGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgdmFsdWUucmVsZWFz
ZVJldHVyblZhbHVlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdyYXBwZXJDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmgJKHJldmlzaW9uIDIxMTM1MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlckNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDEyOSArMjQsMjAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRE9NV3JhcHBlcldv
cmxkLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbk9y
LmgiCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBw
ZXIuaCIKICNpbmNsdWRlICJKU0R5bmFtaWNEb3duY2FzdC5oIgogI2luY2x1ZGUgIlNjcmlwdFdy
YXBwYWJsZS5oIgogI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZUlubGluZXMuaCIKICNpbmNsdWRl
ICJXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlIDxjc3RkZGVmPgotI2lu
Y2x1ZGUgPGhlYXAvSGVhcElubGluZXMuaD4KLSNpbmNsdWRlIDxoZWFwL1Nsb3RWaXNpdG9ySW5s
aW5lcy5oPgogI2luY2x1ZGUgPGhlYXAvV2Vhay5oPgogI2luY2x1ZGUgPGhlYXAvV2Vha0lubGlu
ZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL0F1eGlsaWFyeUJhcnJpZXJJbmxpbmVzLmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRp
b25zLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CiAjaW5jbHVkZSA8cnVudGltZS9K
U0FycmF5QnVmZmVyLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNP
YmplY3RJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+Ci0jaW5j
bHVkZSA8cnVudGltZS9Mb29rdXAuaD4KLSNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVj
dG9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg+CiAjaW5jbHVkZSA8
cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJh
eXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1dyaXRlQmFycmllci5oPgotI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0dldFB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotLy8gRklYTUU6IFdlIGNvdWxkIG1h
a2UgdGhpcyBmaWxlIGEgbG90IGVhc2llciB0byByZWFkIGJ5IHB1dHRpbmcgYWxsIGZ1bmN0aW9u
IGRlY2xhcmF0aW9ucyBhdCB0aGUgdG9wLAotLy8gYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zIGJl
bG93LCBldmVuIGZvciB0ZW1wbGF0ZSBhbmQgaW5saW5lIGZ1bmN0aW9ucy4KLQotbmFtZXNwYWNl
IEpTQyB7Ci1jbGFzcyBKU0Z1bmN0aW9uOwotfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIENhY2hlZFNjcmlwdDsKLWNsYXNzIERlZmVycmVkUHJvbWlzZTsKLWNsYXNzIERPTVdpbmRv
dzsKLWNsYXNzIEZyYW1lOwotY2xhc3MgVVJMOwotY2xhc3MgTm9kZTsKLQotc3RydWN0IEV4Y2Vw
dGlvbkRldGFpbHMgewotICAgIFN0cmluZyBtZXNzYWdlOwotICAgIGludCBsaW5lTnVtYmVyIHsg
MCB9OwotICAgIGludCBjb2x1bW5OdW1iZXIgeyAwIH07Ci0gICAgU3RyaW5nIHNvdXJjZVVSTDsK
LX07Ci0KLS8vIEJhc2UgY2xhc3MgZm9yIGFsbCBjb25zdHJ1Y3RvciBvYmplY3RzIGluIHRoZSBK
U0MgYmluZGluZ3MuCi1jbGFzcyBET01Db25zdHJ1Y3Rvck9iamVjdCA6IHB1YmxpYyBKU0RPTU9i
amVjdCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0RPTU9iamVjdCBCYXNlOwotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
SlNDOjpJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBKU0M6OkltcGxlbWVudHNEZWZhdWx0SGFzSW5z
dGFuY2UgfCBKU0M6OlR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YTsKLSAgICBzdGF0aWMgSlND
OjpTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0M6OlZNJiwgSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6SlNWYWx1ZSk7Ci0KLXByb3RlY3RlZDoKLSAgICBET01Db25zdHJ1Y3Rvck9iamVj
dChKU0M6OlN0cnVjdHVyZSosIEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0KLSAgICBzdGF0aWMgU3Ry
aW5nIGNsYXNzTmFtZShjb25zdCBKU09iamVjdCopOwotICAgIHN0YXRpYyBKU0M6OkNhbGxUeXBl
IGdldENhbGxEYXRhKEpTQ2VsbCosIEpTQzo6Q2FsbERhdGEmKTsKLX07Ci0KLWNsYXNzIERPTUNv
bnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsK
LXB1YmxpYzoKLSAgICB0eXBlZGVmIERPTUNvbnN0cnVjdG9yT2JqZWN0IEJhc2U7Ci0KLXByb3Rl
Y3RlZDoKLSAgICBET01Db25zdHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSos
IEpTRE9NR2xvYmFsT2JqZWN0Jik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0M6
OkpTQ2VsbCosIEpTQzo6U2xvdFZpc2l0b3ImKTsKLQotICAgIEpTQzo6SlNGdW5jdGlvbiogaW5p
dGlhbGl6ZUZ1bmN0aW9uKCk7Ci0gICAgdm9pZCBzZXRJbml0aWFsaXplRnVuY3Rpb24oSlNDOjpW
TSYsIEpTQzo6SlNGdW5jdGlvbiYpOwotCi1wcml2YXRlOgotICAgIEpTQzo6V3JpdGVCYXJyaWVy
PEpTQzo6SlNGdW5jdGlvbj4gbV9pbml0aWFsaXplRnVuY3Rpb247Ci19OwotCi1ET01XaW5kb3cm
IGNhbGxlckRPTVdpbmRvdyhKU0M6OkV4ZWNTdGF0ZSopOwotRE9NV2luZG93JiBhY3RpdmVET01X
aW5kb3coSlNDOjpFeGVjU3RhdGUqKTsKLURPTVdpbmRvdyYgZmlyc3RET01XaW5kb3coSlNDOjpF
eGVjU3RhdGUqKTsKLQotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSByZXBvcnRE
ZXByZWNhdGVkR2V0dGVyRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBjaGFyKiBpbnRlcmZh
Y2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQg
cmVwb3J0RGVwcmVjYXRlZFNldHRlckVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciog
aW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci0KLXZvaWQgdGhyb3dB
dHRyaWJ1dGVUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25z
dCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBj
aGFyKiBleHBlY3RlZFR5cGUpOwotV0VCQ09SRV9FWFBPUlQgYm9vbCB0aHJvd1NldHRlclR5cGVF
cnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIqIGludGVy
ZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotCi12b2lkIHRocm93QXJyYXlF
bGVtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lk
IHRocm93RGF0YUNsb25lRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsK
LXZvaWQgdGhyb3dET01TeW50YXhFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29w
ZSYpOyAvLyBOb3QgdGhlIHNhbWUgYXMgYSBKYXZhU2NyaXB0IHN5bnRheCBlcnJvci4KLXZvaWQg
dGhyb3dJbmRleFNpemVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYpOwot
dm9pZCB0aHJvd0ludmFsaWRTdGF0ZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Nj
b3BlJiwgY29uc3QgY2hhciogbWVzc2FnZSk7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHRocm93Tm9u
RmluaXRlVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lk
IHRocm93Tm90U3VwcG9ydGVkRXJyb3IoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUm
KTsKLXZvaWQgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpOwotdm9pZCB0aHJvd1NlY3VyaXR5RXJyb3Io
SlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
OwotV0VCQ09SRV9FWFBPUlQgdm9pZCB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKEpTQzo6RXhlY1N0
YXRlJiwgSlNDOjpUaHJvd1Njb3BlJik7Ci12b2lkIHRocm93VHlwZU1pc21hdGNoRXJyb3IoSlND
OjpFeGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmKTsKLQotV0VCQ09SRV9FWFBPUlQgSlNDOjpF
bmNvZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRW51bUVycm9yKEpTQzo6RXhlY1N0YXRl
JiwgSlNDOjpUaHJvd1Njb3BlJiwgdW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciog
YXJndW1lbnROYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZXhwZWN0ZWRWYWx1ZXMpOwotSlNDOjpFbmNv
ZGVkSlNWYWx1ZSB0aHJvd0FyZ3VtZW50TXVzdEJlRnVuY3Rpb25FcnJvcihKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6VGhyb3dTY29wZSYsIHVuc2lnbmVkIGFyZ3VtZW50SW5kZXgsIGNvbnN0IGNoYXIq
IGFyZ3VtZW50TmFtZSwgY29uc3QgY2hhciogZnVuY3Rpb25JbnRlcmZhY2VOYW1lLCBjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUpOwotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0
aHJvd0FyZ3VtZW50VHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwg
dW5zaWduZWQgYXJndW1lbnRJbmRleCwgY29uc3QgY2hhciogYXJndW1lbnROYW1lLCBjb25zdCBj
aGFyKiBmdW5jdGlvbkludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29u
c3QgY2hhciogZXhwZWN0ZWRUeXBlKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFs
dWUgdGhyb3dSZXF1aXJlZE1lbWJlclR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhy
b3dTY29wZSYsIGNvbnN0IGNoYXIqIG1lbWJlck5hbWUsIGNvbnN0IGNoYXIqIGRpY3Rpb25hcnlO
YW1lLCBjb25zdCBjaGFyKiBleHBlY3RlZFR5cGUpOwotSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJv
d0NvbnN0cnVjdG9yU2NyaXB0RXhlY3V0aW9uQ29udGV4dFVuYXZhaWxhYmxlRXJyb3IoSlNDOjpF
eGVjU3RhdGUmLCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lKTsK
LQotU3RyaW5nIG1ha2VHZXR0ZXJUeXBlRXJyb3JNZXNzYWdlKGNvbnN0IGNoYXIqIGludGVyZmFj
ZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotU3RyaW5nIG1ha2VUaGlzVHlwZUVy
cm9yTWVzc2FnZShjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBhdHRyaWJ1
dGVOYW1lKTsKLQotV0VCQ09SRV9FWFBPUlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd0dldHRl
clR5cGVFcnJvcihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIGNvbnN0IGNoYXIq
IGludGVyZmFjZU5hbWUsIGNvbnN0IGNoYXIqIGF0dHJpYnV0ZU5hbWUpOwotV0VCQ09SRV9FWFBP
UlQgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aHJvd1RoaXNUeXBlRXJyb3IoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OlRocm93U2NvcGUmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUpOwotCi1XRUJDT1JFX0VYUE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJl
amVjdFByb21pc2VXaXRoR2V0dGVyVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hh
ciogaW50ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogYXR0cmlidXRlTmFtZSk7Ci1XRUJDT1JFX0VY
UE9SVCBKU0M6OkVuY29kZWRKU1ZhbHVlIHJlamVjdFByb21pc2VXaXRoVGhpc1R5cGVFcnJvcihE
ZWZlcnJlZFByb21pc2UmLCBjb25zdCBjaGFyKiBpbnRlcmZhY2VOYW1lLCBjb25zdCBjaGFyKiBv
cGVyYXRpb25OYW1lKTsKLVdFQkNPUkVfRVhQT1JUIEpTQzo6RW5jb2RlZEpTVmFsdWUgcmVqZWN0
UHJvbWlzZVdpdGhUaGlzVHlwZUVycm9yKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgY2hhciogaW50
ZXJmYWNlTmFtZSwgY29uc3QgY2hhciogb3BlcmF0aW9uTmFtZSk7Ci0KIFdFQkNPUkVfRVhQT1JU
IEpTQzo6U3RydWN0dXJlKiBnZXRDYWNoZWRET01TdHJ1Y3R1cmUoSlNET01HbG9iYWxPYmplY3Qm
LCBjb25zdCBKU0M6OkNsYXNzSW5mbyopOwogV0VCQ09SRV9FWFBPUlQgSlNDOjpTdHJ1Y3R1cmUq
IGNhY2hlRE9NU3RydWN0dXJlKEpTRE9NR2xvYmFsT2JqZWN0JiwgSlNDOjpTdHJ1Y3R1cmUqLCBj
b25zdCBKU0M6OkNsYXNzSW5mbyopOwogCkBAIC0xNTQsMTAgKzQ1LDYgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OlN0cgogdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNs
YXNzPiBKU0M6OlN0cnVjdHVyZSogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZShKU0M6OkV4ZWNT
dGF0ZSopOwogdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTT2JqZWN0KiBn
ZXRET01Qcm90b3R5cGUoSlNDOjpWTSYsIEpTQzo6SlNHbG9iYWxPYmplY3QqKTsKIAotdm9pZCBj
YWxsRnVuY3Rpb25XaXRoQ3VycmVudEFyZ3VtZW50cyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNP
YmplY3QmIHRoaXNPYmplY3QsIEpTQzo6SlNGdW5jdGlvbiYpOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBKU0NsYXNzPiBKU0M6OkVuY29kZWRKU1ZhbHVlIGNyZWF0ZUpTQnVpbHRpbihKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6SlNGdW5jdGlvbiYgaW5pdGlhbGl6ZUZ1bmN0aW9uLCBKU0RPTUdsb2JhbE9i
amVjdCYpOwotCiBKU0M6OldlYWtIYW5kbGVPd25lciogd3JhcHBlck93bmVyKERPTVdyYXBwZXJX
b3JsZCYsIEpTQzo6QXJyYXlCdWZmZXIqKTsKIHZvaWQqIHdyYXBwZXJLZXkoSlNDOjpBcnJheUJ1
ZmZlciopOwogCkBAIC0xODIsMjUwICs2OSw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNz
LCB0eXBlbmFtZSBUPiAKIAogdGVtcGxhdGU8dHlwZW5hbWUgRE9NQ2xhc3M+IEpTQzo6SlNWYWx1
ZSB3cmFwKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBET01DbGFzcyYpOwog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBKU0NsYXNzJiBjYXN0VGhpc1ZhbHVlKEpTQzo6
RXhlY1N0YXRlJik7Ci0KLXZvaWQgYWRkSW1wdXJlUHJvcGVydHkoY29uc3QgQXRvbWljU3RyaW5n
Jik7Ci0KLWNvbnN0IEpTQzo6SGFzaFRhYmxlJiBnZXRIYXNoVGFibGVGb3JHbG9iYWxEYXRhKEpT
Qzo6Vk0mLCBjb25zdCBKU0M6Okhhc2hUYWJsZSYgc3RhdGljVGFibGUpOwotCi1TdHJpbmcgcmV0
cmlldmVFcnJvck1lc3NhZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlZNJiwgSlNDOjpKU1ZhbHVl
IGV4Y2VwdGlvbiwgSlNDOjpDYXRjaFNjb3BlJik7Ci1XRUJDT1JFX0VYUE9SVCB2b2lkIHJlcG9y
dEV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSBleGNlcHRpb24sIENhY2hl
ZFNjcmlwdCogPSBudWxscHRyKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwb3J0RXhjZXB0aW9u
KEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpFeGNlcHRpb24qLCBDYWNoZWRTY3JpcHQqID0gbnVsbHB0
ciwgRXhjZXB0aW9uRGV0YWlscyogPSBudWxscHRyKTsKLXZvaWQgcmVwb3J0Q3VycmVudEV4Y2Vw
dGlvbihKU0M6OkV4ZWNTdGF0ZSopOwotCi1KU0M6OkpTVmFsdWUgY3JlYXRlRE9NRXhjZXB0aW9u
KEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uJiYpOwotSlNDOjpKU1ZhbHVlIGNyZWF0ZURPTUV4
Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSosIEV4Y2VwdGlvbkNvZGUsIGNvbnN0IFN0cmluZyYpOwot
Ci0vLyBDb252ZXJ0IGEgRE9NIGltcGxlbWVudGF0aW9uIGV4Y2VwdGlvbiBpbnRvIGEgSmF2YVNj
cmlwdCBleGNlcHRpb24gaW4gdGhlIGV4ZWN1dGlvbiBzdGF0ZS4KLXZvaWQgcHJvcGFnYXRlRXhj
ZXB0aW9uKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpUaHJvd1Njb3BlJiwgRXhjZXB0aW9uJiYpOwot
V0VCQ09SRV9FWFBPUlQgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb25TbG93UGF0aChKU0M6OkV4ZWNT
dGF0ZSYsIEpTQzo6VGhyb3dTY29wZSYsIEV4Y2VwdGlvbiYmKTsKLQotSlNDOjpKU1ZhbHVlIGpz
U3RyaW5nKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgVVJMJik7IC8vIGVtcHR5IGlmIHRoZSBVUkwg
aXMgbnVsbAotCi1KU0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0
ZSosIGNvbnN0IFN0cmluZyYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIHN0cmluZyBpcyBudWxsCi1K
U0M6OkpTVmFsdWUganNTdHJpbmdPclVuZGVmaW5lZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFVS
TCYpOyAvLyB1bmRlZmluZWQgaWYgdGhlIFVSTCBpcyBudWxsCi0KLS8vIFNlZSBKYXZhU2NyaXB0
Q29yZSBmb3IgZXhwbGFuYXRpb246IFNob3VsZCBiZSB1c2VkIGZvciBhbnkgc3RyaW5nIHRoYXQg
aXMgYWxyZWFkeSBvd25lZCBieSBhbm90aGVyCi0vLyBvYmplY3QsIHRvIGxldCB0aGUgZW5naW5l
IGtub3cgdGhhdCBjb2xsZWN0aW5nIHRoZSBKU1N0cmluZyB3cmFwcGVyIGlzIHVubGlrZWx5IHRv
IHNhdmUgbWVtb3J5LgotSlNDOjpKU1ZhbHVlIGpzT3duZWRTdHJpbmdPck51bGwoSlNDOjpFeGVj
U3RhdGUqLCBjb25zdCBTdHJpbmcmKTsKLQotU3RyaW5nIHByb3BlcnR5TmFtZVRvU3RyaW5nKEpT
Qzo6UHJvcGVydHlOYW1lKTsKLQotQXRvbWljU3RyaW5nIHByb3BlcnR5TmFtZVRvQXRvbWljU3Ry
aW5nKEpTQzo6UHJvcGVydHlOYW1lKTsKLQotV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGlkZW50aWZp
ZXJUb0J5dGVTdHJpbmcoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsK
LVdFQkNPUkVfRVhQT1JUIFN0cmluZyB2YWx1ZVRvQnl0ZVN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYs
IEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcgaWRlbnRpZmllclRvVVNWU3Ry
aW5nKEpTQzo6RXhlY1N0YXRlJiwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Ci1XRUJDT1JFX0VY
UE9SVCBTdHJpbmcgdmFsdWVUb1VTVlN0cmluZyhKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1
ZSk7Ci0KLWludDMyX3QgZmluaXRlSW50MzJWYWx1ZShKU0M6OkpTVmFsdWUsIEpTQzo6RXhlY1N0
YXRlKiwgYm9vbCYgb2theSk7Ci0KLS8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbnZlcnQg
dmFsdWVzIHRvIGludGVnZXJzIGFzIHBlciB0aGUgV2ViSURMIHNwZWNpZmljYXRpb24uCi0vLyBU
aGUgY29udmVyc2lvbiBmYWlscyBpZiB0aGUgdmFsdWUgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBh
IG51bWJlciBvciwgaWYgRW5mb3JjZVJhbmdlIGlzIHNwZWNpZmllZCwKLS8vIHRoZSB2YWx1ZSBp
cyBvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgZGVzdGluYXRpb24gaW50ZWdlciB0eXBlLgotCi1X
RUJDT1JFX0VYUE9SVCBpbnQ4X3QgdG9JbnQ4RW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwg
SlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdG9VSW50OEVuZm9yY2VSYW5n
ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90
IHRvSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VC
Q09SRV9FWFBPUlQgdWludDE2X3QgdG9VSW50MTZFbmZvcmNlUmFuZ2UoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgaW50MzJfdCB0b0ludDMyRW5mb3JjZVJh
bmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIHVpbnQz
Ml90IHRvVUludDMyRW5mb3JjZVJhbmdlKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsK
LVdFQkNPUkVfRVhQT1JUIGludDY0X3QgdG9JbnQ2NEVuZm9yY2VSYW5nZShKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50NjRfdCB0b1VJbnQ2NEVuZm9y
Y2VSYW5nZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVfRVhQT1JU
IGludDhfdCB0b0ludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJD
T1JFX0VYUE9SVCB1aW50OF90IHRvVUludDhDbGFtcChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCBpbnQxNl90IHRvSW50MTZDbGFtcChKU0M6OkV4ZWNTdGF0
ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JFX0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNkNsYW1w
KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JUIGludDMyX3Qg
dG9JbnQzMkNsYW1wKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQ
T1JUIHVpbnQzMl90IHRvVUludDMyQ2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUp
OwotV0VCQ09SRV9FWFBPUlQgaW50NjRfdCB0b0ludDY0Q2xhbXAoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjRDbGFtcChKU0M6
OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci0KLVdFQkNPUkVfRVhQT1JUIGludDhfdCB0b0lu
dDgoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDhf
dCB0b1VJbnQ4KEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlKTsKLVdFQkNPUkVfRVhQT1JU
IGludDE2X3QgdG9JbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7Ci1XRUJDT1JF
X0VYUE9SVCB1aW50MTZfdCB0b1VJbnQxNihKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNWYWx1ZSk7
Ci1XRUJDT1JFX0VYUE9SVCBpbnQ2NF90IHRvSW50NjQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpT
VmFsdWUpOwotV0VCQ09SRV9FWFBPUlQgdWludDY0X3QgdG9VSW50NjQoSlNDOjpFeGVjU3RhdGUm
LCBKU0M6OkpTVmFsdWUpOwotCi1KU0M6OkpTVmFsdWUganNEYXRlKEpTQzo6RXhlY1N0YXRlKiwg
ZG91YmxlIHZhbHVlKTsKLQotLy8gTmFOIGlmIHRoZSB2YWx1ZSBjYW4ndCBiZSBjb252ZXJ0ZWQg
dG8gYSBkYXRlLgotZG91YmxlIHZhbHVlVG9EYXRlKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1Zh
bHVlKTsKLQotLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5j
ZSB0eXBlIHBlciBzZWN0aW9uIDQuMS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCi1KU0M6OkpTT2Jq
ZWN0KiB0b0pTU2VxdWVuY2UoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIHVuc2lnbmVk
JiBsZW5ndGgpOwotCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xv
YmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlciYpOwotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpBcnJheUJ1ZmZlclZpZXcmKTsK
LUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBK
U0M6OkFycmF5QnVmZmVyKik7Ci1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkFycmF5QnVmZmVyVmlldyopOwotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9i
amVjdCosIFJlZjxUPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBSZWZQdHI8VD4mJik7Ci10ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0KiwgY29uc3QgVmVjdG9yPFQ+Jik7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBK
U0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0KiwgY29u
c3QgVmVjdG9yPFJlZlB0cjxUPj4mKTsKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiwgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBKU0M6OlByaXZhdGVOYW1lJik7Ci0KLUpTQzo6
SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmLCBKU0RPTUdsb2JhbE9iamVjdCYs
IEpTQzo6SlNWYWx1ZSk7Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBKU0M6OkpTVmFsdWUgdG9KU0l0
ZXJhdG9yKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBjb25zdCBUJik7Ci1K
U0M6OkpTVmFsdWUgdG9KU0l0ZXJhdG9yRW5kKEpTQzo6RXhlY1N0YXRlJik7Ci0KLVJlZlB0cjxK
U0M6OkFycmF5QnVmZmVyVmlldz4gdG9Qb3NzaWJseVNoYXJlZEFycmF5QnVmZmVyVmlldyhKU0M6
OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9Qb3NzaWJseVNo
YXJlZEludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkludDE2
QXJyYXk+IHRvUG9zc2libHlTaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUp
OwotUmVmUHRyPEpTQzo6SW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEludDMyQXJyYXkoSlND
OjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50OEFycmF5PiB0b1Bvc3NpYmx5
U2hhcmVkVWludDhBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OlVp
bnQ4Q2xhbXBlZEFycmF5PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpW
TSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNo
YXJlZFVpbnQxNkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWlu
dDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRVaW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1Zh
bHVlKTsKLVJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZEZsb2F0MzJB
cnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4g
dG9Qb3NzaWJseVNoYXJlZEZsb2F0NjRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLQot
UmVmUHRyPEpTQzo6QXJyYXlCdWZmZXJWaWV3PiB0b1Vuc2hhcmVkQXJyYXlCdWZmZXJWaWV3KEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50OEFycmF5PiB0b1Vuc2hhcmVk
SW50OEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6SW50MTZBcnJh
eT4gdG9VbnNoYXJlZEludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNWYWx1ZSk7Ci1SZWZQdHI8
SlNDOjpJbnQzMkFycmF5PiB0b1Vuc2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiwgSlNDOjpKU1Zh
bHVlKTsKLVJlZlB0cjxKU0M6OlVpbnQ4QXJyYXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6
Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6VWludDhDbGFtcGVkQXJyYXk+IHRvVW5z
aGFyZWRVaW50OENsYW1wZWRBcnJheShKU0M6OlZNJiwgSlNDOjpKU1ZhbHVlKTsKLVJlZlB0cjxK
U0M6OlVpbnQxNkFycmF5PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYsIEpTQzo6SlNW
YWx1ZSk7Ci1SZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9VbnNoYXJlZFVpbnQzMkFycmF5KEpT
Qzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6RmxvYXQzMkFycmF5PiB0b1Vuc2hh
cmVkRmxvYXQzMkFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUpOwotUmVmUHRyPEpTQzo6Rmxv
YXQ2NEFycmF5PiB0b1Vuc2hhcmVkRmxvYXQ2NEFycmF5KEpTQzo6Vk0mLCBKU0M6OkpTVmFsdWUp
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1R5cGU+IFZlY3RvcjxSZWY8VD4+
IHRvUmVmTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUpOwotV0VCQ09S
RV9FWFBPUlQgYm9vbCBoYXNJdGVyYXRvck1ldGhvZChKU0M6OkV4ZWNTdGF0ZSYsIEpTQzo6SlNW
YWx1ZSk7Ci0KLWVudW0gU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24geyBEb05vdFJlcG9ydFNlY3Vy
aXR5RXJyb3IsIExvZ1NlY3VyaXR5RXJyb3IsIFRocm93U2VjdXJpdHlFcnJvciB9OwotbmFtZXNw
YWNlIEJpbmRpbmdTZWN1cml0eSB7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCogY2hlY2tT
ZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gVCogY2hlY2tTZWN1cml0eUZvck5vZGUoSlNDOjpFeGVjU3RhdGUmLCBUKik7Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gRXhjZXB0aW9uT3I8VCo+IGNoZWNrU2VjdXJpdHlGb3JOb2Rl
KEpTQzo6RXhlY1N0YXRlJiwgRXhjZXB0aW9uT3I8VCo+JiYpOwotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IEV4Y2VwdGlvbk9yPFQqPiBjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0
ZSYsIEV4Y2VwdGlvbk9yPFQmPiYmKTsKLSAgICBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01X
aW5kb3coSlNDOjpFeGVjU3RhdGUqLCBET01XaW5kb3cmLCBTZWN1cml0eVJlcG9ydGluZ09wdGlv
biA9IExvZ1NlY3VyaXR5RXJyb3IpOwotICAgIGJvb2wgc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdp
bmRvdyhKU0M6OkV4ZWNTdGF0ZSYsIERPTVdpbmRvdyYsIFN0cmluZyYgbWVzc2FnZSk7Ci0gICAg
Ym9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUqLCBGcmFtZSosIFNl
Y3VyaXR5UmVwb3J0aW5nT3B0aW9uID0gTG9nU2VjdXJpdHlFcnJvcik7Ci0gICAgYm9vbCBzaG91
bGRBbGxvd0FjY2Vzc1RvRnJhbWUoSlNDOjpFeGVjU3RhdGUmLCBGcmFtZSYsIFN0cmluZyYgbWVz
c2FnZSk7Ci0gICAgYm9vbCBzaG91bGRBbGxvd0FjY2Vzc1RvTm9kZShKU0M6OkV4ZWNTdGF0ZSYs
IE5vZGUqKTsKLX07Ci0KLXZvaWQgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZShGcmFtZSosIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0KLVN0cmluZyBwcm9wZXJ0eU5hbWVUb1N0cmluZyhKU0M6
OlByb3BlcnR5TmFtZSk7Ci1BdG9taWNTdHJpbmcgcHJvcGVydHlOYW1lVG9BdG9taWNTdHJpbmco
SlNDOjpQcm9wZXJ0eU5hbWUpOwotCi10ZW1wbGF0ZTxKU0M6Ok5hdGl2ZUZ1bmN0aW9uLCBpbnQg
bGVuZ3RoPiBKU0M6OkVuY29kZWRKU1ZhbHVlIG5vbkNhY2hpbmdTdGF0aWNGdW5jdGlvbkdldHRl
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlOYW1l
KTsKLQotCi1lbnVtIGNsYXNzIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yIHsgVGhyb3csIFJldHVy
bkVhcmx5LCBSZWplY3RQcm9taXNlLCBBc3NlcnQgfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgSlND
bGFzcz4KLXN0cnVjdCBCaW5kaW5nQ2FsbGVyIHsKLSAgICB1c2luZyBBdHRyaWJ1dGVTZXR0ZXJG
dW5jdGlvbiA9IGJvb2woSlNDOjpFeGVjU3RhdGUmLCBKU0NsYXNzJiwgSlNDOjpKU1ZhbHVlLCBK
U0M6OlRocm93U2NvcGUmKTsKLSAgICB1c2luZyBBdHRyaWJ1dGVHZXR0ZXJGdW5jdGlvbiA9IEpT
Qzo6SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYsIEpTQ2xhc3MmLCBKU0M6OlRocm93U2NvcGUmKTsK
LSAgICB1c2luZyBPcGVyYXRpb25DYWxsZXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUo
SlNDOjpFeGVjU3RhdGUqLCBKU0NsYXNzKiwgSlNDOjpUaHJvd1Njb3BlJik7Ci0gICAgdXNpbmcg
UHJvbWlzZU9wZXJhdGlvbkNhbGxlckZ1bmN0aW9uID0gSlNDOjpFbmNvZGVkSlNWYWx1ZShKU0M6
OkV4ZWNTdGF0ZSosIEpTQ2xhc3MqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCBKU0M6OlRocm93
U2NvcGUmKTsKLQotICAgIHN0YXRpYyBKU0NsYXNzKiBjYXN0Rm9yQXR0cmlidXRlKEpTQzo6RXhl
Y1N0YXRlJiwgSlNDOjpFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgc3RhdGljIEpTQ2xhc3MqIGNhc3RG
b3JPcGVyYXRpb24oSlNDOjpFeGVjU3RhdGUmKTsKLQotICAgIHRlbXBsYXRlPFByb21pc2VPcGVy
YXRpb25DYWxsZXJGdW5jdGlvbiBvcGVyYXRpb25DYWxsZXIsIENhc3RlZFRoaXNFcnJvckJlaGF2
aW9yIHNob3VsZFRocm93ID0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OlJlamVjdFByb21pc2U+
Ci0gICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUgY2FsbFByb21pc2VPcGVyYXRpb24oSlND
OjpFeGVjU3RhdGUqIHN0YXRlLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNvbnN0
IGNoYXIqIG9wZXJhdGlvbk5hbWUpCi0gICAgewotICAgICAgICBBU1NFUlQoc3RhdGUpOwotICAg
ICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHN0YXRlLT52bSgpKTsK
LSAgICAgICAgYXV0byogdGhpc09iamVjdCA9IGNhc3RGb3JPcGVyYXRpb24oKnN0YXRlKTsKLSAg
ICAgICAgaWYgKHNob3VsZFRocm93ICE9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQg
JiYgVU5MSUtFTFkoIXRoaXNPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21p
c2VXaXRoVGhpc1R5cGVFcnJvcihwcm9taXNlLmdldCgpLCBKU0NsYXNzOjppbmZvKCktPmNsYXNz
TmFtZSwgb3BlcmF0aW9uTmFtZSk7Ci0gICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0KTsKLSAgICAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBKU0NsYXNzOjppbmZvKCkp
OwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoZSBiaW5kaW5nIGdlbmVy
YXRlZCBjb2RlIHRvIHVzZSByZWZlcmVuY2VzIGZvciBzdGF0ZSBhbmQgdGhpc09iamVjdC4KLSAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvbkNhbGxlcihzdGF0ZSwgdGhpc09iamVjdCwgV1RGTW92ZShw
cm9taXNlKSwgdGhyb3dTY29wZSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8T3BlcmF0aW9uQ2Fs
bGVyRnVuY3Rpb24gb3BlcmF0aW9uQ2FsbGVyLCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvciBzaG91
bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4KLSAgICBzdGF0aWMgSlND
OjpFbmNvZGVkSlNWYWx1ZSBjYWxsT3BlcmF0aW9uKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgY29u
c3QgY2hhciogb3BlcmF0aW9uTmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSk7Ci0g
ICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkp
OwotICAgICAgICBhdXRvKiB0aGlzT2JqZWN0ID0gY2FzdEZvck9wZXJhdGlvbigqc3RhdGUpOwot
ICAgICAgICBpZiAoc2hvdWxkVGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2Vy
dCAmJiBVTkxJS0VMWSghdGhpc09iamVjdCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRUaHJv
dyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsIHRocm93U2NvcGUsIEpTQ2xhc3M6OmluZm8o
KS0+Y2xhc3NOYW1lLCBvcGVyYXRpb25OYW1lKTsKLSAgICAgICAgICAgIC8vIEZvciBjdXN0b20g
cHJvbWlzZS1yZXR1cm5pbmcgb3BlcmF0aW9ucwotICAgICAgICAgICAgcmV0dXJuIHJlamVjdFBy
b21pc2VXaXRoVGhpc1R5cGVFcnJvcigqc3RhdGUsIEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1l
LCBvcGVyYXRpb25OYW1lKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQodGhpc09iamVjdCk7
Ci0gICAgICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgSlNDbGFzczo6
aW5mbygpKTsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWZhY3RvciB0aGUgYmluZGlu
ZyBnZW5lcmF0ZWQgY29kZSB0byB1c2UgcmVmZXJlbmNlcyBmb3Igc3RhdGUgYW5kIHRoaXNPYmpl
Y3QuCi0gICAgICAgIHJldHVybiBvcGVyYXRpb25DYWxsZXIoc3RhdGUsIHRoaXNPYmplY3QsIHRo
cm93U2NvcGUpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPEF0dHJpYnV0ZVNldHRlckZ1bmN0aW9u
IHNldHRlciwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRUaGlz
RXJyb3JCZWhhdmlvcjo6VGhyb3c+Ci0gICAgc3RhdGljIGJvb2wgc2V0QXR0cmlidXRlKEpTQzo6
RXhlY1N0YXRlKiBzdGF0ZSwgSlNDOjpFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIEpTQzo6RW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBjb25zdCBjaGFyKiBhdHRyaWJ1dGVOYW1lKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKHN0YXRlKTsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRShzdGF0ZS0+dm0oKSk7Ci0gICAgICAgIGF1dG8qIHRoaXNPYmplY3Qg
PSBjYXN0Rm9yQXR0cmlidXRlKCpzdGF0ZSwgdGhpc1ZhbHVlKTsKLSAgICAgICAgaWYgKFVOTElL
RUxZKCF0aGlzT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiAoc2hvdWxkVGhyb3cgPT0gQ2Fz
dGVkVGhpc0Vycm9yQmVoYXZpb3I6OlRocm93KSA/IHRocm93U2V0dGVyVHlwZUVycm9yKCpzdGF0
ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUp
IDogZmFsc2U7Ci0gICAgICAgIHJldHVybiBzZXR0ZXIoKnN0YXRlLCAqdGhpc09iamVjdCwgSlND
OjpKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgdGhyb3dTY29wZSk7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8QXR0cmlidXRlR2V0dGVyRnVuY3Rpb24gZ2V0dGVyLCBDYXN0ZWRUaGlzRXJy
b3JCZWhhdmlvciBzaG91bGRUaHJvdyA9IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpUaHJvdz4K
LSAgICBzdGF0aWMgSlNDOjpFbmNvZGVkSlNWYWx1ZSBhdHRyaWJ1dGUoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlLCBKU0M6OkVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgY2hhciogYXR0cmli
dXRlTmFtZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSk7Ci0gICAgICAgIGF1dG8gdGhy
b3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUoc3RhdGUtPnZtKCkpOwotICAgICAgICBhdXRv
KiB0aGlzT2JqZWN0ID0gY2FzdEZvckF0dHJpYnV0ZSgqc3RhdGUsIHRoaXNWYWx1ZSk7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWSghdGhpc09iamVjdCkpIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRU
aHJvdyA9PSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3cpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgdGhyb3dTY29wZSwgSlNDbGFzczo6
aW5mbygpLT5jbGFzc05hbWUsIGF0dHJpYnV0ZU5hbWUpOwotICAgICAgICAgICAgaWYgKHNob3Vs
ZFRocm93ID09IENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNlKQotICAgICAg
ICAgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlV2l0aEdldHRlclR5cGVFcnJvcigqc3RhdGUs
IEpTQ2xhc3M6OmluZm8oKS0+Y2xhc3NOYW1lLCBhdHRyaWJ1dGVOYW1lKTsKLSAgICAgICAgICAg
IHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzVW5kZWZpbmVkKCkpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShnZXR0ZXIoKnN0YXRlLCAq
dGhpc09iamVjdCwgdGhyb3dTY29wZSkpOwotICAgIH0KLX07Ci0KLS8vIEV4Y2VwdGlvbk9yIGhh
bmRsaW5nLgotdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3RhdGUmLCBKU0M6OlRo
cm93U2NvcGUmLCBFeGNlcHRpb25Pcjx2b2lkPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxPYmplY3QmLCBKU0M6
OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmKTsKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IEpT
Qzo6SlNWYWx1ZSB0b0pTTmV3bHlDcmVhdGVkKEpTQzo6RXhlY1N0YXRlJiwgSlNET01HbG9iYWxP
YmplY3QmLCBKU0M6OlRocm93U2NvcGUmLCBFeGNlcHRpb25PcjxUPiYmIHZhbHVlKTsKIAogLy8g
SW5saW5lIGZ1bmN0aW9ucyBhbmQgdGVtcGxhdGUgZGVmaW5pdGlvbnMuCiAKLWlubGluZSBKU0M6
OlN0cnVjdHVyZSogRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShKU0M6OlZN
JiB2bSwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgcHJv
dG90eXBlKQotewotICAgIHJldHVybiBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgSlNDOjpUeXBlSW5mbyhKU0M6Ok9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKLX0KLQotaW5saW5lIERPTUNvbnN0cnVjdG9yT2JqZWN0OjpET01D
b25zdHJ1Y3Rvck9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUdsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogSlNET01PYmplY3Qoc3RydWN0dXJlLCBnbG9iYWxP
YmplY3QpCi17Ci19Ci0KLWlubGluZSBTdHJpbmcgRE9NQ29uc3RydWN0b3JPYmplY3Q6OmNsYXNz
TmFtZShjb25zdCBKU09iamVjdCopCi17Ci0gICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiRnVuY3Rp
b24iKTsKLX0KLQotaW5saW5lIERPTUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0OjpET01Db25z
dHJ1Y3RvckpTQnVpbHRpbk9iamVjdChKU0M6OlN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0RPTUds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQotICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3Qoc3Ry
dWN0dXJlLCBnbG9iYWxPYmplY3QpCi17Ci19Ci0KLWlubGluZSBKU0M6OkpTRnVuY3Rpb24qIERP
TUNvbnN0cnVjdG9ySlNCdWlsdGluT2JqZWN0Ojppbml0aWFsaXplRnVuY3Rpb24oKQotewotICAg
IHJldHVybiBtX2luaXRpYWxpemVGdW5jdGlvbi5nZXQoKTsKLX0KLQotaW5saW5lIHZvaWQgRE9N
Q29uc3RydWN0b3JKU0J1aWx0aW5PYmplY3Q6OnNldEluaXRpYWxpemVGdW5jdGlvbihKU0M6OlZN
JiB2bSwgSlNDOjpKU0Z1bmN0aW9uJiBmdW5jdGlvbikKLXsKLSAgICBtX2luaXRpYWxpemVGdW5j
dGlvbi5zZXQodm0sIHRoaXMsICZmdW5jdGlvbik7Ci19Ci0KIGlubGluZSBKU0RPTUdsb2JhbE9i
amVjdCogZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZShKU0M6OkV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICAvLyBGSVhNRTogQ2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIHNob3VsZCBi
ZSB1c2luZyB0aGUgZ2xvYmFsIG9iamVjdApAQCAtNDUyLDEzICs5OCw2IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFdyYXBwZXJDbGFzcz4gaW5saW5lIEoKICAgICByZXR1cm4gSlNDOjpqc0Nhc3Q8SlND
OjpKU09iamVjdCo+KGFzT2JqZWN0KGdldERPTVN0cnVjdHVyZTxXcmFwcGVyQ2xhc3M+KHZtLCAq
SlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihnbG9iYWxPYmplY3QpKS0+c3RvcmVkUHJv
dG90eXBlKCkpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgSlNDbGFzcz4gaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUgY3JlYXRlSlNCdWlsdGluKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlND
OjpKU0Z1bmN0aW9uJiBpbml0aWFsaXplRnVuY3Rpb24sIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QpCi17Ci0gICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gSlNDbGFzczo6Y3JlYXRl
KGdldERPTVN0cnVjdHVyZTxKU0NsYXNzPihnbG9iYWxPYmplY3Qudm0oKSwgZ2xvYmFsT2JqZWN0
KSwgJmdsb2JhbE9iamVjdCk7Ci0gICAgY2FsbEZ1bmN0aW9uV2l0aEN1cnJlbnRBcmd1bWVudHMo
c3RhdGUsICpvYmplY3QsIGluaXRpYWxpemVGdW5jdGlvbik7Ci0gICAgcmV0dXJuIEpTQzo6SlNW
YWx1ZTo6ZW5jb2RlKG9iamVjdCk7Ci19Ci0KIGlubGluZSBKU0M6OldlYWtIYW5kbGVPd25lciog
d3JhcHBlck93bmVyKERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIEpTQzo6QXJyYXlCdWZmZXIqKQog
ewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIqPih3
b3JsZC52bSgpLm1fdHlwZWRBcnJheUNvbnRyb2xsZXIuZ2V0KCkpLT53cmFwcGVyT3duZXIoKTsK
QEAgLTU2NCwyNjIgKzIwMyw0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIERPTUNsYXNzPiBpbmxpbmUg
SlNDOjoKICAgICByZXR1cm4gdG9KU05ld2x5Q3JlYXRlZChzdGF0ZSwgZ2xvYmFsT2JqZWN0LCBS
ZWY8RE9NQ2xhc3M+KGRvbU9iamVjdCkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNz
PiBpbmxpbmUgSlNDbGFzcyYgY2FzdFRoaXNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUpCi17
Ci0gICAgYXV0byB0aGlzVmFsdWUgPSBzdGF0ZS50aGlzVmFsdWUoKTsKLSAgICBhdXRvIGNhc3Rl
ZFRoaXMgPSBqc0R5bmFtaWNEb3duY2FzdDxKU0NsYXNzKj4oc3RhdGUudm0oKSwgdGhpc1ZhbHVl
KTsKLSAgICBBU1NFUlQoY2FzdGVkVGhpcyk7Ci0gICAgcmV0dXJuICpjYXN0ZWRUaGlzOwotfQot
Ci1pbmxpbmUgaW50MzJfdCBmaW5pdGVJbnQzMlZhbHVlKEpTQzo6SlNWYWx1ZSB2YWx1ZSwgSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIGJvb2wmIG9rYXkpCi17Ci0gICAgZG91YmxlIG51bWJlciA9IHZh
bHVlLnRvTnVtYmVyKGV4ZWMpOwotICAgIG9rYXkgPSBzdGQ6OmlzZmluaXRlKG51bWJlcik7Ci0g
ICAgcmV0dXJuIEpTQzo6dG9JbnQzMihudW1iZXIpOwotfQotCi0vLyBWYWxpZGF0ZXMgdGhhdCB0
aGUgcGFzc2VkIG9iamVjdCBpcyBhIHNlcXVlbmNlIHR5cGUgcGVyIHNlY3Rpb24gNC4xLjEzIG9m
IHRoZSBXZWJJREwgc3BlYy4KLWlubGluZSBKU0M6OkpTT2JqZWN0KiB0b0pTU2VxdWVuY2UoSlND
OjpFeGVjU3RhdGUmIGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQmIGxlbmd0aCkK
LXsKLSAgICBKU0M6OlZNJiB2bSA9IGV4ZWMudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS5n
ZXRPYmplY3QoKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICB0aHJvd1NlcXVlbmNlVHlw
ZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0g
ICAgSlNDOjpKU1ZhbHVlIGxlbmd0aFZhbHVlID0gb2JqZWN0LT5nZXQoJmV4ZWMsIGV4ZWMucHJv
cGVydHlOYW1lcygpLmxlbmd0aCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVs
bHB0cik7Ci0KLSAgICBpZiAobGVuZ3RoVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgewotICAg
ICAgICB0aHJvd1NlcXVlbmNlVHlwZUVycm9yKGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgbGVuZ3RoID0gbGVuZ3RoVmFsdWUudG9VSW50MzIoJmV4
ZWMpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwotCi0gICAgcmV0
dXJuIG9iamVjdDsKLX0KLQotaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1ZmZl
ciYgYnVmZmVyKQotewotICAgIGlmIChhdXRvIHJlc3VsdCA9IGdldENhY2hlZFdyYXBwZXIoZ2xv
YmFsT2JqZWN0LT53b3JsZCgpLCBidWZmZXIpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0g
ICAgLy8gVGhlIEpTQXJyYXlCdWZmZXI6OmNyZWF0ZSBmdW5jdGlvbiB3aWxsIHJlZ2lzdGVyIHRo
ZSB3cmFwcGVyIGluIGZpbmlzaENyZWF0aW9uLgotICAgIHJldHVybiBKU0M6OkpTQXJyYXlCdWZm
ZXI6OmNyZWF0ZShzdGF0ZS0+dm0oKSwgZ2xvYmFsT2JqZWN0LT5hcnJheUJ1ZmZlclN0cnVjdHVy
ZShidWZmZXIuc2hhcmluZ01vZGUoKSksICZidWZmZXIpOwotfQotCi1pbmxpbmUgSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIHN0YXRlLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTQzo6QXJyYXlCdWZmZXJWaWV3JiB2aWV3KQotewotICAgIHJldHVybiB2aWV3
LndyYXAoc3RhdGUsIGdsb2JhbE9iamVjdCk7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQzo6QXJyYXlCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuIEpTQzo6anNOdWxsKCk7Ci0gICAgcmV0dXJuIHRvSlMoc3RhdGUsIGdsb2JhbE9iamVj
dCwgKmJ1ZmZlcik7Ci19Ci0KLWlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpBcnJheUJ1
ZmZlclZpZXcqIHZpZXcpCi17Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm4gSlNDOjpq
c051bGwoKTsKLSAgICByZXR1cm4gdG9KUyhzdGF0ZSwgZ2xvYmFsT2JqZWN0LCAqdmlldyk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPFQ+JiYg
cHRyKQotewotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsK
LX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWZQdHI8
VD4mJiBwdHIpCi17Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBwdHIuZ2V0
KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IFZlY3RvcjxUPiYgdmVjdG9yKQotewotICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAg
IEpTQzo6SlNBcnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIs
IHZlY3Rvci5zaXplKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNW
YWx1ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkg
ewotICAgICAgICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIHZlY3RvcltpXSkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCBKU0M6OkpTVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsKLX0KLQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIEpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8UmVmUHRy
PFQ+PiYgdmVjdG9yKQotewotICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwot
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLQotICAgIEpTQzo6SlNB
cnJheSogYXJyYXkgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHZlY3Rvci5z
aXplKCkpOwotICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIEpTQzo6SlNWYWx1ZSgpKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAg
ICBhcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaSwgdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IHZlY3RvcltpXS5nZXQoKSkpOwotICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBK
U0M6OkpTVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsKLX0KLQotaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCos
IGNvbnN0IEpTQzo6UHJpdmF0ZU5hbWUmIHByaXZhdGVOYW1lKQotewotICAgIHJldHVybiBKU0M6
OlN5bWJvbDo6Y3JlYXRlKGV4ZWMtPnZtKCksIHByaXZhdGVOYW1lLnVpZCgpKTsKLX0KLQotaW5s
aW5lIEpTQzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3IoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RP
TUdsb2JhbE9iamVjdCYsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gY3JlYXRl
SXRlcmF0b3JSZXN1bHRPYmplY3QoJnN0YXRlLCB2YWx1ZSwgZmFsc2UpOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNJdGVyYXRvcihKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIGNvbnN0IFQmIHZh
bHVlKQotewotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIHRv
SlMoJnN0YXRlLCAmZ2xvYmFsT2JqZWN0LCB2YWx1ZSksIGZhbHNlKTsKLX0KLQotaW5saW5lIEpT
Qzo6SlNWYWx1ZSB0b0pTSXRlcmF0b3JFbmQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlKQotewotICAg
IHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdCgmc3RhdGUsIEpTQzo6anNVbmRlZmlu
ZWQoKSwgdHJ1ZSk7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRv
UG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKLXsKLSAgICBhdXRvKiB3cmFwcGVyID0ganNEeW5hbWljRG93bmNhc3Q8SlNDOjpKU0Fy
cmF5QnVmZmVyVmlldyo+KHZtLCB2YWx1ZSk7Ci0gICAgaWYgKCF3cmFwcGVyKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gd3JhcHBlci0+cG9zc2libHlTaGFyZWRJbXBsKCk7
Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpBcnJheUJ1ZmZlclZpZXc+IHRvVW5zaGFyZWRBcnJh
eUJ1ZmZlclZpZXcoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBhdXRv
IHJlc3VsdCA9IHRvUG9zc2libHlTaGFyZWRBcnJheUJ1ZmZlclZpZXcodm0sIHZhbHVlKTsKLSAg
ICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPmlzU2hhcmVkKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQ4QXJy
YXk+IHRvUG9zc2libHlTaGFyZWRJbnQ4QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6
SW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQxNkFycmF5
PiB0b1Bvc3NpYmx5U2hhcmVkSW50MTZBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJ
bnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpJbnQzMkFycmF5
PiB0b1Bvc3NpYmx5U2hhcmVkSW50MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJ
bnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50OEFycmF5
PiB0b1Bvc3NpYmx5U2hhcmVkVWludDhBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZh
bHVlKSB7IHJldHVybiBKU0M6OnRvUG9zc2libHlTaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpV
aW50OEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBSZWZQdHI8SlNDOjpVaW50OENsYW1w
ZWRBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQ4Q2xhbXBlZEFycmF5KEpTQzo6Vk0mIHZtLCBK
U0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJlZE5hdGl2ZVR5
cGVkVmlldzxKU0M6OlVpbnQ4Q2xhbXBlZEFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGluZSBS
ZWZQdHI8SlNDOjpVaW50MTZBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQxNkFycmF5KEpTQzo6
Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNoYXJl
ZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQxNkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlubGlu
ZSBSZWZQdHI8SlNDOjpVaW50MzJBcnJheT4gdG9Qb3NzaWJseVNoYXJlZFVpbnQzMkFycmF5KEpT
Qzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9Qb3NzaWJseVNo
YXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7IH0KLWlu
bGluZSBSZWZQdHI8SlNDOjpGbG9hdDMyQXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9hdDMyQXJy
YXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0b1Bvc3Np
Ymx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQzMkFkYXB0b3I+KHZtLCB2YWx1ZSk7
IH0KLWlubGluZSBSZWZQdHI8SlNDOjpGbG9hdDY0QXJyYXk+IHRvUG9zc2libHlTaGFyZWRGbG9h
dDY0QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gSlNDOjp0
b1Bvc3NpYmx5U2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6RmxvYXQ2NEFkYXB0b3I+KHZtLCB2
YWx1ZSk7IH0KLQotaW5saW5lIFJlZlB0cjxKU0M6OkludDhBcnJheT4gdG9VbnNoYXJlZEludDhB
cnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5z
aGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpJbnQ4QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5s
aW5lIFJlZlB0cjxKU0M6OkludDE2QXJyYXk+IHRvVW5zaGFyZWRJbnQxNkFycmF5KEpTQzo6Vk0m
IHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5
cGVkVmlldzxKU0M6OkludDE2QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxK
U0M6OkludDMyQXJyYXk+IHRvVW5zaGFyZWRJbnQzMkFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpT
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6
OkludDMyQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4QXJy
YXk+IHRvVW5zaGFyZWRVaW50OEFycmF5KEpTQzo6Vk0mIHZtLCBKU0M6OkpTVmFsdWUgdmFsdWUp
IHsgcmV0dXJuIEpTQzo6dG9VbnNoYXJlZE5hdGl2ZVR5cGVkVmlldzxKU0M6OlVpbnQ4QWRhcHRv
cj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQ4Q2xhbXBlZEFycmF5PiB0
b1Vuc2hhcmVkVWludDhDbGFtcGVkQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgeyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDhDbGFt
cGVkQWRhcHRvcj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQxNkFycmF5
PiB0b1Vuc2hhcmVkVWludDE2QXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkg
eyByZXR1cm4gSlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDE2QWRhcHRv
cj4odm0sIHZhbHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OlVpbnQzMkFycmF5PiB0b1Vuc2hh
cmVkVWludDMyQXJyYXkoSlNDOjpWTSYgdm0sIEpTQzo6SlNWYWx1ZSB2YWx1ZSkgeyByZXR1cm4g
SlNDOjp0b1Vuc2hhcmVkTmF0aXZlVHlwZWRWaWV3PEpTQzo6VWludDMyQWRhcHRvcj4odm0sIHZh
bHVlKTsgfQotaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0MzJBcnJheT4gdG9VbnNoYXJlZEZsb2F0
MzJBcnJheShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRv
VW5zaGFyZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDMyQWRhcHRvcj4odm0sIHZhbHVlKTsg
fQotaW5saW5lIFJlZlB0cjxKU0M6OkZsb2F0NjRBcnJheT4gdG9VbnNoYXJlZEZsb2F0NjRBcnJh
eShKU0M6OlZNJiB2bSwgSlNDOjpKU1ZhbHVlIHZhbHVlKSB7IHJldHVybiBKU0M6OnRvVW5zaGFy
ZWROYXRpdmVUeXBlZFZpZXc8SlNDOjpGbG9hdDY0QWRhcHRvcj4odm0sIHZhbHVlKTsgfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBKU1Q+IGlubGluZSBWZWN0b3I8UmVmPFQ+PiB0
b1JlZk5hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIHZhbHVl
KQotewotICAgIEpTQzo6Vk0mIHZtID0gc3RhdGUudm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpIHsKLSAg
ICAgICAgdGhyb3dTZXF1ZW5jZVR5cGVFcnJvcihzdGF0ZSwgc2NvcGUpOwotICAgICAgICByZXR1
cm4geyB9OwotICAgIH0KLQotICAgIFZlY3RvcjxSZWY8VD4+IHJlc3VsdDsKLSAgICBmb3JFYWNo
SW5JdGVyYWJsZSgmc3RhdGUsIHZhbHVlLCBbJnJlc3VsdF0oSlNDOjpWTSYgdm0sIEpTQzo6RXhl
Y1N0YXRlKiBzdGF0ZSwgSlNDOjpKU1ZhbHVlIGpzVmFsdWUpIHsKLSAgICAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgICAgIGlmIChqc1ZhbHVlLmluaGVy
aXRzKHZtLCBKU1Q6OmluZm8oKSkpIHsKLSAgICAgICAgICAgIGF1dG8qIG9iamVjdCA9IEpTVDo6
dG9XcmFwcGVkKHZtLCBqc1ZhbHVlKTsKLSAgICAgICAgICAgIEFTU0VSVChvYmplY3QpOwotICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgqb2JqZWN0KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICB0aHJvd0FycmF5RWxlbWVudFR5cGVFcnJvcigqc3RhdGUsIHNjb3BlKTsKLSAgICB9KTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgU3RyaW5nIHByb3BlcnR5TmFtZVRvU3Ry
aW5nKEpTQzo6UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICBBU1NFUlQoIXByb3Bl
cnR5TmFtZS5pc1N5bWJvbCgpKTsKLSAgICByZXR1cm4gcHJvcGVydHlOYW1lLnVpZCgpID8gcHJv
cGVydHlOYW1lLnVpZCgpIDogcHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKTsKLX0KLQotaW5saW5l
IEF0b21pY1N0cmluZyBwcm9wZXJ0eU5hbWVUb0F0b21pY1N0cmluZyhKU0M6OlByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgcmV0dXJuIEF0b21pY1N0cmluZyhwcm9wZXJ0eU5hbWUu
dWlkKCkgPyBwcm9wZXJ0eU5hbWUudWlkKCkgOiBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsK
LX0KLQotdGVtcGxhdGU8SlNDOjpOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbiwgaW50IGxl
bmd0aD4gSlNDOjpFbmNvZGVkSlNWYWx1ZSBub25DYWNoaW5nU3RhdGljRnVuY3Rpb25HZXR0ZXIo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6RW5jb2RlZEpTVmFsdWUsIEpTQzo6UHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICByZXR1cm4gSlNDOjpKU1ZhbHVlOjplbmNvZGUoSlND
OjpKU0Z1bmN0aW9uOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBsZW5ndGgsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCksIG5hdGl2ZUZ1bmN0aW9uKSk7
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlNDOjpFeGVjU3Rh
dGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbiYmIGV4Y2Vw
dGlvbikKLXsKLSAgICBpZiAodGhyb3dTY29wZS5leGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIHByb3BhZ2F0ZUV4Y2VwdGlvblNsb3dQYXRoKHN0YXRlLCB0aHJvd1Njb3BlLCBXVEZN
b3ZlKGV4Y2VwdGlvbikpOwotfQotCi1pbmxpbmUgdm9pZCBwcm9wYWdhdGVFeGNlcHRpb24oSlND
OjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlv
bk9yPHZvaWQ+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlv
bigpKSkKLSAgICAgICAgcHJvcGFnYXRlRXhjZXB0aW9uKHN0YXRlLCB0aHJvd1Njb3BlLCB2YWx1
ZS5yZWxlYXNlRXhjZXB0aW9uKCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9y
PFQ+JiYgdmFsdWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkg
ewotICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJl
bGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHJldHVy
biB0b0pTKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVlKCkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgSlNDOjpKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0RPTUdsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0LCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUsIEV4Y2VwdGlvbk9yPFQ+JiYgdmFs
dWUpCi17Ci0gICAgaWYgKFVOTElLRUxZKHZhbHVlLmhhc0V4Y2VwdGlvbigpKSkgewotICAgICAg
ICBwcm9wYWdhdGVFeGNlcHRpb24oc3RhdGUsIHRocm93U2NvcGUsIHZhbHVlLnJlbGVhc2VFeGNl
cHRpb24oKSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotICAgIHJldHVybiB0b0pTTmV3
bHlDcmVhdGVkKCZzdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUucmVsZWFzZVJldHVyblZhbHVl
KCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgVCogQmluZGluZ1NlY3VyaXR5
OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIFQmIG5vZGUpCi17
Ci0gICAgcmV0dXJuIHNob3VsZEFsbG93QWNjZXNzVG9Ob2RlKHN0YXRlLCAmbm9kZSkgPyAmbm9k
ZSA6IG51bGxwdHI7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUKiBCaW5kaW5n
U2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgVCog
bm9kZSkKLXsKLSAgICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoc3RhdGUsIG5vZGUp
ID8gbm9kZSA6IG51bGxwdHI7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBFeGNl
cHRpb25PcjxUKj4gQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEV4Y2VwdGlvbk9yPFQqPiYmIHZhbHVlKQotewotICAgIGlmICh2YWx1
ZS5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIHZhbHVlLnJlbGVhc2VFeGNlcHRpb24o
KTsKLSAgICByZXR1cm4gY2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIHZhbHVlLnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIEV4Y2VwdGlv
bk9yPFQqPiBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2RlKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgRXhjZXB0aW9uT3I8VCY+JiYgdmFsdWUpCi17Ci0gICAgaWYgKHZhbHVlLmhh
c0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gdmFsdWUucmVsZWFzZUV4Y2VwdGlvbigpOwot
ICAgIHJldHVybiBjaGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgdmFsdWUucmVsZWFzZVJldHVy
blZhbHVlKCkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudFRhcmdldEN1c3RvbS5oCShyZXZpc2lvbiAy
MTEzOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9t
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDggQEAKIAogI2luY2x1ZGUgIkRPTVdpbmRv
dy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZ0Nh
bGxlci5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRWxlbWVu
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNI
VE1MRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDIxMTM5NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSFRNTEVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2UuaCIKKyNpbmNsdWRl
ICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNOb2RlQ3VzdG9tLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSW50ZXJuYWxG
dW5jdGlvbi5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2Nh
dGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDIxMTM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw4
IEBACiAjaW5jbHVkZSAiSlNMb2NhdGlvbi5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2Vw
dGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCiAj
aW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9ic2VydmVyQ3VzdG9tLmNwcAkocmV2
aXNpb24gMjExMzk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNdXRhdGlvbk9i
c2VydmVyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1
ZGUgIkpTTXV0YXRpb25PYnNlcnZlci5oIgogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgor
I2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU011dGF0aW9uQ2FsbGJh
Y2suaCIKICNpbmNsdWRlICJKU05vZGVDdXN0b20uaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2Vy
dmVyLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2tDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFja0N1c3RvbS5jcHAJKHJldmlzaW9uIDIx
MTM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFja0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1NRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCIK
IAorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU1NRTEVy
cm9yLmgiCiAjaW5jbHVkZSAiSlNTUUxUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3Rv
cmFnZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNTdG9yYWdlQ3VzdG9tLmNwcAkocmV2aXNpb24gMjExMzk3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIkpTU3RvcmFnZS5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgPHJ1bnRp
bWUvSWRlbnRpZmllcklubGluZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL1Byb3BlcnR5TmFtZUFy
cmF5Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20uY3BwCShyZXZpc2lvbiAyMTEzOTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDggQEAKICNpbmNsdWRlICJKU1dvcmtlci5oIgogCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJK
U0RPTUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgog
I2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3dDdXN0
b20uaCIKICNpbmNsdWRlICJXb3JrZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTWFBhdGhOU1Jlc29sdmVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1hQYXRoTlNSZXNvbHZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDIx
MTM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTWFBhdGhOU1Jlc29sdmVyQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkpTWFBh
dGhOU1Jlc29sdmVyLmgiCiAKICNpbmNsdWRlICJKU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5oIgot
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxp
bmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NoZWR1bGVkQWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCShyZXZpc2lvbiAyMTEzOTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9N
V2luZG93LmgiCiAjaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCiAjaW5jbHVkZSAi
SlNNYWluVGhyZWFkRXhlY1N0YXRlSW5zdHJ1bWVudGF0aW9uLmgiCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjEx
Mzk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJHQ0NvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJIVE1MUGx1Z0luRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiCisjaW5j
bHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NV2luZG93Lmgi
CiAjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0
ZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXIuaAkocmV2aXNpb24gMjExMzk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMSArNTYsMTIgQEAgY2xhc3Mg
RnJhbWU7CiBjbGFzcyBIVE1MRG9jdW1lbnQ7CiBjbGFzcyBIVE1MUGx1Z0luRWxlbWVudDsKIGNs
YXNzIExvYWRhYmxlTW9kdWxlU2NyaXB0OwotY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBT
Y3JpcHRTb3VyY2VDb2RlOworY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBXaWRnZXQ7Citz
dHJ1Y3QgRXhjZXB0aW9uRGV0YWlsczsKIAotdHlwZWRlZiBIYXNoTWFwPHZvaWQqLCBSZWZQdHI8
SlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdD4+IFJvb3RPYmplY3RNYXA7Cit1c2luZyBSb290T2Jq
ZWN0TWFwID0gSGFzaE1hcDx2b2lkKiwgUmVmUHRyPEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3Q+
PjsKIAogZW51bSBSZWFzb25Gb3JDYWxsaW5nQ2FuRXhlY3V0ZVNjcmlwdHMgewogICAgIEFib3V0
VG9FeGVjdXRlU2NyaXB0LApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
R2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TY3JpcHRHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TY3JpcHRHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw3ICszMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2NyaXB0R2xv
YmFsT2JqZWN0LmgiCiAKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RP
TUNvbnZlcnQuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVk
ZSAiSlNJbnNwZWN0b3JGcm9udGVuZEhvc3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZp
ZXJJbmxpbmVzLmg+CiAKQEAgLTQ1LDcgKzQ2LDcgQEAgYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6
OnNldChFeGVjU3RhdGUmIAogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgYXV0byYgZ2xvYmFsT2JqZWN0ID0g
KmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHNjcmlwdFN0YXRlLmxleGljYWxHbG9iYWxPYmpl
Y3QoKSk7Ci0gICAgZ2xvYmFsT2JqZWN0LnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sIG5hbWUpLCB0b0pTKCZzY3JpcHRTdGF0ZSwgJmdsb2JhbE9iamVjdCwgdmFsdWUp
KTsKKyAgICBnbG9iYWxPYmplY3QucHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KCZ2bSwgbmFtZSksIHRvSlM8SURMSW50ZXJmYWNlPEluc3BlY3RvckZyb250ZW5kSG9zdD4+KHNj
cmlwdFN0YXRlLCBnbG9iYWxPYmplY3QsIHZhbHVlKSk7CiAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkgewogICAgICAgICByZXBvcnRFeGNlcHRpb24oJnNjcmlwdFN0YXRlLCBz
Y29wZS5leGNlcHRpb24oKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1N0cnVjdHVyZWRDbG9uZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RydWN0dXJlZENsb25lLmNwcAkocmV2aXNpb24gMjEx
Mzk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU3RydWN0dXJlZENsb25lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZWRDbG9u
ZS5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRp
b25IYW5kbGluZy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgogCiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHJldmlzaW9uIDIxMTM5NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDEzLDYgKzMwMTMsOSBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIHB1
c2goQGltcGxDb250ZW50SGVhZGVyLCBHZW5lcmF0ZUltcGxlbWVudGF0aW9uQ29udGVudEhlYWRl
cigkaW50ZXJmYWNlKSk7CiAKICAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTUJpbmRpbmcuaCJ9ID0g
MTsKKyAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTUJpbmRpbmdDYWxsZXIuaCJ9ID0gMTsKKyAgICAk
aW1wbEluY2x1ZGVzeyJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgifSA9IDE7CisgICAgJGltcGxJ
bmNsdWRlc3siSlNET01XcmFwcGVyQ2FjaGUuaCJ9ID0gMTsKICAgICAkaW1wbEluY2x1ZGVzeyI8
d3RmL0dldFB0ci5oPiJ9ID0gMTsKICAgICAkaW1wbEluY2x1ZGVzeyI8cnVudGltZS9Qcm9wZXJ0
eU5hbWVBcnJheS5oPiJ9ID0gMSBpZiAkaW5kZXhlZEdldHRlckZ1bmN0aW9uOwogCkBAIC0zNjMz
LDYgKzM2MzYsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgaWYg
KCRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NoZWNrU2VjdXJpdHl9ICYmCiAgICAg
ICAgICAgICAgICAgISRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvTm90Q2hlY2tT
ZWN1cml0eX0gJiYKICAgICAgICAgICAgICAgICAhJGF0dHJpYnV0ZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57RG9Ob3RDaGVja1NlY3VyaXR5T25HZXR0ZXJ9KSB7CisgICAgICAgICAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiKTsKICAgICAgICAgICAgICAg
ICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9ET01XaW5kb3coJnN0YXRlLCB0aGlzT2JqZWN0LndyYXBwZWQoKSwgVGhyb3dT
ZWN1cml0eUVycm9yKSlcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0zODAzLDYg
KzM4MDcsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q2hlY2tTZWN1
cml0eX0gJiYgISRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvTm90Q2hlY2tTZWN1
cml0eX0gJiYgISRhdHRyaWJ1dGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0RvTm90Q2hlY2tTZWN1
cml0eU9uU2V0dGVyfSkgeworICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RP
TUJpbmRpbmdTZWN1cml0eS5oIik7CiAgICAgICAgICAgICAgICAgaWYgKCRpbnRlcmZhY2VOYW1l
IGVxICJET01XaW5kb3ciKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93
KCZzdGF0ZSwgdGhpc09iamVjdC53cmFwcGVkKCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsK
ICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDA1MSw2ICs0MDU2LDcgQEAgRU5ECiAgICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHRocm93U2Nv
cGUpO1xuIik7CiAKICAgICAgICAgICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Q2hlY2tTZWN1cml0eX0gYW5kICEkZnVuY3Rpb24tPmV4dGVuZGVkQXR0cmlidXRl
cy0+e0RvTm90Q2hlY2tTZWN1cml0eX0pIHsKKyAgICAgICAgICAgICAgICAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKCRpbnRlcmZhY2VOYW1lIGVxICJET01XaW5kb3ciKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxk
QWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhzdGF0ZSwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpLCBUaHJv
d1NlY3VyaXR5RXJyb3IpKVxuIik7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC00
NDc3LDYgKzQ0ODMsNyBAQCBzdWIgR2VuZXJhdGVDYWxsV2l0aAogICAgIH0KICAgICBpZiAoJGNv
ZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiQ2FsbGVy
RG9jdW1lbnQiKSkgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJEb2N1bWVudC5oIn0gPSAxOwor
ICAgICAgICAkaW1wbEluY2x1ZGVzeyJKU0RPTVdpbmRvd0Jhc2UuaCJ9ID0gMTsKICAgICAgICAg
cHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIGRvY3VtZW50ID0gY2FsbGVyRE9NV2luZG93
KCRzdGF0ZVBvaW50ZXIpLmRvY3VtZW50KCk7XG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFy
cmF5LCAiICAgIGlmICghZG9jdW1lbnQpXG4iKTsKICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5
LCAiICAgICAgICByZXR1cm4iIC4gKCRyZXR1cm5WYWx1ZSA/ICIgIiAuICRyZXR1cm5WYWx1ZSA6
ICIiKSAuICI7XG4iKTsKQEAgLTQ0ODgsOSArNDQ5NSwyMSBAQCBzdWIgR2VuZXJhdGVDYWxsV2l0
aAogICAgICAgICAkaW1wbEluY2x1ZGVzeyI8aW5zcGVjdG9yL1NjcmlwdENhbGxTdGFja0ZhY3Rv
cnkuaD4ifSA9IDE7CiAgICAgICAgIHB1c2goQGNhbGxXaXRoQXJncywgIldURk1vdmUoc2NyaXB0
QXJndW1lbnRzKSIpOwogICAgIH0KLSAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICJhY3RpdmVET01X
aW5kb3coJHN0YXRlUG9pbnRlcikiKSBpZiAkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1
dGVDb250YWlucygkY2FsbFdpdGgsICJBY3RpdmVXaW5kb3ciKTsKLSAgICBwdXNoKEBjYWxsV2l0
aEFyZ3MsICJmaXJzdERPTVdpbmRvdygkc3RhdGVQb2ludGVyKSIpIGlmICRjb2RlR2VuZXJhdG9y
LT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkZpcnN0V2luZG93Iik7Ci0g
ICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiY2FsbGVyRE9NV2luZG93KCRzdGF0ZVBvaW50ZXIpIikg
aWYgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAi
Q2FsbGVyV2luZG93Iik7CisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0
ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkFjdGl2ZVdpbmRvdyIpKSB7CisgICAgICAgICRpbXBsSW5j
bHVkZXN7IkpTRE9NV2luZG93QmFzZS5oIn0gPSAxOworICAgICAgICBwdXNoKEBjYWxsV2l0aEFy
Z3MsICJhY3RpdmVET01XaW5kb3coJHN0YXRlUG9pbnRlcikiKTsKKyAgICAgICAgCisgICAgfQor
ICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdp
dGgsICJGaXJzdFdpbmRvdyIpKSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRE9NV2luZG93
QmFzZS5oIn0gPSAxOworICAgICAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICJmaXJzdERPTVdpbmRv
dygkc3RhdGVQb2ludGVyKSIpOworICAgICAgICAKKyAgICB9CisgICAgaWYgKCRjb2RlR2VuZXJh
dG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIkNhbGxlcldpbmRvdyIp
KSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkpTRE9NV2luZG93QmFzZS5oIn0gPSAxOworICAg
ICAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICJjYWxsZXJET01XaW5kb3coJHN0YXRlUG9pbnRlciki
KTsKKyAgICAgICAgCisgICAgfQogCiAgICAgcmV0dXJuIEBjYWxsV2l0aEFyZ3M7CiB9CkBAIC00
NTk5LDggKzQ2MTgsNiBAQCBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2sKICAgICAgICAgJHF1
b3RlZEZ1bmN0aW9uTmFtZSA9ICJudWxscHRyIjsKICAgICB9CiAKLSAgICBBZGRUb0ltcGxJbmNs
dWRlcygiSlNET01CaW5kaW5nLmgiLCAkY29uZGl0aW9uYWwpOwotCiAgICAgbXkgJGFyZ3VtZW50
SW5kZXggPSAwOwogICAgIGZvcmVhY2ggbXkgJGFyZ3VtZW50IChAeyRmdW5jdGlvbi0+YXJndW1l
bnRzfSkgewogICAgICAgICBteSAkdHlwZSA9ICRhcmd1bWVudC0+dHlwZTsKQEAgLTUwNjQsNiAr
NTA4MSw3IEBAIHN1YiBHZW5lcmF0ZUNhbGxiYWNrSW1wbGVtZW50YXRpb25Db250ZW4KIAogICAg
ICAgICAgICAgIyBGSVhNRTogV2UgY3VycmVudGx5IGp1c3QgcmVwb3J0IHRoZSBleGNlcHRpb24u
IFdlIHNob3VsZCBwcm9iYWJseSBhZGQgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIHRvIGluZGljYXRl
IHdoZW4KICAgICAgICAgICAgICMgd2Ugd2FudCB0aGUgZXhjZXB0aW9uIHRvIGJlIHJldGhyb3du
IGluc3RlYWQuCisgICAgICAgICAgICAkaW5jbHVkZXNSZWYtPnsiSlNET01FeGNlcHRpb25IYW5k
bGluZy5oIn0gPSAxOwogICAgICAgICAgICAgcHVzaChAJGNvbnRlbnRSZWYsICIgICAgaWYgKHJl
dHVybmVkRXhjZXB0aW9uKVxuIik7CiAgICAgICAgICAgICBwdXNoKEAkY29udGVudFJlZiwgIiAg
ICAgICAgcmVwb3J0RXhjZXB0aW9uKHN0YXRlLCByZXR1cm5lZEV4Y2VwdGlvbik7XG4iKTsKICAg
ICAgICAgICAgIHB1c2goQCRjb250ZW50UmVmLCAiICAgIHJldHVybiAhcmV0dXJuZWRFeGNlcHRp
b247XG4iKTsKQEAgLTU2MTIsNyArNTYzMCwxMCBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAg
QWRkVG9JbXBsSW5jbHVkZXNGb3JJRExUeXBlKCR0eXBlLCAkY29uZGl0aW9uYWwpOwogICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJKU0RPTUNvbnZlcnQuaCIsICRjb25kaXRpb25hbCk7CiAKLSAgICAk
dmFsdWUgPSAiQmluZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZSgkc3RhdGVSZWZl
cmVuY2UsICR2YWx1ZSkiIGlmICRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDaGVja1Nl
Y3VyaXR5Rm9yTm9kZX07CisgICAgaWYgKCRjb250ZXh0LT5leHRlbmRlZEF0dHJpYnV0ZXMtPntD
aGVja1NlY3VyaXR5Rm9yTm9kZX0pIHsKKyAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTRE9N
QmluZGluZ1NlY3VyaXR5LmgiLCAkY29uZGl0aW9uYWwpOworICAgICAgICAkdmFsdWUgPSAiQmlu
ZGluZ1NlY3VyaXR5OjpjaGVja1NlY3VyaXR5Rm9yTm9kZSgkc3RhdGVSZWZlcmVuY2UsICR2YWx1
ZSkiOworICAgIH0KIAogICAgIG15ICRJRExUeXBlID0gR2V0SURMVHlwZSgkaW50ZXJmYWNlLCAk
dHlwZSwgJGNvbnRleHQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNJbnRlcmZhY2VOYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNJbnRlcmZhY2VOYW1lLmNwcAkocmV2aXNpb24g
MjExMzk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTSW50
ZXJmYWNlTmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDEwIEBACiAjaW5jbHVk
ZSAiSlNJbnRlcmZhY2VOYW1lLmgiCiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTUJpbmRpbmdDYWxsZXIuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgi
CisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3Jh
cHBlckNhY2hlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgogI2lu
Y2x1ZGUgPHd0Zi9HZXRQdHIuaD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEFjdGl2ZURPTU9iamVj
dC5jcHAJKHJldmlzaW9uIDIxMTM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Miw4ICsyMiwxMiBAQAogI2luY2x1ZGUgIkpTVGVzdEFjdGl2ZURPTU9iamVjdC5oIgogCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nQ2FsbGVyLmgiCisj
aW5jbHVkZSAiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVj
dG9yLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRp
b25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAi
SlNOb2RlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
RnVuY3Rpb25Qcm90b3R5cGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENFUmVhY3Rpb25zLmNwcAkocmV2
aXNpb24gMjExMzk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdENFUmVhY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsMTEgQEAK
ICNpbmNsdWRlICJDdXN0b21FbGVtZW50UmVhY3Rpb25RdWV1ZS5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGlu
Z0NhbGxlci5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0RP
TUNvbnZlcnQuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVk
ZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKICNpbmNsdWRlICJKU1Rlc3RDRVJlYWN0aW9uc1N0cmlu
Z2lmaWVyLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUv
RnVuY3Rpb25Qcm90b3R5cGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q0VSZWFjdGlv
bnNTdHJpbmdpZmllci5jcHAJKHJldmlzaW9uIDIxMTM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDRVJlYWN0aW9uc1N0cmluZ2lmaWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsMTEgQEAKIAogI2luY2x1ZGUgIkN1c3RvbUVsZW1l
bnRSZWFjdGlvblF1ZXVlLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAi
SlNET01CaW5kaW5nQ2FsbGVyLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2lu
Y2x1ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcu
aCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJy
b3IuaD4KICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CiAjaW5jbHVkZSA8
d3RmL0dldFB0ci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0Z1bmN0aW9uLmNwcAko
cmV2aXNpb24gMjExMzk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsy
NSw3IEBACiAjaW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbi5oIgogCiAjaW5jbHVkZSAi
SlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2lu
Y2x1ZGUgIkpTVGVzdE5vZGUuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CiAjaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbldpdGhUeXBl
ZGVmcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdENhbGxiYWNrRnVuY3Rpb25XaXRoVHlwZWRlZnMuY3BwCShyZXZpc2lvbiAy
MTEzOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
Q2FsbGJhY2tGdW5jdGlvbldpdGhUeXBlZGVmcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYg
KzIyLDcgQEAKICNpbmNsdWRlICJKU1Rlc3RDYWxsYmFja0Z1bmN0aW9uV2l0aFR5cGVkZWZzLmgi
CiAKICNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhh
bmRsaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUg
PHJ1bnRpbWUvSlNBcnJheS5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Q2FsbGJhY2tJbnRl
cmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RDYWxsYmFja0ludGVyZmFjZS5jcHAJKHJldmlzaW9uIDIxMTM5NykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDYWxsYmFja0lu
dGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUg
IkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRl
ICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01TdHJpbmdMaXN0Lmgi
CiAjaW5jbHVkZSAiSlNUZXN0Tm9kZS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RDbGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRp
bkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjExMzk3KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdENsYXNzV2l0aEpTQnVpbHRpbkNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsMTAgQEAKICNpbmNsdWRlICJKU1Rlc3RD
bGFzc1dpdGhKU0J1aWx0aW5Db25zdHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nQ2FsbGVyLmgiCiAjaW5jbHVkZSAiSlNET01Db25z
dHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRl
ICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgIlRlc3RDbGFzc1dpdGhKU0J1aWx0aW5D
b25zdHJ1Y3RvckJ1aWx0aW5zLmgiCiAjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlw
ZS5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21Db25zdHJ1Y3RvcldpdGhOb0ludGVyZmFj
ZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmNw
cAkocmV2aXNpb24gMjExMzk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEN1c3RvbUNvbnN0cnVjdG9yV2l0aE5vSW50ZXJmYWNlT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsMTAgQEAKICNpbmNsdWRlICJKU1Rlc3RDdXN0b21D
b25zdHJ1Y3RvcldpdGhOb0ludGVyZmFjZU9iamVjdC5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nQ2FsbGVyLmgiCiAjaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90
b3R5cGUuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEN1c3RvbU5hbWVkR2V0dGVyLmNwcAkocmV2aXNpb24gMjExMzk3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsMTEgQEAKICNpbmNsdWRlICJKU1Rlc3RDdXN0b21O
YW1lZEdldHRlci5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNE
T01CaW5kaW5nQ2FsbGVyLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIK
KyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3Iu
aD4KICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CiAjaW5jbHVkZSA8d3Rm
L0dldFB0ci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdERPTUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdERPTUpJVC5jcHAJKHJldmlzaW9uIDIxMTM5NykKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RET01KSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNywxMSBAQAogI2luY2x1ZGUgIkRPTUpJVElETFR5cGUu
aCIKICNpbmNsdWRlICJET01KSVRJRExUeXBlRmlsdGVyLmgiCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nQ2FsbGVyLmgiCiAjaW5jbHVkZSAiSlNET01D
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgIkpTRE9N
RXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2lu
Y2x1ZGUgIkpTRWxlbWVudC5oIgogI2luY2x1ZGUgIkpTTm9kZUxpc3QuaCIKICNpbmNsdWRlIDxp
bnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIxMTM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFdmVudENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsNyArMjIsMTAgQEAKICNpbmNsdWRlICJKU1Rlc3RFdmVudENvbnN0cnVjdG9yLmgi
CiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmdDYWxs
ZXIuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNET01FeGNl
cHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRUYXJnZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw4ICsyMiwxMSBAQAogI2luY2x1ZGUgIkpTVGVzdEV2ZW50VGFyZ2V0Lmgi
CiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmdDYWxs
ZXIuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01Db252
ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpT
RE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAiSlNOb2RlLmgiCiAjaW5jbHVkZSA8cnVudGlt
ZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaD4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNlcHRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RFeGNlcHRpb24uY3BwCShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIsOCArMjIsMTEgQEAKICNpbmNsdWRlICJKU1Rlc3RFeGNlcHRpb24uaCIKIAog
I2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZ0NhbGxlci5o
IgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnQu
aCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01X
cmFwcGVyQ2FjaGUuaCIKICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CiAj
aW5jbHVkZSA8d3RmL0dldFB0ci5oPgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdlbmVyYXRl
SXNSZWFjaGFibGUuY3BwCShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0R2VuZXJhdGVJc1JlYWNoYWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDcgKzIyLDEwIEBACiAjaW5jbHVkZSAiSlNUZXN0R2VuZXJhdGVJc1Jl
YWNoYWJsZS5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01C
aW5kaW5nQ2FsbGVyLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5o
IgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KICNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9K
Uy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAy
MTEzOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
R2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsOCArMjIsMTEgQEAKICNpbmNs
dWRlICJKU1Rlc3RHbG9iYWxPYmplY3QuaCIKIAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIkpTRE9NQmluZGluZ0NhbGxlci5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlv
bkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKICNpbmNsdWRlICJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUpTQ2xpZW50RGF0YS5o
IgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3Bw
CShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTEg
QEAKICNpbmNsdWRlICJKU1Rlc3RJbnRlcmZhY2UuaCIKIAogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZ0NhbGxlci5oIgogI2luY2x1ZGUgIkpTRE9NQ29u
c3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlICJKU0RPTUV4
Y2VwdGlvbkhhbmRsaW5nLmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKICNpbmNs
dWRlICJKU1Rlc3RPYmouaCIKICNpbmNsdWRlICJUZXN0U3VwcGxlbWVudGFsLmgiCiAjaW5jbHVk
ZSA8cnVudGltZS9FcnJvci5oPgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJm
YWNlTGVhZGluZ1VuZGVyc2NvcmUuY3BwCShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlTGVhZGluZ1VuZGVy
c2NvcmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiwxMSBAQAogI2luY2x1ZGUgIkpT
VGVzdEludGVyZmFjZUxlYWRpbmdVbmRlcnNjb3JlLmgiCiAKICNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmdDYWxsZXIuaCIKICNpbmNsdWRlICJKU0RPTUNv
bnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01F
eGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5j
bHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEl0ZXJhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwCShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SXRlcmFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiwxMSBAQAogI2luY2x1ZGUgIkpTVGVzdEl0ZXJhYmxl
LmgiCiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmdD
YWxsZXIuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNET01F
eGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1ZGUgIkpTRE9NSXRlcmF0b3IuaCIKKyNpbmNsdWRl
ICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5
cGUuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RKU0J1aWx0aW5Db25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEpTQnVpbHRpbkNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjExMzk3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEpTQnVpbHRpbkNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsMTAgQEAKICNpbmNsdWRlICJKU1Rlc3RK
U0J1aWx0aW5Db25zdHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5j
bHVkZSAiSlNET01CaW5kaW5nQ2FsbGVyLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5o
IgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdy
YXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgIlRlc3RKU0J1aWx0aW5Db25zdHJ1Y3RvckJ1aWx0aW5z
LmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rp
b25Qcm90b3R5cGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lci5jcHAJKHJldmlzaW9uIDIxMTM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjIsOCArMjIsMTEgQEAKICNpbmNsdWRlICJKU1Rlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmgiCiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RP
TUJpbmRpbmdDYWxsZXIuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiSlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgor
I2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSAiSlNNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDIxMTM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIsOCArMjIsMTEgQEAKICNpbmNsdWRlICJKU1Rlc3ROYW1lZENvbnN0cnVjdG9yLmgiCiAK
ICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmdDYWxsZXIu
aCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNET01Db252ZXJ0
LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2luY2x1ZGUgIkpTRE9N
V3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogI2luY2x1ZGUgPHJ1
bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE5vZGUuY3BwCShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEw
ICsyMiwxMyBAQAogI2luY2x1ZGUgIkpTVGVzdE5vZGUuaCIKIAogI2luY2x1ZGUgIkpTRE9NQmlu
ZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZ0NhbGxlci5oIgogI2luY2x1ZGUgIkpTRE9N
Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlICJKU0RP
TUV4Y2VwdGlvbkhhbmRsaW5nLmgiCiAjaW5jbHVkZSAiSlNET01JdGVyYXRvci5oIgogI2luY2x1
ZGUgIkpTRE9NUHJvbWlzZS5oIgorI2luY2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5j
bHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3Iu
aD4KICNpbmNsdWRlIDxydW50aW1lL09iamVjdENvbnN0cnVjdG9yLmg+CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNw
cAkocmV2aXNpb24gMjExMzk3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEyICsyNywxNyBAQAog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkpTQmxvYi5oIgogI2luY2x1ZGUgIkpT
RE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZ0NhbGxlci5oIgorI2luY2x1ZGUg
IkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgor
I2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTUl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNlLmgiCiAjaW5jbHVkZSAiSlNET01TdHJpbmdM
aXN0LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvd0Jh
c2UuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd1NoZWxsLmgiCisjaW5jbHVkZSAiSlNET01XcmFw
cGVyQ2FjaGUuaCIKICNpbmNsdWRlICJKU0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiSlNFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0
cnVjdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDExIEBACiAKICNpbmNsdWRl
ICJKU0Jsb2IuaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTUJp
bmRpbmdDYWxsZXIuaCIKICNpbmNsdWRlICJKU0RPTUNvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
SlNET01Db252ZXJ0LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgorI2lu
Y2x1ZGUgIkpTRE9NV3JhcHBlckNhY2hlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgog
I2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KICNpbmNsdWRlIDx3dGYvR2V0
UHRyLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnNXaXRoU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9yc1dpdGhTZXF1ZW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDExIEBACiAj
aW5jbHVkZSAiSlNUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5oIgogCiAj
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nQ2FsbGVyLmgi
CiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydC5o
IgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdy
YXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50
aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJp
ZGVCdWlsdGlucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJyaWRlQnVpbHRpbnMuY3BwCShyZXZpc2lvbiAyMTEzOTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcnJp
ZGVCdWlsdGlucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDExIEBACiAjaW5jbHVk
ZSAiSlNUZXN0T3ZlcnJpZGVCdWlsdGlucy5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgi
CisjaW5jbHVkZSAiSlNET01CaW5kaW5nQ2FsbGVyLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUg
IkpTTm9kZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KICNpbmNsdWRlIDxydW50aW1l
L0Z1bmN0aW9uUHJvdG90eXBlLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6YXRpb24uY3Bw
CShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0U2VyaWFsaXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIy
LDExIEBACiAjaW5jbHVkZSAiSlNUZXN0U2VyaWFsaXphdGlvbi5oIgogCiAjaW5jbHVkZSAiSlNE
T01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nQ2FsbGVyLmgiCiAjaW5jbHVkZSAi
SlNET01Db25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUg
IkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5o
IgogI2luY2x1ZGUgIkpTVGVzdE5vZGUuaCIKICNpbmNsdWRlIDxydW50aW1lL0Z1bmN0aW9uUHJv
dG90eXBlLmg+CiAjaW5jbHVkZSA8cnVudGltZS9PYmplY3RDb25zdHJ1Y3Rvci5oPgpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZS5jcHAJKHJldmlzaW9uIDIxMTM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw4ICsyNSwxMSBAQAogI2luY2x1ZGUgIkpTVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZS5oIgogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5j
bHVkZSAiSlNET01CaW5kaW5nQ2FsbGVyLmgiCiAjaW5jbHVkZSAiSlNET01Db25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgorI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFu
ZGxpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgogI2luY2x1ZGUgIkpTTWVz
c2FnZVBvcnQuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRl
IDxydW50aW1lL0Vycm9yLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0VHlwZWRlZnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RUeXBlZGVmcy5jcHAJKHJldmlzaW9uIDIx
MTM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RU
eXBlZGVmcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDggKzIyLDExIEBACiAjaW5jbHVkZSAi
SlNUZXN0VHlwZWRlZnMuaCIKIAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUg
IkpTRE9NQmluZGluZ0NhbGxlci5oIgogI2luY2x1ZGUgIkpTRE9NQ29uc3RydWN0b3IuaCIKICNp
bmNsdWRlICJKU0RPTUNvbnZlcnQuaCIKKyNpbmNsdWRlICJKU0RPTUV4Y2VwdGlvbkhhbmRsaW5n
LmgiCisjaW5jbHVkZSAiSlNET01XcmFwcGVyQ2FjaGUuaCIKICNpbmNsdWRlICJKU1NWR1BvaW50
LmgiCiAjaW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2tGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTVGVz
dENhbGxiYWNrSW50ZXJmYWNlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvb2JqYy9X
ZWJTY3JpcHRPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL29i
amMvV2ViU2NyaXB0T2JqZWN0Lm1tCShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2ltcG9ydCAiQnJpZGdlSlNDLmgiCiAjaW1wb3J0ICJGcmFtZS5oIgorI2lt
cG9ydCAiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIKICNpbXBvcnQgIkpTRE9NV2luZG93LmgiCiAj
aW1wb3J0ICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2ltcG9ydCAiSlNIVE1MRWxlbWVudC5oIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHAJKHJl
dmlzaW9uIDIxMTM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9t
cy5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZ1Nl
Y3VyaXR5LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgog
I2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFZpZGVvRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVmlkZW9FbGVtZW50LmNwcAkocmV2aXNpb24gMjExMzk3KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUxvYWRlci5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMjExMzk3KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3
IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvcldvcmtlckFnZW50LmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgorI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiCiAjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIK
ICNpbmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4
ZWNTdGF0ZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCShyZXZpc2lvbiAyMTEzOTcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBA
CiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFnZW50LmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGlu
Z0FnZW50cy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmdT
ZWN1cml0eS5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkpTTm9k
ZS5oIgogI2luY2x1ZGUgIk1haW5GcmFtZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL1BhZ2VTY3JpcHREZWJ1Z1NlcnZlci5jcHAJKHJldmlzaW9uIDIxMTM5NykK
KysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9QYWdlU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckZyb250
ZW5kQ2xpZW50LmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGluZy5oIgogI2luY2x1
ZGUgIkpTRE9NV2luZG93Q3VzdG9tLmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KIAogI2lmIFBMQVRGT1JNKElPUykKLSNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKICNp
bmNsdWRlICJXZWJDb3JlVGhyZWFkSW50ZXJuYWwuaCIKICNlbmRpZgogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvV29ya2VyU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5jcHAJ
KHJldmlzaW9uIDIxMTM5NykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Xb3JrZXJTY3Jp
cHREZWJ1Z1NlcnZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXb3JrZXJTY3JpcHREZWJ1Z1NlcnZlci5oIgogCi0j
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01FeGNlcHRpb25IYW5kbGlu
Zy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiV29ya2VyR2xvYmFsU2NvcGUuaCIK
ICNpbmNsdWRlICJXb3JrZXJSdW5Mb29wLmgiCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTEz
OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxMyBAQAorMjAxNy0wMS0zMCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAg
ICAgIEpTRE9NQmluZGluZyBpcyB0b28gYmlnLiBTcGxpdCBpdCB1cCEKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzYwMQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5jcHA6CisgICAgICAgIFJlcGxhY2UgaW5jbHVkZSBvZiBKU0RPTUJpbmRpbmcgd2l0
aCBKU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLgorCiAyMDE3LTAxLTMwICBBbmRlcnMgQ2FybHNzb24g
IDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHNvbWUgbW9yZSBjcmFzaCByZXBv
cnRlciBpbmZvcm1hdGlvbiB0byBkaWFnbm9zZSBhIGZhaWxlZCBtYWNoX21zZwpJbmRleDogU291
cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkJKHJldmlzaW9uIDIxMTM5NykK
KysrIFNvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC0zNDgsNyArMzQ4LDcgQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAg
c3BlY2lhbF9jYXNlcyA9IHsKICAgICAgICAgJ1N0cmluZyc6IFsnPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPiddLAogICAgICAgICAnV2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUnOiBbJzxXZWJD
b3JlL0VkaXRvci5oPiddLAotICAgICAgICAnV2ViQ29yZTo6RXhjZXB0aW9uRGV0YWlscyc6IFsn
PFdlYkNvcmUvSlNET01CaW5kaW5nLmg+J10sCisgICAgICAgICdXZWJDb3JlOjpFeGNlcHRpb25E
ZXRhaWxzJzogWyc8V2ViQ29yZS9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmg+J10sCiAgICAgICAg
ICdXZWJDb3JlOjpGaWxlQ2hvb3NlclNldHRpbmdzJzogWyc8V2ViQ29yZS9GaWxlQ2hvb3Nlci5o
PiddLAogICAgICAgICAnV2ViQ29yZTo6R3JhbW1hckRldGFpbCc6IFsnPFdlYkNvcmUvVGV4dENo
ZWNrZXJDbGllbnQuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6Okhhc0luc2VjdXJlQ29udGVudCc6
IFsnPFdlYkNvcmUvRnJhbWVMb2FkZXJUeXBlcy5oPiddLApJbmRleDogU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5jcHAJKHJldmlzaW9uIDIxMTM5NykK
KysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xh
eWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJHZXRSZXN1bHQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ltYWdlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9KU0RPTUJpbmRpbmcuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xl
bmd0aC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGF0aC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGx1
Z2luRGF0YS5oPgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAJKHJldmlzaW9uIDIxMTM5NykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDcgQEAKICNpbmNsdWRlIDxX
ZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9jdXNEaXJlY3Rpb24uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NQmluZGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNE
T01FeGNlcHRpb25IYW5kbGluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3Ry
eS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyRW1iZWRkZWRPYmplY3QuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmNwcAkocmV2aXNpb24gMjExMzk3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYg
KzYwLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dlb2xvY2F0aW9uQ2xpZW50Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dl
b2xvY2F0aW9uUG9zaXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NRXhjZXB0aW9uSGFu
ZGxpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9KU05vdGlmaWNhdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWFpbkZyYW1lLmg+Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShy
ZXZpc2lvbiAyMTEzOTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw2ICsxNDUsNyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvSGlzdG9yeUl0ZW0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hpdFRlc3RSZXN1bHQuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTRE9NV2lu
ZG93Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9MaWJXZWJSVENQcm92aWRlci5oPgo=
</data>
<flag name="review"
          id="322083"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>